@baukit/sync-client 0.4.0 → 0.5.1

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 CHANGED
@@ -74,11 +74,50 @@ The environment reports foreground state and connectivity. The scheduler runs on
74
74
  app returns to the foreground, when connectivity returns, and on the interval. It installs no
75
75
  interval while backgrounded and ignores connectivity events there.
76
76
 
77
- A failing run reaches `onError` and does not stop scheduling. Backoff between attempts belongs to
78
- the product's engine, inside `run()`, where it can see which failures are retryable.
77
+ A failing run reaches `onError` and does not stop scheduling. Without `retry`, the next attempt
78
+ waits for the next trigger.
79
79
 
80
- If the engine waits inside its own retry delay, pass `onRecoverySignal` to the scheduler and wake
81
- that delay there. The scheduler calls it with `active` before a foreground-triggered run and with
80
+ ### Retry and backoff
81
+
82
+ Pass `retry` to retry a failed run after a delay. The product decides which failures are worth a
83
+ retry and how long to wait, because only it knows its error types; the scheduler owns the attempt
84
+ count, the wait, and waking it early. `fullJitterBackoffMs` from `@baukit/api-runtime/backoff` is
85
+ the Baukit delay policy. The root entry of this package still imports nothing, so the product
86
+ passes the policy in:
87
+
88
+ ```ts
89
+ import { fullJitterBackoffMs } from '@baukit/api-runtime/backoff';
90
+ import { SyncRateLimitError, SyncScheduler, SyncTransportError } from '@baukit/sync-client';
91
+
92
+ const scheduler = new SyncScheduler(() => engine.syncOnce(), environment, {
93
+ retry: {
94
+ maxRetries: 4,
95
+ delayMs: (error, retryIndex) => {
96
+ if (error instanceof SyncRateLimitError) return Math.max(0, Date.parse(error.retryAt) - Date.now());
97
+ if (error instanceof SyncTransportError && !error.retryable) return null;
98
+ return fullJitterBackoffMs(retryIndex, { baseDelayMs: 500, maxDelayMs: 30_000 });
99
+ },
100
+ onRetryScheduled: ({ delayMs }) => status.showRetryAt(Date.now() + delayMs),
101
+ },
102
+ });
103
+ ```
104
+
105
+ After a failed run the scheduler asks `delayMs(error, retryIndex)`. `null` means no retry. A number
106
+ is the wait in milliseconds, and `onRetryScheduled` hears about it before the wait starts. The
107
+ retry index counts from 0 and restarts after a success. After `maxRetries` retries the scheduler
108
+ waits for the next trigger. A delay that is negative or not finite, or a `delayMs` that throws,
109
+ reaches `onError` and ends the retries. A `maxRetries` that is not a non-negative integer throws a
110
+ `RangeError` from the constructor.
111
+
112
+ The wait is a one-shot timer built from the environment's `setInterval`, so no environment
113
+ changes. Any trigger during the wait ends it at once and restarts the retry index at 0: a manual
114
+ `trigger()`, the interval, returning to the foreground, or connectivity returning while in the
115
+ foreground. A follow-up request during the wait does not end it, because the retry will send the
116
+ same writes. `stop()` ends the wait without another run, and a wait that ends while the app is
117
+ backgrounded runs nothing until the app returns.
118
+
119
+ If the engine waits inside its own retry delay instead, pass `onRecoverySignal` to the scheduler
120
+ and wake that delay there. The scheduler calls it with `active` before a foreground-triggered run and with
82
121
  `online` before an online-triggered run. Online recovery is reported even while the scheduler is
83
122
  backgrounded, although the scheduler still waits for foreground before starting another run.
84
123
  Retry wake-up belongs in this scheduler option, not in a decorated environment, because the
@@ -208,8 +247,8 @@ rejection details its UI needs:
208
247
 
209
248
  ```ts
210
249
  interface ProductAttention {
211
- object_entity_type: string;
212
- object_entity_id: string;
250
+ objectEntityType: string;
251
+ objectEntityId: string;
213
252
  rejections: readonly Rejection[];
214
253
  }
215
254
 
@@ -217,35 +256,13 @@ const status = new SyncStatusStore<ProductAttention>();
217
256
  status.setAttention(items, pendingCount);
218
257
  ```
219
258
 
220
- For stores and screens that use API-style names, `toSnakeCaseSnapshot` returns a typed projection:
221
-
222
- ```ts
223
- const snapshot = toSnakeCaseSnapshot(status.getSnapshot());
224
-
225
- snapshot.last_attempt_at;
226
- snapshot.last_success_at;
227
- snapshot.last_sync_at;
228
- snapshot.failure;
229
- snapshot.retrying;
230
- snapshot.retry_at;
231
- snapshot.pending_count;
232
- snapshot.initial_pull_status;
233
- snapshot.refresh_revision;
234
- snapshot.security_block;
235
- ```
236
-
237
- `status`, `error`, and `attention` keep their names. Attention items also keep their original
238
- shape.
239
-
240
259
  ### Timestamp migration
241
260
 
242
- `lastSyncAt` and `last_sync_at` are deprecated compatibility fields for one release cycle. They
243
- are derived from `lastSuccessAt` and `last_success_at`. New code must not write or persist them as
244
- attempt timestamps.
261
+ `lastSyncAt` is a deprecated compatibility field for one release cycle. It is derived from
262
+ `lastSuccessAt`. New code must not write or persist it as an attempt timestamp.
245
263
 
246
- Replace `snapshot.lastSyncAt` with `snapshot.lastSuccessAt`. Replace `snapshot.last_sync_at` with
247
- `snapshot.last_success_at`. Persist both attempt and success timestamps, then hydrate with an
248
- object:
264
+ Replace `snapshot.lastSyncAt` with `snapshot.lastSuccessAt`. Persist both attempt and success
265
+ timestamps, then hydrate with an object:
249
266
 
250
267
  ```ts
251
268
  status.hydrate({
@@ -354,7 +371,7 @@ without it receive the original case set and need no adapter change.
354
371
  `zeroCursor` is the product's explicit full-rebuild cursor. `decodeStaleCursor` maps the product's
355
372
  wire error onto `{ code: 'resync_required', horizon }`. The product response must keep the code and
356
373
  horizon field stable. For the HTTP 409 envelope, the source value is
357
- `error.details.horizon_revision`.
374
+ `error.details.horizonRevision`.
358
375
 
359
376
  `isResetSafe` is the production policy hook. `setResetSafe` lets the isolated test client enter a
360
377
  safe or unsafe state. `reset` clears server-backed rows and writes `zeroCursor` in one transaction,
package/dist/error.d.ts CHANGED
@@ -15,13 +15,6 @@ export type SyncFailure = {
15
15
  } | {
16
16
  readonly kind: 'local_apply';
17
17
  };
18
- /** Snake-case projection of {@link SyncFailure}. */
19
- export type SnakeCaseSyncFailure = Exclude<SyncFailure, {
20
- readonly kind: 'rate_limited';
21
- }> | {
22
- readonly kind: 'rate_limited';
23
- readonly retry_at: string;
24
- };
25
18
  /** A sync request failed. `retryable` decides whether a later attempt may win. */
26
19
  export declare class SyncTransportError extends Error {
27
20
  readonly retryable: boolean;
@@ -70,5 +63,4 @@ export declare class SyncLocalApplyError extends Error {
70
63
  }
71
64
  /** Maps package errors onto store failure metadata. */
72
65
  export declare function syncFailureFromError(error: unknown): SyncFailure;
73
- export declare function toSnakeCaseFailure(failure: SyncFailure): SnakeCaseSyncFailure;
74
66
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;CAAE,GACvC;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAA;CAAE,GAC1C;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAErC,oDAAoD;AACpD,MAAM,MAAM,oBAAoB,GAC5B,OAAO,CAAC,WAAW,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,kFAAkF;AAClF,qBAAa,kBAAmB,SAAQ,KAAK;IAGzC,QAAQ,CAAC,SAAS,EAAE,OAAO;aACT,KAAK,CAAC,EAAE,OAAO;gBAFjC,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,OAAO,EACT,KAAK,CAAC,EAAE,OAAO,YAAA;CAKpC;AAED,4EAA4E;AAC5E,qBAAa,aAAc,SAAQ,kBAAkB;IACnD,QAAQ,CAAC,IAAI,UAAU;gBAEX,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,wDAAwD;AACxD,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,QAAQ,CAAC,IAAI,aAAa;gBAEd,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,sFAAsF;AACtF,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,IAAI,YAAY;gBAEb,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO;CAIjE;AAED,yEAAyE;AACzE,qBAAa,kBAAmB,SAAQ,kBAAkB;IAKtD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IALpC,QAAQ,CAAC,IAAI,kBAAkB;gBAG7B,OAAO,EAAE,MAAM,EACN,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,IAAI,EAClC,KAAK,CAAC,EAAE,OAAO;CAKlB;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,kBAAkB;IAChE,QAAQ,CAAC,IAAI,wBAAwB;gBAEzB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,6DAA6D;AAC7D,qBAAa,6BAA8B,SAAQ,kBAAkB;IACnE,QAAQ,CAAC,IAAI,2BAA2B;gBAE5B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,uEAAuE;AACvE,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,iBAAiB;gBAElB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,uDAAuD;AACvD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAchE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,oBAAoB,CAI7E"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;CAAE,GACvC;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAA;CAAE,GAC1C;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAErC,kFAAkF;AAClF,qBAAa,kBAAmB,SAAQ,KAAK;IAGzC,QAAQ,CAAC,SAAS,EAAE,OAAO;aACT,KAAK,CAAC,EAAE,OAAO;gBAFjC,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,OAAO,EACT,KAAK,CAAC,EAAE,OAAO,YAAA;CAKpC;AAED,4EAA4E;AAC5E,qBAAa,aAAc,SAAQ,kBAAkB;IACnD,QAAQ,CAAC,IAAI,UAAU;gBAEX,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,wDAAwD;AACxD,qBAAa,gBAAiB,SAAQ,kBAAkB;IACtD,QAAQ,CAAC,IAAI,aAAa;gBAEd,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,sFAAsF;AACtF,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,IAAI,YAAY;gBAEb,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO;CAIjE;AAED,yEAAyE;AACzE,qBAAa,kBAAmB,SAAQ,kBAAkB;IAKtD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IALpC,QAAQ,CAAC,IAAI,kBAAkB;gBAG7B,OAAO,EAAE,MAAM,EACN,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,IAAI,EAClC,KAAK,CAAC,EAAE,OAAO;CAKlB;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,kBAAkB;IAChE,QAAQ,CAAC,IAAI,wBAAwB;gBAEzB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,6DAA6D;AAC7D,qBAAa,6BAA8B,SAAQ,kBAAkB;IACnE,QAAQ,CAAC,IAAI,2BAA2B;gBAE5B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,uEAAuE;AACvE,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,iBAAiB;gBAElB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,uDAAuD;AACvD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAchE"}
package/dist/error.js CHANGED
@@ -94,9 +94,4 @@ export function syncFailureFromError(error) {
94
94
  }
95
95
  return { kind: 'local_apply' };
96
96
  }
97
- export function toSnakeCaseFailure(failure) {
98
- return failure.kind === 'rate_limited'
99
- ? { kind: failure.kind, retry_at: failure.retryAt }
100
- : failure;
101
- }
102
97
  //# sourceMappingURL=error.js.map
package/dist/error.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- export { SyncAuthError, SyncLocalApplyError, SyncNetworkError, SyncPartitionMismatchError, SyncPayloadCompatibilityError, SyncRateLimitError, SyncServerError, SyncTransportError, syncFailureFromError, toSnakeCaseFailure, } from './error.js';
2
- export type { SnakeCaseSyncFailure, SyncFailure } from './error.js';
1
+ export { SyncAuthError, SyncLocalApplyError, SyncNetworkError, SyncPartitionMismatchError, SyncPayloadCompatibilityError, SyncRateLimitError, SyncServerError, SyncTransportError, syncFailureFromError, } from './error.js';
2
+ export type { SyncFailure } from './error.js';
3
3
  export { compareHybridLogicalTimestamps, decodeHybridLogicalTimestamp, encodeHybridLogicalTimestamp, HybridLogicalClock, HybridLogicalClockError, HLC_COUNTERS_PER_MILLISECOND, HLC_STORAGE_KEY, MAX_HLC_TIMESTAMP, } from './hlc.js';
4
4
  export type { HlcPhysicalClock, HlcStorage, HybridLogicalClockErrorCode, HybridLogicalClockState, } from './hlc.js';
5
5
  export { dependencyRankByOrder, rankPushBatch, validatePushOutcomeCoverage } from './push-batch.js';
6
6
  export type { PushCandidate, PushOutcomeCoverageOptions, RankedPushItem, RankPushBatchOptions, } from './push-batch.js';
7
7
  export { SyncScheduler } from './scheduler.js';
8
- export type { SyncSchedulerEnvironment, SyncSchedulerOptions, SyncSchedulerRecoverySignal, SyncSchedulerTimer, } from './scheduler.js';
9
- export { deriveInitialSyncState, deriveLocalStoreReadiness, SyncStatusStore, toSnakeCaseSnapshot, } from './store.js';
10
- export type { InitialPullStatus, InitialSyncState, LocalStoreReadiness, LocalStoreReadinessInput, SnakeCaseSyncStatusSnapshot, SyncAttentionItem, SyncFailureUpdate, SyncStatus, SyncStatusHydration, SyncStatusSink, SyncStatusSnapshot, SyncStatusStoreOptions, } from './store.js';
8
+ export type { SyncSchedulerEnvironment, SyncSchedulerOptions, SyncSchedulerRecoverySignal, SyncSchedulerRetry, SyncSchedulerRetryOptions, SyncSchedulerTimer, } from './scheduler.js';
9
+ export { deriveInitialSyncState, deriveLocalStoreReadiness, SyncStatusStore } from './store.js';
10
+ export type { InitialPullStatus, InitialSyncState, LocalStoreReadiness, LocalStoreReadinessInput, SyncAttentionItem, SyncFailureUpdate, SyncStatus, SyncStatusHydration, SyncStatusSink, SyncStatusSnapshot, SyncStatusStoreOptions, } from './store.js';
11
11
  export { commitCursorAfterLocalTransaction, DEFAULT_RETRY_AFTER_FALLBACK_MS, parseRetryAfter, SyncTransport, validatePullPage, } from './transport.js';
12
12
  export type { CursorCommitOptions, ParseRetryAfterOptions, PullPagePosition, SyncCursorComparator, SyncFetch, SyncFetchResponse, SyncResponseHeaders, SyncPrebuiltRequest, SyncPrebuiltRequestTransportOptions, SyncRequestOptions, SyncRequestInit, SyncFetchTransportOptions, SyncTransportOptions, } from './transport.js';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACpG,YAAY,EACV,aAAa,EACb,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iCAAiC,EACjC,+BAA+B,EAC/B,eAAe,EACf,aAAa,EACb,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,mCAAmC,EACnC,kBAAkB,EAClB,eAAe,EACf,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACpG,YAAY,EACV,aAAa,EACb,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAChG,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iCAAiC,EACjC,+BAA+B,EAC/B,eAAe,EACf,aAAa,EACb,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,mCAAmC,EACnC,kBAAkB,EAClB,eAAe,EACf,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- export { SyncAuthError, SyncLocalApplyError, SyncNetworkError, SyncPartitionMismatchError, SyncPayloadCompatibilityError, SyncRateLimitError, SyncServerError, SyncTransportError, syncFailureFromError, toSnakeCaseFailure, } from './error.js';
1
+ export { SyncAuthError, SyncLocalApplyError, SyncNetworkError, SyncPartitionMismatchError, SyncPayloadCompatibilityError, SyncRateLimitError, SyncServerError, SyncTransportError, syncFailureFromError, } from './error.js';
2
2
  export { compareHybridLogicalTimestamps, decodeHybridLogicalTimestamp, encodeHybridLogicalTimestamp, HybridLogicalClock, HybridLogicalClockError, HLC_COUNTERS_PER_MILLISECOND, HLC_STORAGE_KEY, MAX_HLC_TIMESTAMP, } from './hlc.js';
3
3
  export { dependencyRankByOrder, rankPushBatch, validatePushOutcomeCoverage } from './push-batch.js';
4
4
  export { SyncScheduler } from './scheduler.js';
5
- export { deriveInitialSyncState, deriveLocalStoreReadiness, SyncStatusStore, toSnakeCaseSnapshot, } from './store.js';
5
+ export { deriveInitialSyncState, deriveLocalStoreReadiness, SyncStatusStore } from './store.js';
6
6
  export { commitCursorAfterLocalTransaction, DEFAULT_RETRY_AFTER_FALLBACK_MS, parseRetryAfter, SyncTransport, validatePullPage, } from './transport.js';
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAOlB,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAOpG,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAO/C,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAepB,OAAO,EACL,iCAAiC,EACjC,+BAA+B,EAC/B,eAAe,EACf,aAAa,EACb,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,6BAA6B,EAC7B,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,4BAA4B,EAC5B,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAOlB,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAOpG,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAS/C,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAchG,OAAO,EACL,iCAAiC,EACjC,+BAA+B,EAC/B,eAAe,EACf,aAAa,EACb,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
@@ -16,10 +16,30 @@ export interface SyncSchedulerEnvironment {
16
16
  export type SyncSchedulerTimer = {
17
17
  readonly __syncSchedulerTimer?: never;
18
18
  } & object;
19
+ /** A retry the scheduler is about to wait for. */
20
+ export interface SyncSchedulerRetry {
21
+ readonly error: unknown;
22
+ /** Counts retries since the last success or wake-up, from 0. */
23
+ readonly retryIndex: number;
24
+ readonly delayMs: number;
25
+ }
26
+ /** Retries a failed run after a delay the product chooses. */
27
+ export interface SyncSchedulerRetryOptions {
28
+ /** Retries after a failed run before the scheduler waits for the next trigger. */
29
+ readonly maxRetries: number;
30
+ /**
31
+ * The delay before retry `retryIndex`, or `null` when the failure must not be retried.
32
+ * `fullJitterBackoffMs` from `@baukit/api-runtime/backoff` gives bounded, jittered delays.
33
+ */
34
+ readonly delayMs: (error: unknown, retryIndex: number) => number | null;
35
+ /** Runs before each wait, for example to show when the next attempt starts. */
36
+ readonly onRetryScheduled?: (retry: SyncSchedulerRetry) => void;
37
+ }
19
38
  export interface SyncSchedulerOptions {
20
39
  intervalMs?: number;
21
40
  onError?: (error: unknown) => void;
22
41
  onRecoverySignal?: (signal: SyncSchedulerRecoverySignal) => void;
42
+ retry?: SyncSchedulerRetryOptions;
23
43
  }
24
44
  export type SyncSchedulerRecoverySignal = 'active' | 'online';
25
45
  /**
@@ -27,7 +47,9 @@ export type SyncSchedulerRecoverySignal = 'active' | 'online';
27
47
  *
28
48
  * A trigger that arrives while a run is active joins that run. A follow-up
29
49
  * requested during a run replays the callback once after it settles, so writes
30
- * made mid-run are never left unsent without starting a parallel run.
50
+ * made mid-run are never left unsent without starting a parallel run. With
51
+ * `retry`, a failed run is retried after the chosen delay; a trigger during
52
+ * that delay ends it and restarts the retry count.
31
53
  */
32
54
  export declare class SyncScheduler {
33
55
  private readonly run;
@@ -35,20 +57,29 @@ export declare class SyncScheduler {
35
57
  private readonly intervalMs;
36
58
  private readonly onError;
37
59
  private readonly onRecoverySignal;
60
+ private readonly retry;
38
61
  private active;
39
62
  private started;
40
63
  private inFlight;
41
64
  private rerunRequested;
42
65
  private interval;
43
66
  private subscriptions;
67
+ private wakeRetry;
68
+ private stops;
44
69
  constructor(run: () => Promise<unknown>, environment: SyncSchedulerEnvironment, options?: SyncSchedulerOptions);
45
70
  start(): void;
46
71
  stop(): void;
47
- /** Starts a run, or joins the active one. */
72
+ /** Starts a run, or joins the active one and ends its retry delay. */
48
73
  trigger(): Promise<void>;
49
74
  /** Queues exactly one more run when a run is already active. */
50
75
  requestFollowUp(): Promise<void>;
51
76
  private runUntilSettled;
77
+ /** Read through a method: a follow-up can arrive while `run` is awaited. */
78
+ private followUpRequested;
79
+ private runOnce;
80
+ private retryDelay;
81
+ /** The environment has interval timers only, so the delay clears its interval on the first tick. */
82
+ private waitForRetry;
52
83
  private refreshInterval;
53
84
  private stopInterval;
54
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,IAAI,OAAO,CAAC;IACpB,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACjE,eAAe,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAClD,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAAC;IAC5E,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,MAAM,CAAC;AAEpF,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,2BAA2B,KAAK,IAAI,CAAC;CAClE;AAED,MAAM,MAAM,2BAA2B,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAQ9D;;;;;;GAMG;AACH,qBAAa,aAAa;IAYtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAZ9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgD;IACjF,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,aAAa,CAAsB;gBAGxB,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC3B,WAAW,EAAE,wBAAwB,EACtD,OAAO,GAAE,oBAAyB;IAOpC,KAAK,IAAI,IAAI;IA4Bb,IAAI,IAAI,IAAI;IAUZ,6CAA6C;IAC7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAexB,gEAAgE;IAChE,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YAQlB,eAAe;IAa7B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,YAAY;CAOrB"}
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,IAAI,OAAO,CAAC;IACpB,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACjE,eAAe,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAClD,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAAC;IAC5E,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACjD;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,MAAM,CAAC;AAEpF,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,8DAA8D;AAC9D,MAAM,WAAW,yBAAyB;IACxC,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACxE,+EAA+E;IAC/E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,2BAA2B,KAAK,IAAI,CAAC;IACjE,KAAK,CAAC,EAAE,yBAAyB,CAAC;CACnC;AAED,MAAM,MAAM,2BAA2B,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAmB9D;;;;;;;;GAQG;AACH,qBAAa,aAAa;IAetB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAf9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgD;IACjF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAC9D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,KAAK,CAAK;gBAGC,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,EAC3B,WAAW,EAAE,wBAAwB,EACtD,OAAO,GAAE,oBAAyB;IASpC,KAAK,IAAI,IAAI;IA4Bb,IAAI,IAAI,IAAI;IAYZ,sEAAsE;IACtE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,gEAAgE;IAChE,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YAQlB,eAAe;IA0B7B,4EAA4E;IAC5E,OAAO,CAAC,iBAAiB;YAIX,OAAO;IAUrB,OAAO,CAAC,UAAU;IAkBlB,oGAAoG;IACpG,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,YAAY;CAOrB"}
package/dist/scheduler.js CHANGED
@@ -2,12 +2,22 @@ const DEFAULT_INTERVAL_MS = 5 * 60 * 1000;
2
2
  function noop() {
3
3
  return;
4
4
  }
5
+ function validateRetry(retry) {
6
+ if (retry === undefined) {
7
+ return;
8
+ }
9
+ if (!Number.isInteger(retry.maxRetries) || retry.maxRetries < 0) {
10
+ throw new RangeError('retry.maxRetries must be a non-negative integer');
11
+ }
12
+ }
5
13
  /**
6
14
  * Runs one opaque sync callback at most once at a time.
7
15
  *
8
16
  * A trigger that arrives while a run is active joins that run. A follow-up
9
17
  * requested during a run replays the callback once after it settles, so writes
10
- * made mid-run are never left unsent without starting a parallel run.
18
+ * made mid-run are never left unsent without starting a parallel run. With
19
+ * `retry`, a failed run is retried after the chosen delay; a trigger during
20
+ * that delay ends it and restarts the retry count.
11
21
  */
12
22
  export class SyncScheduler {
13
23
  run;
@@ -15,18 +25,23 @@ export class SyncScheduler {
15
25
  intervalMs;
16
26
  onError;
17
27
  onRecoverySignal;
28
+ retry;
18
29
  active = false;
19
30
  started = false;
20
31
  inFlight = null;
21
32
  rerunRequested = false;
22
33
  interval = null;
23
34
  subscriptions = [];
35
+ wakeRetry = null;
36
+ stops = 0;
24
37
  constructor(run, environment, options = {}) {
25
38
  this.run = run;
26
39
  this.environment = environment;
40
+ validateRetry(options.retry);
27
41
  this.intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;
28
42
  this.onError = options.onError ?? noop;
29
43
  this.onRecoverySignal = options.onRecoverySignal ?? noop;
44
+ this.retry = options.retry;
30
45
  }
31
46
  start() {
32
47
  if (this.started) {
@@ -57,16 +72,19 @@ export class SyncScheduler {
57
72
  }
58
73
  stop() {
59
74
  this.started = false;
75
+ this.stops += 1;
60
76
  this.rerunRequested = false;
77
+ this.wakeRetry?.('stopped');
61
78
  this.stopInterval();
62
79
  this.subscriptions.forEach((unsubscribe) => {
63
80
  unsubscribe();
64
81
  });
65
82
  this.subscriptions = [];
66
83
  }
67
- /** Starts a run, or joins the active one. */
84
+ /** Starts a run, or joins the active one and ends its retry delay. */
68
85
  trigger() {
69
86
  if (this.inFlight) {
87
+ this.wakeRetry?.('triggered');
70
88
  return this.inFlight;
71
89
  }
72
90
  const task = Promise.resolve()
@@ -88,18 +106,80 @@ export class SyncScheduler {
88
106
  return this.trigger();
89
107
  }
90
108
  async runUntilSettled() {
91
- let rerun = true;
92
- while (rerun) {
109
+ const stopsAtStart = this.stops;
110
+ let retryIndex = 0;
111
+ for (;;) {
93
112
  this.rerunRequested = false;
94
- try {
95
- await this.run();
113
+ const failure = await this.runOnce();
114
+ if (failure === null) {
115
+ retryIndex = 0;
116
+ if (!this.followUpRequested())
117
+ return;
118
+ continue;
119
+ }
120
+ const delayMs = this.retryDelay(failure.error, retryIndex);
121
+ if (delayMs === null) {
122
+ if (!this.followUpRequested())
123
+ return;
124
+ continue;
96
125
  }
97
- catch (error) {
98
- this.onError(error);
126
+ this.retry?.onRetryScheduled?.({ error: failure.error, retryIndex, delayMs });
127
+ const wake = await this.waitForRetry(delayMs);
128
+ const stopped = this.stops !== stopsAtStart;
129
+ if (stopped || (wake === 'elapsed' && this.started && !this.active)) {
130
+ return;
99
131
  }
100
- rerun = this.rerunRequested;
132
+ retryIndex = wake === 'triggered' ? 0 : retryIndex + 1;
133
+ }
134
+ }
135
+ /** Read through a method: a follow-up can arrive while `run` is awaited. */
136
+ followUpRequested() {
137
+ return this.rerunRequested;
138
+ }
139
+ async runOnce() {
140
+ try {
141
+ await this.run();
142
+ return null;
143
+ }
144
+ catch (error) {
145
+ this.onError(error);
146
+ return { error };
101
147
  }
102
148
  }
149
+ retryDelay(error, retryIndex) {
150
+ if (this.retry === undefined || retryIndex >= this.retry.maxRetries) {
151
+ return null;
152
+ }
153
+ let delayMs;
154
+ try {
155
+ delayMs = this.retry.delayMs(error, retryIndex);
156
+ }
157
+ catch (delayError) {
158
+ this.onError(delayError);
159
+ return null;
160
+ }
161
+ if (delayMs !== null && (!Number.isFinite(delayMs) || delayMs < 0)) {
162
+ this.onError(new RangeError('retry.delayMs must return a finite non-negative number'));
163
+ return null;
164
+ }
165
+ return delayMs;
166
+ }
167
+ /** The environment has interval timers only, so the delay clears its interval on the first tick. */
168
+ waitForRetry(delayMs) {
169
+ return new Promise((resolve) => {
170
+ const wake = (reason) => {
171
+ this.environment.clearInterval(timer);
172
+ if (this.wakeRetry === wake) {
173
+ this.wakeRetry = null;
174
+ }
175
+ resolve(reason);
176
+ };
177
+ const timer = this.environment.setInterval(() => {
178
+ wake('elapsed');
179
+ }, delayMs);
180
+ this.wakeRetry = wake;
181
+ });
182
+ }
103
183
  refreshInterval() {
104
184
  this.stopInterval();
105
185
  if (!this.started || !this.active) {
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type SnakeCaseSyncFailure, type SyncFailure } from './error.js';
1
+ import type { SyncFailure } from './error.js';
2
2
  /** Sync activity, as named by the offline-readiness contract. */
3
3
  export type SyncStatus = 'idle' | 'syncing' | 'pending' | 'attention' | 'auth' | 'error';
4
4
  /** Progress of the initial pull that a cold start must complete. */
@@ -39,22 +39,6 @@ export interface LocalStoreReadinessInput {
39
39
  deliveredRevision: number | null;
40
40
  hasData: boolean;
41
41
  }
42
- export interface SnakeCaseSyncStatusSnapshot<TAttention = SyncAttentionItem> {
43
- status: SyncStatus;
44
- last_attempt_at: string | null;
45
- last_success_at: string | null;
46
- /** @deprecated Use `last_success_at`. This field will be removed after one release cycle. */
47
- last_sync_at: string | null;
48
- error: string | null;
49
- failure: SnakeCaseSyncFailure | null;
50
- retrying: boolean;
51
- retry_at: string | null;
52
- attention: readonly TAttention[];
53
- pending_count: number;
54
- initial_pull_status: InitialPullStatus;
55
- refresh_revision: number;
56
- security_block: string | null;
57
- }
58
42
  export interface SyncStatusHydration<TAttention = SyncAttentionItem> {
59
43
  lastAttemptAt: string | null;
60
44
  lastSuccessAt: string | null;
@@ -72,8 +56,6 @@ export interface SyncFailureUpdate {
72
56
  export interface SyncStatusStoreOptions {
73
57
  clock?: () => string;
74
58
  }
75
- /** Projects a status snapshot onto API-style snake_case field names. */
76
- export declare function toSnakeCaseSnapshot<TAttention>(snapshot: SyncStatusSnapshot<TAttention>): SnakeCaseSyncStatusSnapshot<TAttention>;
77
59
  /**
78
60
  * Maps pull progress and snapshot delivery onto local-store readiness.
79
61
  *
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/store.js CHANGED
@@ -1,4 +1,3 @@
1
- import { toSnakeCaseFailure } from './error.js';
2
1
  function initialSnapshot() {
3
2
  return {
4
3
  status: 'idle',
@@ -16,24 +15,6 @@ function initialSnapshot() {
16
15
  securityBlock: null,
17
16
  };
18
17
  }
19
- /** Projects a status snapshot onto API-style snake_case field names. */
20
- export function toSnakeCaseSnapshot(snapshot) {
21
- return {
22
- status: snapshot.status,
23
- last_attempt_at: snapshot.lastAttemptAt,
24
- last_success_at: snapshot.lastSuccessAt,
25
- last_sync_at: snapshot.lastSuccessAt,
26
- error: snapshot.error,
27
- failure: snapshot.failure === null ? null : toSnakeCaseFailure(snapshot.failure),
28
- retrying: snapshot.retrying,
29
- retry_at: snapshot.retryAt,
30
- attention: snapshot.attention,
31
- pending_count: snapshot.pendingCount,
32
- initial_pull_status: snapshot.initialPullStatus,
33
- refresh_revision: snapshot.refreshRevision,
34
- security_block: snapshot.securityBlock,
35
- };
36
- }
37
18
  /**
38
19
  * Maps pull progress and snapshot delivery onto local-store readiness.
39
20
  *
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baukit/sync-client",
3
- "version": "0.4.0",
3
+ "version": "0.5.1",
4
4
  "description": "Client-side scheduling, transport, status reporting, and ordering for offline-capable sync loops.",
5
5
  "license": "MIT",
6
6
  "author": "Patrick Koss",
@@ -24,23 +24,28 @@
24
24
  "exports": {
25
25
  ".": {
26
26
  "types": "./dist/index.d.ts",
27
- "import": "./dist/index.js"
27
+ "import": "./dist/index.js",
28
+ "default": "./dist/index.js"
28
29
  },
29
30
  "./hlc": {
30
31
  "types": "./dist/hlc.d.ts",
31
- "import": "./dist/hlc.js"
32
+ "import": "./dist/hlc.js",
33
+ "default": "./dist/hlc.js"
32
34
  },
33
35
  "./expo": {
34
36
  "types": "./dist/expo.d.ts",
35
- "import": "./dist/expo.js"
37
+ "import": "./dist/expo.js",
38
+ "default": "./dist/expo.js"
36
39
  },
37
40
  "./browser": {
38
41
  "types": "./dist/browser.d.ts",
39
- "import": "./dist/browser.js"
42
+ "import": "./dist/browser.js",
43
+ "default": "./dist/browser.js"
40
44
  },
41
45
  "./conformance": {
42
46
  "types": "./dist/conformance.d.ts",
43
- "import": "./dist/conformance.js"
47
+ "import": "./dist/conformance.js",
48
+ "default": "./dist/conformance.js"
44
49
  }
45
50
  },
46
51
  "files": [
@@ -48,7 +53,15 @@
48
53
  "README.md",
49
54
  "LICENSE"
50
55
  ],
56
+ "scripts": {
57
+ "build": "tsc -p tsconfig.json",
58
+ "prepare": "pnpm run build",
59
+ "test": "tsc -p tsconfig.test.json && tsc -p tsconfig.exports.json && vitest run --config ../../vitest.config.ts && node ../../scripts/test-packed-exports.mjs",
60
+ "lint": "eslint src --max-warnings=0",
61
+ "format:check": "prettier --check src type-tests package.json tsconfig*.json"
62
+ },
51
63
  "devDependencies": {
64
+ "@types/node": "24.10.1",
52
65
  "expo-network": "57.0.1",
53
66
  "react-native": "0.86.2",
54
67
  "typescript": "6.0.3",
@@ -65,11 +78,5 @@
65
78
  "react-native": {
66
79
  "optional": true
67
80
  }
68
- },
69
- "scripts": {
70
- "build": "tsc -p tsconfig.json",
71
- "test": "tsc -p tsconfig.exports.json && vitest run --config ../../vitest.config.ts",
72
- "lint": "eslint src --max-warnings=0",
73
- "format:check": "prettier --check src type-tests package.json tsconfig*.json"
74
81
  }
75
- }
82
+ }