@syncular/server 0.0.6-126 → 0.0.6-135

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/dist/push.js CHANGED
@@ -194,15 +194,7 @@ export async function pushCommit(args) {
194
194
  meta: null,
195
195
  result_json: null,
196
196
  };
197
- const insertResult = await syncTrx
198
- .insertInto('sync_commits')
199
- .values(commitRow)
200
- .onConflict((oc) => oc
201
- .columns(['partition_id', 'client_id', 'client_commit_id'])
202
- .doNothing())
203
- .executeTakeFirstOrThrow();
204
- const insertedRows = Number(insertResult.numInsertedOrUpdatedRows ?? 0);
205
- if (insertedRows === 0) {
197
+ const loadExistingCommit = async () => {
206
198
  // Existing commit: return cached response (applied or rejected)
207
199
  // Use forUpdate() for row locking on databases that support it
208
200
  let query = syncTrx.selectFrom('sync_commits')
@@ -256,20 +248,54 @@ export async function pushCommit(args) {
256
248
  scopeKeys: [],
257
249
  emittedChanges: [],
258
250
  };
251
+ };
252
+ let commitSeq = 0;
253
+ if (dialect.supportsInsertReturning) {
254
+ const insertedCommit = await syncTrx
255
+ .insertInto('sync_commits')
256
+ .values(commitRow)
257
+ .onConflict((oc) => oc
258
+ .columns(['partition_id', 'client_id', 'client_commit_id'])
259
+ .doNothing())
260
+ .returning(['commit_seq'])
261
+ .executeTakeFirst();
262
+ if (!insertedCommit) {
263
+ return loadExistingCommit();
264
+ }
265
+ commitSeq = coerceNumber(insertedCommit.commit_seq) ?? 0;
266
+ }
267
+ else {
268
+ const insertResult = await syncTrx
269
+ .insertInto('sync_commits')
270
+ .values(commitRow)
271
+ .onConflict((oc) => oc
272
+ .columns(['partition_id', 'client_id', 'client_commit_id'])
273
+ .doNothing())
274
+ .executeTakeFirstOrThrow();
275
+ const insertedRows = Number(insertResult.numInsertedOrUpdatedRows ?? 0);
276
+ if (insertedRows === 0) {
277
+ return loadExistingCommit();
278
+ }
279
+ commitSeq = coerceNumber(insertResult.insertId) ?? 0;
259
280
  }
260
- let commitSeq = coerceNumber(insertResult.insertId) ?? 0;
261
281
  if (commitSeq <= 0) {
262
- const insertedCommit = await syncTrx.selectFrom('sync_commits')
282
+ const insertedCommitRow = await syncTrx.selectFrom('sync_commits')
263
283
  .selectAll()
264
284
  .where('partition_id', '=', partitionId)
265
285
  .where('client_id', '=', request.clientId)
266
286
  .where('client_commit_id', '=', request.clientCommitId)
267
287
  .executeTakeFirstOrThrow();
268
- commitSeq = Number(insertedCommit.commit_seq);
288
+ commitSeq = Number(insertedCommitRow.commit_seq);
269
289
  }
270
290
  const commitId = `${request.clientId}:${request.clientCommitId}`;
271
291
  const savepointName = 'sync_apply';
272
- const useSavepoints = dialect.supportsSavepoints;
292
+ let useSavepoints = dialect.supportsSavepoints;
293
+ if (useSavepoints && ops.length === 1) {
294
+ const singleOpHandler = getServerHandlerOrThrow(handlers, ops[0].table);
295
+ if (singleOpHandler.canRejectSingleOperationWithoutSavepoint) {
296
+ useSavepoints = false;
297
+ }
298
+ }
273
299
  let savepointCreated = false;
274
300
  try {
275
301
  // Apply the commit under a savepoint so we can roll back app writes on conflict
@@ -281,10 +307,10 @@ export async function pushCommit(args) {
281
307
  const allEmitted = [];
282
308
  const results = [];
283
309
  const affectedTablesSet = new Set();
284
- for (let i = 0; i < ops.length; i++) {
310
+ for (let i = 0; i < ops.length;) {
285
311
  const op = ops[i];
286
312
  const handler = getServerHandlerOrThrow(handlers, op.table);
287
- const applied = await handler.applyOperation({
313
+ const operationCtx = {
288
314
  db: trx,
289
315
  trx,
290
316
  actorId,
@@ -292,27 +318,34 @@ export async function pushCommit(args) {
292
318
  clientId: request.clientId,
293
319
  commitId,
294
320
  schemaVersion: request.schemaVersion,
295
- }, op, i);
296
- if (applied.result.status !== 'applied') {
297
- results.push(applied.result);
298
- throw new RejectCommitError({
299
- ok: true,
300
- status: 'rejected',
301
- commitSeq,
302
- results,
303
- });
321
+ };
322
+ let appliedBatch = null;
323
+ let consumed = 1;
324
+ if (handler.applyOperationBatch &&
325
+ dialect.supportsInsertReturning) {
326
+ const batchInput = [];
327
+ for (let j = i; j < ops.length; j++) {
328
+ const nextOp = ops[j];
329
+ if (nextOp.table !== op.table)
330
+ break;
331
+ batchInput.push({ op: nextOp, opIndex: j });
332
+ }
333
+ if (batchInput.length > 1) {
334
+ appliedBatch = await handler.applyOperationBatch(operationCtx, batchInput);
335
+ consumed = Math.max(1, appliedBatch.length);
336
+ }
304
337
  }
305
- // Framework-level enforcement: emitted changes must have scopes
306
- for (const c of applied.emittedChanges ?? []) {
307
- const scopes = c?.scopes;
308
- if (!scopes || typeof scopes !== 'object') {
309
- results.push({
310
- opIndex: i,
311
- status: 'error',
312
- error: 'MISSING_SCOPES',
313
- code: 'INVALID_SCOPE',
314
- retriable: false,
315
- });
338
+ if (!appliedBatch) {
339
+ appliedBatch = [
340
+ await handler.applyOperation(operationCtx, op, i),
341
+ ];
342
+ }
343
+ if (appliedBatch.length === 0) {
344
+ throw new Error(`Handler "${op.table}" returned no results from applyOperationBatch`);
345
+ }
346
+ for (const applied of appliedBatch) {
347
+ if (applied.result.status !== 'applied') {
348
+ results.push(applied.result);
316
349
  throw new RejectCommitError({
317
350
  ok: true,
318
351
  status: 'rejected',
@@ -320,12 +353,32 @@ export async function pushCommit(args) {
320
353
  results,
321
354
  });
322
355
  }
356
+ // Framework-level enforcement: emitted changes must have scopes
357
+ for (const c of applied.emittedChanges ?? []) {
358
+ const scopes = c?.scopes;
359
+ if (!scopes || typeof scopes !== 'object') {
360
+ results.push({
361
+ opIndex: applied.result.opIndex,
362
+ status: 'error',
363
+ error: 'MISSING_SCOPES',
364
+ code: 'INVALID_SCOPE',
365
+ retriable: false,
366
+ });
367
+ throw new RejectCommitError({
368
+ ok: true,
369
+ status: 'rejected',
370
+ commitSeq,
371
+ results,
372
+ });
373
+ }
374
+ }
375
+ results.push(applied.result);
376
+ allEmitted.push(...applied.emittedChanges);
377
+ for (const c of applied.emittedChanges) {
378
+ affectedTablesSet.add(c.table);
379
+ }
323
380
  }
324
- results.push(applied.result);
325
- allEmitted.push(...applied.emittedChanges);
326
- for (const c of applied.emittedChanges) {
327
- affectedTablesSet.add(c.table);
328
- }
381
+ i += consumed;
329
382
  }
330
383
  if (allEmitted.length > 0) {
331
384
  const changeRows = allEmitted.map((c) => ({
package/dist/push.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/server",
3
- "version": "0.0.6-126",
3
+ "version": "0.0.6-135",
4
4
  "description": "Server-side sync engine with push/pull, pruning, and snapshot support",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Benjamin Kniffler",
@@ -62,7 +62,7 @@
62
62
  "release": "bunx syncular-publish"
63
63
  },
64
64
  "dependencies": {
65
- "@syncular/core": "0.0.6-126"
65
+ "@syncular/core": "0.0.6-135"
66
66
  },
67
67
  "peerDependencies": {
68
68
  "kysely": "^0.28.0",
@@ -34,6 +34,7 @@ export abstract class BaseServerSyncDialect<F extends SqlFamily = SqlFamily>
34
34
  abstract readonly family: F;
35
35
  abstract readonly supportsForUpdate: boolean;
36
36
  abstract readonly supportsSavepoints: boolean;
37
+ abstract readonly supportsInsertReturning: boolean;
37
38
 
38
39
  // ===========================================================================
39
40
  // Abstract SQL fragment hooks
@@ -174,6 +174,13 @@ export interface ServerSyncDialect<F extends SqlFamily = SqlFamily> {
174
174
  */
175
175
  readonly supportsSavepoints: boolean;
176
176
 
177
+ /**
178
+ * Whether INSERT ... RETURNING is reliable for obtaining inserted rows.
179
+ * Postgres: true
180
+ * SQLite variants: false (keep insertId/fallback select for broad compatibility)
181
+ */
182
+ readonly supportsInsertReturning: boolean;
183
+
177
184
  /**
178
185
  * Read distinct tables from sync_changes for a given commit.
179
186
  * Used for realtime notifications.
@@ -35,6 +35,7 @@ import { sql } from 'kysely';
35
35
  import type { SyncCoreDb } from '../schema';
36
36
  import type {
37
37
  ApplyOperationResult,
38
+ BatchApplyOperationInput,
38
39
  EmittedChange,
39
40
  ServerApplyOperationContext,
40
41
  ServerContext,
@@ -187,6 +188,17 @@ export interface CreateServerHandlerOptions<
187
188
  */
188
189
  applyOperation?: ServerTableHandler<ServerDB, Auth>['applyOperation'];
189
190
 
191
+ /**
192
+ * Hint for savepoint optimization on single-op commits.
193
+ *
194
+ * `true` means a rejected single operation never leaves durable writes
195
+ * before returning the rejection result.
196
+ *
197
+ * Defaults to `true` for the built-in applyOperation implementation and
198
+ * `false` when a custom applyOperation is provided.
199
+ */
200
+ canRejectSingleOperationWithoutSavepoint?: boolean;
201
+
190
202
  /**
191
203
  * Custom scope extraction from row (for complex scope logic).
192
204
  */
@@ -263,6 +275,8 @@ export function createServerHandler<
263
275
  extractScopes: customExtractScopes,
264
276
  } = options;
265
277
  const codecCache = new Map<string, ReturnType<typeof toTableColumnCodecs>>();
278
+ const primaryKeyColumn = primaryKey as keyof ServerDB[TableName] & string;
279
+ const qualifiedVersionRef = `${table}.${versionColumn}`;
266
280
  const resolveTableCodecs = (row: Record<string, unknown>) => {
267
281
  if (!codecs) return {};
268
282
  const columns = Object.keys(row);
@@ -544,7 +558,7 @@ export function createServerHandler<
544
558
  .executeTakeFirst()) as Record<string, unknown> | undefined;
545
559
 
546
560
  if (!updated) {
547
- const conflictRow = await (
561
+ let conflictRow = await (
548
562
  trx.selectFrom(table).selectAll() as SelectQueryBuilder<
549
563
  ServerDB,
550
564
  keyof ServerDB & string,
@@ -554,7 +568,42 @@ export function createServerHandler<
554
568
  .where(ref<string>(primaryKey), '=', op.row_id)
555
569
  .executeTakeFirst();
556
570
 
557
- if (!conflictRow) {
571
+ if (!conflictRow && expectedVersion === 0) {
572
+ const insertValues: Record<string, unknown> = {
573
+ ...payload,
574
+ [primaryKey]: op.row_id,
575
+ [versionColumn]: 1,
576
+ };
577
+
578
+ try {
579
+ updated = (await (
580
+ trx.insertInto(table) as InsertQueryBuilder<
581
+ ServerDB,
582
+ TableName,
583
+ InsertResult
584
+ >
585
+ )
586
+ .values(insertValues as Insertable<ServerDB[TableName]>)
587
+ .returningAll()
588
+ .executeTakeFirst()) as Record<string, unknown> | undefined;
589
+ } catch (err) {
590
+ const message = err instanceof Error ? err.message : String(err);
591
+ if (!isConstraintViolationError(message)) {
592
+ throw err;
593
+ }
594
+ conflictRow = await (
595
+ trx.selectFrom(table).selectAll() as SelectQueryBuilder<
596
+ ServerDB,
597
+ keyof ServerDB & string,
598
+ Record<string, unknown>
599
+ >
600
+ )
601
+ .where(ref<string>(primaryKey), '=', op.row_id)
602
+ .executeTakeFirst();
603
+ }
604
+ }
605
+
606
+ if (!updated && !conflictRow) {
558
607
  return {
559
608
  result: {
560
609
  opIndex,
@@ -567,87 +616,54 @@ export function createServerHandler<
567
616
  };
568
617
  }
569
618
 
570
- const existingVersion =
571
- (conflictRow[versionColumn] as number | undefined) ?? 0;
572
- return {
573
- result: {
574
- opIndex,
575
- status: 'conflict',
576
- message: `Version conflict: server=${existingVersion}, base=${expectedVersion}`,
577
- server_version: existingVersion,
578
- server_row: applyOutboundTransform(
579
- conflictRow as Selectable<ServerDB[TableName]>
580
- ),
581
- },
582
- emittedChanges: [],
583
- };
619
+ if (!updated && conflictRow) {
620
+ const existingVersion =
621
+ (conflictRow[versionColumn] as number | undefined) ?? 0;
622
+ return {
623
+ result: {
624
+ opIndex,
625
+ status: 'conflict',
626
+ message: `Version conflict: server=${existingVersion}, base=${expectedVersion}`,
627
+ server_version: existingVersion,
628
+ server_row: applyOutboundTransform(
629
+ conflictRow as Selectable<ServerDB[TableName]>
630
+ ),
631
+ },
632
+ emittedChanges: [],
633
+ };
634
+ }
584
635
  }
585
636
  } else {
586
637
  const updateSet: Record<string, unknown> = {
587
638
  ...payload,
588
- [versionColumn]: sql`${sql.ref(versionColumn)} + 1`,
639
+ [versionColumn]: sql`${sql.ref(qualifiedVersionRef)} + 1`,
589
640
  };
590
641
  delete updateSet[primaryKey];
591
642
  for (const col of Object.values(scopeColumns)) {
592
643
  delete updateSet[col];
593
644
  }
594
645
 
646
+ const insertValues: Record<string, unknown> = {
647
+ ...payload,
648
+ [primaryKey]: op.row_id,
649
+ [versionColumn]: 1,
650
+ };
651
+
595
652
  updated = (await (
596
- trx.updateTable(table) as UpdateQueryBuilder<
653
+ trx.insertInto(table) as InsertQueryBuilder<
597
654
  ServerDB,
598
655
  TableName,
599
- TableName,
600
- UpdateResult
656
+ InsertResult
601
657
  >
602
658
  )
603
- .set(updateSet as UpdateSetObject)
604
- .where(ref<string>(primaryKey), '=', op.row_id)
659
+ .values(insertValues as Insertable<ServerDB[TableName]>)
660
+ .onConflict((oc) =>
661
+ oc
662
+ .column(primaryKeyColumn)
663
+ .doUpdateSet(updateSet as UpdateSetObject)
664
+ )
605
665
  .returningAll()
606
666
  .executeTakeFirst()) as Record<string, unknown> | undefined;
607
-
608
- if (!updated) {
609
- const insertValues: Record<string, unknown> = {
610
- ...payload,
611
- [primaryKey]: op.row_id,
612
- [versionColumn]: 1,
613
- };
614
-
615
- try {
616
- updated = (await (
617
- trx.insertInto(table) as InsertQueryBuilder<
618
- ServerDB,
619
- TableName,
620
- InsertResult
621
- >
622
- )
623
- .values(insertValues as Insertable<ServerDB[TableName]>)
624
- .returningAll()
625
- .executeTakeFirst()) as Record<string, unknown> | undefined;
626
- } catch (err) {
627
- const message = err instanceof Error ? err.message : String(err);
628
- if (!isConstraintViolationError(message)) {
629
- throw err;
630
- }
631
- updated = (await (
632
- trx.updateTable(table) as UpdateQueryBuilder<
633
- ServerDB,
634
- TableName,
635
- TableName,
636
- UpdateResult
637
- >
638
- )
639
- .set(updateSet as UpdateSetObject)
640
- .where(ref<string>(primaryKey), '=', op.row_id)
641
- .returningAll()
642
- .executeTakeFirst()) as Record<string, unknown> | undefined;
643
- if (!updated) {
644
- constraintError = {
645
- message,
646
- code: classifyConstraintViolationCode(message),
647
- };
648
- }
649
- }
650
- }
651
667
  }
652
668
  } catch (err) {
653
669
  const message = err instanceof Error ? err.message : String(err);
@@ -728,14 +744,170 @@ export function createServerHandler<
728
744
  };
729
745
  };
730
746
 
747
+ const defaultApplyOperationBatch = async (
748
+ ctx: ServerApplyOperationContext<ServerDB, Auth>,
749
+ operations: BatchApplyOperationInput[]
750
+ ): Promise<ApplyOperationResult[]> => {
751
+ if (operations.length === 0) return [];
752
+
753
+ const runSequentialFallback = async (): Promise<ApplyOperationResult[]> => {
754
+ const sequential: ApplyOperationResult[] = [];
755
+ for (const entry of operations) {
756
+ const applied = await defaultApplyOperation(
757
+ ctx,
758
+ entry.op,
759
+ entry.opIndex
760
+ );
761
+ sequential.push(applied);
762
+ if (applied.result.status !== 'applied') {
763
+ break;
764
+ }
765
+ }
766
+ return sequential;
767
+ };
768
+
769
+ if (operations.length === 1 || authorize) {
770
+ return runSequentialFallback();
771
+ }
772
+
773
+ const trx = ctx.trx;
774
+ const prepared: Array<{
775
+ entry: BatchApplyOperationInput;
776
+ payload: Record<string, unknown>;
777
+ insertValues: Record<string, unknown>;
778
+ }> = [];
779
+ const seenRowIds = new Set<string>();
780
+ const payloadKeySignatures = new Set<string>();
781
+
782
+ for (const entry of operations) {
783
+ const op = entry.op;
784
+ if (op.table !== table || op.op !== 'upsert' || op.base_version != null) {
785
+ return runSequentialFallback();
786
+ }
787
+ if (seenRowIds.has(op.row_id)) {
788
+ return runSequentialFallback();
789
+ }
790
+ seenRowIds.add(op.row_id);
791
+
792
+ const rawPayload = op.payload ?? {};
793
+ const payloadRecord =
794
+ rawPayload !== null && typeof rawPayload === 'object'
795
+ ? (rawPayload as Record<string, unknown>)
796
+ : {};
797
+ const payload = applyInboundTransform(
798
+ payloadRecord,
799
+ ctx.schemaVersion
800
+ ) as Record<string, unknown>;
801
+
802
+ payloadKeySignatures.add(Object.keys(payload).sort().join('\u0000'));
803
+
804
+ const insertValues: Record<string, unknown> = {
805
+ ...payload,
806
+ [primaryKey]: op.row_id,
807
+ [versionColumn]: 1,
808
+ };
809
+
810
+ prepared.push({
811
+ entry,
812
+ payload,
813
+ insertValues,
814
+ });
815
+ }
816
+
817
+ if (prepared.length <= 1 || payloadKeySignatures.size !== 1) {
818
+ return runSequentialFallback();
819
+ }
820
+
821
+ const basePayload = prepared[0]!.payload;
822
+ const updateSet: Record<string, unknown> = {
823
+ ...basePayload,
824
+ [versionColumn]: sql`${sql.ref(qualifiedVersionRef)} + 1`,
825
+ };
826
+ delete updateSet[primaryKey];
827
+ for (const col of Object.values(scopeColumns)) {
828
+ delete updateSet[col];
829
+ }
830
+
831
+ try {
832
+ const updatedRows = (await (
833
+ trx.insertInto(table) as InsertQueryBuilder<
834
+ ServerDB,
835
+ TableName,
836
+ InsertResult
837
+ >
838
+ )
839
+ .values(
840
+ prepared.map(
841
+ (item) => item.insertValues as Insertable<ServerDB[TableName]>
842
+ )
843
+ )
844
+ .onConflict((oc) =>
845
+ oc.column(primaryKeyColumn).doUpdateSet(updateSet as UpdateSetObject)
846
+ )
847
+ .returningAll()
848
+ .execute()) as Record<string, unknown>[];
849
+
850
+ const updatedById = new Map<string, Record<string, unknown>>();
851
+ for (const row of updatedRows) {
852
+ const rowIdValue = row[primaryKey];
853
+ if (rowIdValue === null || rowIdValue === undefined) continue;
854
+ updatedById.set(String(rowIdValue), row);
855
+ }
856
+
857
+ const results: ApplyOperationResult[] = [];
858
+ for (const item of prepared) {
859
+ const rowId = item.entry.op.row_id;
860
+ const updated = updatedById.get(rowId);
861
+ if (!updated) {
862
+ return runSequentialFallback();
863
+ }
864
+
865
+ const rowVersion = (updated[versionColumn] as number) ?? 1;
866
+ const scopes = extractScopesImpl(updated);
867
+ const rowJson = applyOutboundTransform(
868
+ updated as Selectable<ServerDB[TableName]>
869
+ );
870
+
871
+ results.push({
872
+ result: { opIndex: item.entry.opIndex, status: 'applied' },
873
+ emittedChanges: [
874
+ {
875
+ table,
876
+ row_id: rowId,
877
+ op: 'upsert',
878
+ row_json: rowJson,
879
+ row_version: rowVersion,
880
+ scopes,
881
+ },
882
+ ],
883
+ });
884
+ }
885
+
886
+ return results;
887
+ } catch (err) {
888
+ const message = err instanceof Error ? err.message : String(err);
889
+ if (isConstraintViolationError(message)) {
890
+ return runSequentialFallback();
891
+ }
892
+ throw err;
893
+ }
894
+ };
895
+
731
896
  return {
732
897
  table,
733
898
  scopePatterns,
734
899
  dependsOn,
735
900
  snapshotChunkTtlMs,
901
+ canRejectSingleOperationWithoutSavepoint:
902
+ options.canRejectSingleOperationWithoutSavepoint ??
903
+ options.applyOperation === undefined,
736
904
  resolveScopes: resolveScopesImpl,
737
905
  extractScopes: extractScopesImpl,
738
906
  snapshot: options.snapshot ?? defaultSnapshot,
739
907
  applyOperation: options.applyOperation ?? defaultApplyOperation,
908
+ applyOperationBatch:
909
+ options.applyOperation === undefined
910
+ ? defaultApplyOperationBatch
911
+ : undefined,
740
912
  };
741
913
  }