@syncular/core 0.0.1-60
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/blobs.d.ts +137 -0
- package/dist/blobs.d.ts.map +1 -0
- package/dist/blobs.js +47 -0
- package/dist/blobs.js.map +1 -0
- package/dist/conflict.d.ts +22 -0
- package/dist/conflict.d.ts.map +1 -0
- package/dist/conflict.js +81 -0
- package/dist/conflict.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/kysely-serialize.d.ts +22 -0
- package/dist/kysely-serialize.d.ts.map +1 -0
- package/dist/kysely-serialize.js +147 -0
- package/dist/kysely-serialize.js.map +1 -0
- package/dist/logger.d.ts +46 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +48 -0
- package/dist/logger.js.map +1 -0
- package/dist/proxy/index.d.ts +5 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +5 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/types.d.ts +54 -0
- package/dist/proxy/types.d.ts.map +1 -0
- package/dist/proxy/types.js +7 -0
- package/dist/proxy/types.js.map +1 -0
- package/dist/schemas/blobs.d.ts +76 -0
- package/dist/schemas/blobs.d.ts.map +1 -0
- package/dist/schemas/blobs.js +63 -0
- package/dist/schemas/blobs.js.map +1 -0
- package/dist/schemas/common.d.ts +28 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +26 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/index.d.ts +7 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +7 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/sync.d.ts +391 -0
- package/dist/schemas/sync.d.ts.map +1 -0
- package/dist/schemas/sync.js +156 -0
- package/dist/schemas/sync.js.map +1 -0
- package/dist/scopes/index.d.ts +65 -0
- package/dist/scopes/index.d.ts.map +1 -0
- package/dist/scopes/index.js +67 -0
- package/dist/scopes/index.js.map +1 -0
- package/dist/transforms.d.ts +146 -0
- package/dist/transforms.d.ts.map +1 -0
- package/dist/transforms.js +155 -0
- package/dist/transforms.js.map +1 -0
- package/dist/types.d.ts +129 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
- package/src/__tests__/conflict.test.ts +325 -0
- package/src/blobs.ts +187 -0
- package/src/conflict.ts +92 -0
- package/src/index.ts +30 -0
- package/src/kysely-serialize.ts +214 -0
- package/src/logger.ts +80 -0
- package/src/proxy/index.ts +10 -0
- package/src/proxy/types.ts +57 -0
- package/src/schemas/blobs.ts +101 -0
- package/src/schemas/common.ts +45 -0
- package/src/schemas/index.ts +7 -0
- package/src/schemas/sync.ts +222 -0
- package/src/scopes/index.ts +122 -0
- package/src/transforms.ts +256 -0
- package/src/types.ts +158 -0
package/src/types.ts
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/core - Shared types for sync infrastructure
|
|
3
|
+
*
|
|
4
|
+
* Non-protocol types: conflict detection, transport interfaces.
|
|
5
|
+
* Protocol types (SyncOp, SyncPushRequest, etc.) live in ./schemas/sync.ts
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { SyncCombinedRequest, SyncCombinedResponse } from './schemas/sync';
|
|
9
|
+
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Conflict Detection Types
|
|
12
|
+
// ============================================================================
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Result of a conflict check - no conflict
|
|
16
|
+
*/
|
|
17
|
+
interface ConflictCheckResultOk {
|
|
18
|
+
hasConflict: false;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Result of a conflict check - conflict detected
|
|
23
|
+
*/
|
|
24
|
+
interface ConflictCheckResultConflict {
|
|
25
|
+
hasConflict: true;
|
|
26
|
+
/** Fields with conflicting changes */
|
|
27
|
+
conflictingFields: string[];
|
|
28
|
+
/** Current server row state */
|
|
29
|
+
serverRow: Record<string, unknown>;
|
|
30
|
+
/** Current server version */
|
|
31
|
+
serverVersion: number;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Union type for conflict check results
|
|
36
|
+
*/
|
|
37
|
+
export type ConflictCheckResult =
|
|
38
|
+
| ConflictCheckResultOk
|
|
39
|
+
| ConflictCheckResultConflict;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Result of a field-level merge - can merge
|
|
43
|
+
*/
|
|
44
|
+
export interface MergeResultOk {
|
|
45
|
+
canMerge: true;
|
|
46
|
+
/** Merged payload combining client and server changes */
|
|
47
|
+
mergedPayload: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Result of a field-level merge - cannot merge
|
|
52
|
+
*/
|
|
53
|
+
export interface MergeResultConflict {
|
|
54
|
+
canMerge: false;
|
|
55
|
+
/** Fields that cannot be auto-merged */
|
|
56
|
+
conflictingFields: string[];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Union type for merge results
|
|
61
|
+
*/
|
|
62
|
+
export type MergeResult = MergeResultOk | MergeResultConflict;
|
|
63
|
+
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// Transport Types
|
|
66
|
+
// ============================================================================
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Options for transport operations.
|
|
70
|
+
* Provides hooks for auth errors and cancellation support.
|
|
71
|
+
*/
|
|
72
|
+
export interface SyncTransportOptions {
|
|
73
|
+
/**
|
|
74
|
+
* Called when auth fails (401/403).
|
|
75
|
+
* Return true to retry the request after refreshing auth.
|
|
76
|
+
*/
|
|
77
|
+
onAuthError?: () => Promise<boolean>;
|
|
78
|
+
/**
|
|
79
|
+
* Abort signal for cancellation support.
|
|
80
|
+
*/
|
|
81
|
+
signal?: AbortSignal;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Blob transport operations (optional extension to SyncTransport).
|
|
86
|
+
* When present, enables blob upload/download through the same transport.
|
|
87
|
+
*/
|
|
88
|
+
export interface SyncTransportBlobs {
|
|
89
|
+
/**
|
|
90
|
+
* Initiate a blob upload.
|
|
91
|
+
* Returns presigned URL info or indicates blob already exists (dedup).
|
|
92
|
+
*/
|
|
93
|
+
initiateUpload(args: {
|
|
94
|
+
hash: string;
|
|
95
|
+
size: number;
|
|
96
|
+
mimeType: string;
|
|
97
|
+
}): Promise<{
|
|
98
|
+
exists: boolean;
|
|
99
|
+
uploadUrl?: string;
|
|
100
|
+
uploadMethod?: 'PUT' | 'POST';
|
|
101
|
+
uploadHeaders?: Record<string, string>;
|
|
102
|
+
}>;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Complete a blob upload.
|
|
106
|
+
* Call this after uploading to the presigned URL.
|
|
107
|
+
*/
|
|
108
|
+
completeUpload(hash: string): Promise<{ ok: boolean; error?: string }>;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Get a presigned download URL.
|
|
112
|
+
*/
|
|
113
|
+
getDownloadUrl(hash: string): Promise<{
|
|
114
|
+
url: string;
|
|
115
|
+
expiresAt: string;
|
|
116
|
+
}>;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Transport interface for sync operations.
|
|
121
|
+
*/
|
|
122
|
+
export interface SyncTransport {
|
|
123
|
+
/**
|
|
124
|
+
* Combined push+pull in a single round-trip.
|
|
125
|
+
*/
|
|
126
|
+
sync(
|
|
127
|
+
request: SyncCombinedRequest,
|
|
128
|
+
options?: SyncTransportOptions
|
|
129
|
+
): Promise<SyncCombinedResponse>;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Download an encoded bootstrap snapshot chunk.
|
|
133
|
+
*/
|
|
134
|
+
fetchSnapshotChunk(
|
|
135
|
+
request: { chunkId: string },
|
|
136
|
+
options?: SyncTransportOptions
|
|
137
|
+
): Promise<Uint8Array>;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Optional blob operations.
|
|
141
|
+
* When present, enables blob upload/download functionality.
|
|
142
|
+
*/
|
|
143
|
+
blobs?: SyncTransportBlobs;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Transport error with additional context
|
|
148
|
+
*/
|
|
149
|
+
export class SyncTransportError extends Error {
|
|
150
|
+
constructor(
|
|
151
|
+
message: string,
|
|
152
|
+
public readonly status?: number,
|
|
153
|
+
public readonly code?: string
|
|
154
|
+
) {
|
|
155
|
+
super(message);
|
|
156
|
+
this.name = 'SyncTransportError';
|
|
157
|
+
}
|
|
158
|
+
}
|