@syncular/core 0.0.1-60 → 0.0.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/dist/blobs.d.ts +4 -0
- package/dist/blobs.d.ts.map +1 -1
- package/dist/blobs.js +12 -0
- package/dist/blobs.js.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -11
- package/dist/index.js.map +1 -1
- package/dist/kysely-serialize.d.ts +1 -1
- package/dist/kysely-serialize.d.ts.map +1 -1
- package/dist/logger.d.ts +8 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +12 -0
- package/dist/logger.js.map +1 -1
- package/dist/proxy/types.d.ts +9 -0
- package/dist/proxy/types.d.ts.map +1 -1
- package/dist/schemas/sync.d.ts +0 -114
- package/dist/schemas/sync.d.ts.map +1 -1
- package/dist/schemas/sync.js +0 -13
- package/dist/schemas/sync.js.map +1 -1
- package/dist/scopes/index.d.ts +68 -0
- package/dist/scopes/index.d.ts.map +1 -1
- package/dist/scopes/index.js +154 -0
- package/dist/scopes/index.js.map +1 -1
- package/dist/types.d.ts +9 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +8 -27
- package/src/blobs.ts +14 -0
- package/src/index.ts +41 -7
- package/src/kysely-serialize.ts +1 -1
- package/src/logger.ts +16 -0
- package/src/proxy/types.ts +10 -0
- package/src/schemas/sync.ts +0 -20
- package/src/scopes/index.ts +201 -0
- package/src/types.ts +20 -5
package/dist/blobs.d.ts
CHANGED
|
@@ -134,4 +134,8 @@ export declare function parseBlobHash(hash: string): string | null;
|
|
|
134
134
|
* Create a blob hash string from hex.
|
|
135
135
|
*/
|
|
136
136
|
export declare function createBlobHash(hexHash: string): string;
|
|
137
|
+
/**
|
|
138
|
+
* Check if a value looks like a BlobRef.
|
|
139
|
+
*/
|
|
140
|
+
export declare function isBlobRef(value: unknown): value is BlobRef;
|
|
137
141
|
//# sourceMappingURL=blobs.d.ts.map
|
package/dist/blobs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobs.d.ts","sourceRoot":"","sources":["../src/blobs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"blobs.d.ts","sourceRoot":"","sources":["../src/blobs.ts"],"names":[],"mappings":"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"}
|
package/dist/blobs.js
CHANGED
|
@@ -44,4 +44,16 @@ export function parseBlobHash(hash) {
|
|
|
44
44
|
export function createBlobHash(hexHash) {
|
|
45
45
|
return `sha256:${hexHash.toLowerCase()}`;
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if a value looks like a BlobRef.
|
|
49
|
+
*/
|
|
50
|
+
export function isBlobRef(value) {
|
|
51
|
+
if (typeof value !== 'object' || value === null)
|
|
52
|
+
return false;
|
|
53
|
+
const obj = value;
|
|
54
|
+
return (typeof obj.hash === 'string' &&
|
|
55
|
+
obj.hash.startsWith('sha256:') &&
|
|
56
|
+
typeof obj.size === 'number' &&
|
|
57
|
+
typeof obj.mimeType === 'string');
|
|
58
|
+
}
|
|
47
59
|
//# sourceMappingURL=blobs.js.map
|
package/dist/blobs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobs.js","sourceRoot":"","sources":["../src/blobs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwIH,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAM7B,EAAW;IACV,MAAM,GAAG,GAAY;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AAAA,CACZ;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAiB;IACzD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAAA,CAC1B;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAU;IACtD,OAAO,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AAAA,CAC1C"}
|
|
1
|
+
{"version":3,"file":"blobs.js","sourceRoot":"","sources":["../src/blobs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwIH,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAM7B,EAAW;IACV,MAAM,GAAG,GAAY;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AAAA,CACZ;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAiB;IACzD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAAA,CAC1B;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAU;IACtD,OAAO,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AAAA,CAC1C;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc,EAAoB;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,OAAO,CACL,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC9B,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CACjC,CAAC;AAAA,CACH"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,13 +9,15 @@
|
|
|
9
9
|
* - Blob types for media/binary handling
|
|
10
10
|
* - Zod schemas for runtime validation and OpenAPI
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
16
|
-
export
|
|
12
|
+
export type { BlobSignDownloadOptions, BlobSignedUpload, BlobSignUploadOptions, BlobStorageAdapter, BlobTransport, } from './blobs';
|
|
13
|
+
export { createBlobHash, createBlobRef, parseBlobHash, } from './blobs';
|
|
14
|
+
export { SerializePlugin } from './kysely-serialize';
|
|
15
|
+
export { createSyncTimer, logSyncEvent, } from './logger';
|
|
16
|
+
export type { ProxyHandshake, ProxyHandshakeAck, ProxyMessage, ProxyResponse, } from './proxy';
|
|
17
17
|
export * from './schemas';
|
|
18
|
-
export
|
|
18
|
+
export type { ScopeDefinition, ScopePattern, ScopeValues, StoredScopes, } from './scopes';
|
|
19
|
+
export { extractScopeVars, normalizeScopes } from './scopes';
|
|
19
20
|
export * from './transforms';
|
|
20
|
-
export
|
|
21
|
+
export type { ConflictCheckResult, MergeResult, MergeResultConflict, MergeResultOk, SyncTransport, SyncTransportBlobs, SyncTransportOptions, } from './types';
|
|
22
|
+
export { SyncTransportError } from './types';
|
|
21
23
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,eAAe,EACf,YAAY,GACb,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC;AAEjB,cAAc,WAAW,CAAC;AAE1B,YAAY,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE7D,cAAc,cAAc,CAAC;AAG7B,YAAY,EACV,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,22 +9,16 @@
|
|
|
9
9
|
* - Blob types for media/binary handling
|
|
10
10
|
* - Zod schemas for runtime validation and OpenAPI
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
|
-
export * from './blobs';
|
|
12
|
+
export { createBlobHash, createBlobRef, parseBlobHash, } from './blobs';
|
|
14
13
|
// Conflict detection utilities
|
|
15
|
-
export * from './conflict';
|
|
16
14
|
// Kysely plugin utilities
|
|
17
|
-
export
|
|
15
|
+
export { SerializePlugin } from './kysely-serialize';
|
|
18
16
|
// Logging utilities
|
|
19
|
-
export
|
|
20
|
-
// Proxy protocol types
|
|
21
|
-
export * from './proxy';
|
|
17
|
+
export { createSyncTimer, logSyncEvent, } from './logger';
|
|
22
18
|
// Schemas (Zod)
|
|
23
19
|
export * from './schemas';
|
|
24
|
-
|
|
25
|
-
export * from './scopes';
|
|
20
|
+
export { extractScopeVars, normalizeScopes } from './scopes';
|
|
26
21
|
// Data transformation hooks
|
|
27
22
|
export * from './transforms';
|
|
28
|
-
|
|
29
|
-
export * from './types';
|
|
23
|
+
export { SyncTransportError } from './types';
|
|
30
24
|
//# 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;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,+BAA+B;AAC/B,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,oBAAoB;AACpB,OAAO,EACL,eAAe,EACf,YAAY,GACb,MAAM,UAAU,CAAC;AAQlB,gBAAgB;AAChB,cAAc,WAAW,CAAC;AAQ1B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC7D,4BAA4B;AAC5B,cAAc,cAAc,CAAC;AAY7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -10,7 +10,7 @@ declare class BaseSerializePlugin implements KyselyPlugin {
|
|
|
10
10
|
transformQuery({ node, queryId }: PluginTransformQueryArgs): RootOperationNode;
|
|
11
11
|
transformResult({ result, queryId }: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
|
|
12
12
|
}
|
|
13
|
-
interface SerializePluginOptions {
|
|
13
|
+
export interface SerializePluginOptions {
|
|
14
14
|
serializer?: Serializer;
|
|
15
15
|
deserializer?: Deserializer;
|
|
16
16
|
skipNodeKind?: Array<RootOperationNode['kind']>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-serialize.d.ts","sourceRoot":"","sources":["../src/kysely-serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAE9B,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAEhB,MAAM,QAAQ,CAAC;AAEhB,KAAK,UAAU,GAAG,CAAC,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC;AAClD,KAAK,YAAY,GAAG,CAAC,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC;AA4HpD,cAAM,mBAAoB,YAAW,YAAY;;IAM/C;;OAEG;IACH,YACE,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAW/C;IAED,cAAc,CAAC,EACb,IAAI,EACJ,OAAO,EACR,EAAE,wBAAwB,GAAG,iBAAiB,CAM9C;IAEK,eAAe,CAAC,EACpB,MAAM,EACN,OAAO,EACR,EAAE,yBAAyB,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAK9D;CAcF;AAED,
|
|
1
|
+
{"version":3,"file":"kysely-serialize.d.ts","sourceRoot":"","sources":["../src/kysely-serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAEjB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAE9B,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAEhB,MAAM,QAAQ,CAAC;AAEhB,KAAK,UAAU,GAAG,CAAC,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC;AAClD,KAAK,YAAY,GAAG,CAAC,SAAS,EAAE,OAAO,KAAK,OAAO,CAAC;AA4HpD,cAAM,mBAAoB,YAAW,YAAY;;IAM/C;;OAEG;IACH,YACE,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAW/C;IAED,cAAc,CAAC,EACb,IAAI,EACJ,OAAO,EACR,EAAE,wBAAwB,GAAG,iBAAiB,CAM9C;IAEK,eAAe,CAAC,EACpB,MAAM,EACN,OAAO,EACR,EAAE,yBAAyB,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAK9D;CAcF;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;CACjD;AAED,qBAAa,eAAgB,SAAQ,mBAAmB;IACtD,YAAY,OAAO,GAAE,sBAA2B,EAO/C;CACF"}
|
package/dist/logger.d.ts
CHANGED
|
@@ -42,5 +42,13 @@ export declare const logSyncEvent: SyncLogger;
|
|
|
42
42
|
* logSyncEvent({ event: 'work_complete', durationMs: elapsed() });
|
|
43
43
|
*/
|
|
44
44
|
export declare function createSyncTimer(): () => number;
|
|
45
|
+
/**
|
|
46
|
+
* Create a scoped logger that automatically adds context to all events.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* const log = createScopedLogger({ userId: 'user123', shape: 'teams' });
|
|
50
|
+
* log({ event: 'pull_start' }); // Includes userId and shape
|
|
51
|
+
*/
|
|
52
|
+
export declare function createScopedLogger(context: Record<string, unknown>, baseLogger?: SyncLogger): SyncLogger;
|
|
45
53
|
export {};
|
|
46
54
|
//# sourceMappingURL=logger.d.ts.map
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,UAAU,YAAY;IACpB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AA+BhD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,UAAkC,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,MAAM,MAAM,CAG9C"}
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,UAAU,YAAY;IACpB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AA+BhD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,UAAkC,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,MAAM,MAAM,CAG9C;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,GAAE,UAAyB,GACpC,UAAU,CAIZ"}
|
package/dist/logger.js
CHANGED
|
@@ -45,4 +45,16 @@ export function createSyncTimer() {
|
|
|
45
45
|
const start = performance.now();
|
|
46
46
|
return () => Math.round(performance.now() - start);
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a scoped logger that automatically adds context to all events.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* const log = createScopedLogger({ userId: 'user123', shape: 'teams' });
|
|
53
|
+
* log({ event: 'pull_start' }); // Includes userId and shape
|
|
54
|
+
*/
|
|
55
|
+
export function createScopedLogger(context, baseLogger = logSyncEvent) {
|
|
56
|
+
return (event) => {
|
|
57
|
+
baseLogger({ ...context, ...event });
|
|
58
|
+
};
|
|
59
|
+
}
|
|
48
60
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2BH;;;;;;GAMG;AACH,SAAS,mBAAmB,GAAe;IACzC,qBAAqB;IACrB,MAAM,MAAM,GACV,OAAO,UAAU,KAAK,WAAW;QACjC,OAAO,UAAU,CAAC,YAAY,KAAK,UAAU,CAAC;IAEhD,MAAM,KAAK,GAAG,MAAM;QAClB,CAAC,CAAC,CAAC,EAAc,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC,EAAc,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1C,OAAO,CAAC,KAAmB,EAAE,EAAE,CAAC;QAC9B,KAAK,CAAC,GAAG,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC;gBACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,GAAG,KAAK;aACT,CAAC,CACH,CAAC;QAAA,CACH,CAAC,CAAC;IAAA,CACJ,CAAC;AAAA,CACH;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAe,mBAAmB,EAAE,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,GAAiB;IAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;AAAA,CACpD"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2BH;;;;;;GAMG;AACH,SAAS,mBAAmB,GAAe;IACzC,qBAAqB;IACrB,MAAM,MAAM,GACV,OAAO,UAAU,KAAK,WAAW;QACjC,OAAO,UAAU,CAAC,YAAY,KAAK,UAAU,CAAC;IAEhD,MAAM,KAAK,GAAG,MAAM;QAClB,CAAC,CAAC,CAAC,EAAc,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC,EAAc,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1C,OAAO,CAAC,KAAmB,EAAE,EAAE,CAAC;QAC9B,KAAK,CAAC,GAAG,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC;gBACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,GAAG,KAAK;aACT,CAAC,CACH,CAAC;QAAA,CACH,CAAC,CAAC;IAAA,CACJ,CAAC;AAAA,CACH;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAe,mBAAmB,EAAE,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,GAAiB;IAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IAChC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;AAAA,CACpD;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAgC,EAChC,UAAU,GAAe,YAAY,EACzB;IACZ,OAAO,CAAC,KAAmB,EAAE,EAAE,CAAC;QAC9B,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAAA,CACtC,CAAC;AAAA,CACH"}
|
package/dist/proxy/types.d.ts
CHANGED
|
@@ -31,6 +31,15 @@ export interface ProxyResponse {
|
|
|
31
31
|
/** Error message (for 'error' type) */
|
|
32
32
|
error?: string;
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Options for establishing a proxy connection.
|
|
36
|
+
*/
|
|
37
|
+
export interface ProxyConnectOptions {
|
|
38
|
+
/** Actor ID for oplog tracking */
|
|
39
|
+
actorId: string;
|
|
40
|
+
/** Client ID for oplog tracking */
|
|
41
|
+
clientId: string;
|
|
42
|
+
}
|
|
34
43
|
/**
|
|
35
44
|
* Handshake message sent when connection is established.
|
|
36
45
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proxy/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChD,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,uCAAuC;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proxy/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChD,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,uCAAuC;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
package/dist/schemas/sync.d.ts
CHANGED
|
@@ -274,118 +274,4 @@ export declare const SyncPullResponseSchema: z.ZodObject<{
|
|
|
274
274
|
}, z.core.$strip>>;
|
|
275
275
|
}, z.core.$strip>;
|
|
276
276
|
export type SyncPullResponse = z.infer<typeof SyncPullResponseSchema>;
|
|
277
|
-
export declare const SyncCombinedRequestSchema: z.ZodObject<{
|
|
278
|
-
clientId: z.ZodString;
|
|
279
|
-
push: z.ZodOptional<z.ZodObject<{
|
|
280
|
-
clientCommitId: z.ZodString;
|
|
281
|
-
operations: z.ZodArray<z.ZodObject<{
|
|
282
|
-
table: z.ZodString;
|
|
283
|
-
row_id: z.ZodString;
|
|
284
|
-
op: z.ZodEnum<{
|
|
285
|
-
delete: "delete";
|
|
286
|
-
upsert: "upsert";
|
|
287
|
-
}>;
|
|
288
|
-
payload: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
289
|
-
base_version: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
290
|
-
}, z.core.$strip>>;
|
|
291
|
-
schemaVersion: z.ZodNumber;
|
|
292
|
-
}, z.core.$strip>>;
|
|
293
|
-
pull: z.ZodOptional<z.ZodObject<{
|
|
294
|
-
limitCommits: z.ZodNumber;
|
|
295
|
-
limitSnapshotRows: z.ZodOptional<z.ZodNumber>;
|
|
296
|
-
maxSnapshotPages: z.ZodOptional<z.ZodNumber>;
|
|
297
|
-
dedupeRows: z.ZodOptional<z.ZodBoolean>;
|
|
298
|
-
subscriptions: z.ZodArray<z.ZodObject<{
|
|
299
|
-
id: z.ZodString;
|
|
300
|
-
shape: z.ZodString;
|
|
301
|
-
scopes: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
302
|
-
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
303
|
-
cursor: z.ZodNumber;
|
|
304
|
-
bootstrapState: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
305
|
-
asOfCommitSeq: z.ZodNumber;
|
|
306
|
-
tables: z.ZodArray<z.ZodString>;
|
|
307
|
-
tableIndex: z.ZodNumber;
|
|
308
|
-
rowCursor: z.ZodNullable<z.ZodString>;
|
|
309
|
-
}, z.core.$strip>>>;
|
|
310
|
-
}, z.core.$strip>>;
|
|
311
|
-
}, z.core.$strip>>;
|
|
312
|
-
}, z.core.$strip>;
|
|
313
|
-
export type SyncCombinedRequest = z.infer<typeof SyncCombinedRequestSchema>;
|
|
314
|
-
export declare const SyncCombinedResponseSchema: z.ZodObject<{
|
|
315
|
-
ok: z.ZodLiteral<true>;
|
|
316
|
-
push: z.ZodOptional<z.ZodObject<{
|
|
317
|
-
ok: z.ZodLiteral<true>;
|
|
318
|
-
status: z.ZodEnum<{
|
|
319
|
-
applied: "applied";
|
|
320
|
-
cached: "cached";
|
|
321
|
-
rejected: "rejected";
|
|
322
|
-
}>;
|
|
323
|
-
commitSeq: z.ZodOptional<z.ZodNumber>;
|
|
324
|
-
results: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
325
|
-
opIndex: z.ZodNumber;
|
|
326
|
-
status: z.ZodLiteral<"applied">;
|
|
327
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
328
|
-
opIndex: z.ZodNumber;
|
|
329
|
-
status: z.ZodLiteral<"conflict">;
|
|
330
|
-
message: z.ZodString;
|
|
331
|
-
server_version: z.ZodNumber;
|
|
332
|
-
server_row: z.ZodUnknown;
|
|
333
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
334
|
-
opIndex: z.ZodNumber;
|
|
335
|
-
status: z.ZodLiteral<"error">;
|
|
336
|
-
error: z.ZodString;
|
|
337
|
-
code: z.ZodOptional<z.ZodString>;
|
|
338
|
-
retriable: z.ZodOptional<z.ZodBoolean>;
|
|
339
|
-
}, z.core.$strip>]>>;
|
|
340
|
-
}, z.core.$strip>>;
|
|
341
|
-
pull: z.ZodOptional<z.ZodObject<{
|
|
342
|
-
ok: z.ZodLiteral<true>;
|
|
343
|
-
subscriptions: z.ZodArray<z.ZodObject<{
|
|
344
|
-
id: z.ZodString;
|
|
345
|
-
status: z.ZodEnum<{
|
|
346
|
-
active: "active";
|
|
347
|
-
revoked: "revoked";
|
|
348
|
-
}>;
|
|
349
|
-
scopes: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
350
|
-
bootstrap: z.ZodBoolean;
|
|
351
|
-
bootstrapState: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
352
|
-
asOfCommitSeq: z.ZodNumber;
|
|
353
|
-
tables: z.ZodArray<z.ZodString>;
|
|
354
|
-
tableIndex: z.ZodNumber;
|
|
355
|
-
rowCursor: z.ZodNullable<z.ZodString>;
|
|
356
|
-
}, z.core.$strip>>>;
|
|
357
|
-
nextCursor: z.ZodNumber;
|
|
358
|
-
commits: z.ZodArray<z.ZodObject<{
|
|
359
|
-
commitSeq: z.ZodNumber;
|
|
360
|
-
createdAt: z.ZodString;
|
|
361
|
-
actorId: z.ZodString;
|
|
362
|
-
changes: z.ZodArray<z.ZodObject<{
|
|
363
|
-
table: z.ZodString;
|
|
364
|
-
row_id: z.ZodString;
|
|
365
|
-
op: z.ZodEnum<{
|
|
366
|
-
delete: "delete";
|
|
367
|
-
upsert: "upsert";
|
|
368
|
-
}>;
|
|
369
|
-
row_json: z.ZodNullable<z.ZodUnknown>;
|
|
370
|
-
row_version: z.ZodNullable<z.ZodNumber>;
|
|
371
|
-
scopes: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
372
|
-
}, z.core.$strip>>;
|
|
373
|
-
}, z.core.$strip>>;
|
|
374
|
-
snapshots: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
375
|
-
table: z.ZodString;
|
|
376
|
-
rows: z.ZodArray<z.ZodUnknown>;
|
|
377
|
-
chunks: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
378
|
-
id: z.ZodString;
|
|
379
|
-
byteLength: z.ZodNumber;
|
|
380
|
-
sha256: z.ZodString;
|
|
381
|
-
encoding: z.ZodLiteral<"ndjson">;
|
|
382
|
-
compression: z.ZodLiteral<"gzip">;
|
|
383
|
-
}, z.core.$strip>>>;
|
|
384
|
-
isFirstPage: z.ZodBoolean;
|
|
385
|
-
isLastPage: z.ZodBoolean;
|
|
386
|
-
}, z.core.$strip>>>;
|
|
387
|
-
}, z.core.$strip>>;
|
|
388
|
-
}, z.core.$strip>>;
|
|
389
|
-
}, z.core.$strip>;
|
|
390
|
-
export type SyncCombinedResponse = z.infer<typeof SyncCombinedResponseSchema>;
|
|
391
277
|
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/schemas/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,YAAY;;;EAA+B,CAAC;AACzD,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAWlD;;GAEG;AACH,eAAO,MAAM,iBAAiB,uFAG7B,CAAC;AAMF,eAAO,MAAM,mBAAmB;;;;;;;;;iBAM9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAMhE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBAKhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAuBpE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;mBAIpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;iBAKjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAMtE,eAAO,MAAM,wBAAwB;;;;;iBAKnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAM1E,eAAO,MAAM,6BAA6B;;;;;;;;;;;;iBAOxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAC3C,OAAO,6BAA6B,CACrC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;iBAOhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,gBAAgB;;;;;;;;;;iBAO3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;iBAK3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,0BAA0B;;;;;;iBAMrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAM7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS7C,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAChD,OAAO,kCAAkC,CAC1C,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/schemas/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,YAAY;;;EAA+B,CAAC;AACzD,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAWlD;;GAEG;AACH,eAAO,MAAM,iBAAiB,uFAG7B,CAAC;AAMF,eAAO,MAAM,mBAAmB;;;;;;;;;iBAM9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAMhE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBAKhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAuBpE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;mBAIpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;iBAKjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAMtE,eAAO,MAAM,wBAAwB;;;;;iBAKnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAM1E,eAAO,MAAM,6BAA6B;;;;;;;;;;;;iBAOxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAC3C,OAAO,6BAA6B,CACrC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;iBAOhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,gBAAgB;;;;;;;;;;iBAO3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;iBAK3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,0BAA0B;;;;;;iBAMrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAM7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS7C,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAChD,OAAO,kCAAkC,CAC1C,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
package/dist/schemas/sync.js
CHANGED
|
@@ -140,17 +140,4 @@ export const SyncPullResponseSchema = z.object({
|
|
|
140
140
|
ok: z.literal(true),
|
|
141
141
|
subscriptions: z.array(SyncPullSubscriptionResponseSchema),
|
|
142
142
|
});
|
|
143
|
-
// ============================================================================
|
|
144
|
-
// Combined Sync Request/Response Schemas
|
|
145
|
-
// ============================================================================
|
|
146
|
-
export const SyncCombinedRequestSchema = z.object({
|
|
147
|
-
clientId: z.string().min(1),
|
|
148
|
-
push: SyncPushRequestSchema.omit({ clientId: true }).optional(),
|
|
149
|
-
pull: SyncPullRequestSchema.omit({ clientId: true }).optional(),
|
|
150
|
-
});
|
|
151
|
-
export const SyncCombinedResponseSchema = z.object({
|
|
152
|
-
ok: z.literal(true),
|
|
153
|
-
push: SyncPushResponseSchema.optional(),
|
|
154
|
-
pull: SyncPullResponseSchema.optional(),
|
|
155
|
-
});
|
|
156
143
|
//# sourceMappingURL=sync.js.map
|
package/dist/schemas/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/schemas/sync.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/schemas/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/scopes/index.d.ts
CHANGED
|
@@ -27,6 +27,18 @@ export type ScopeValues = Record<string, string | string[]>;
|
|
|
27
27
|
* { user_id: 'U1', project_id: 'P1' }
|
|
28
28
|
*/
|
|
29
29
|
export type StoredScopes = Record<string, string>;
|
|
30
|
+
/**
|
|
31
|
+
* Definition of shared scopes across server and client.
|
|
32
|
+
* Maps scope patterns to their variable types.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* type SharedScopes = {
|
|
36
|
+
* 'user:{user_id}': { user_id: string };
|
|
37
|
+
* 'project:{project_id}': { project_id: string };
|
|
38
|
+
* 'event_date:{year}:{month}': { year: string; month: string };
|
|
39
|
+
* };
|
|
40
|
+
*/
|
|
41
|
+
export type SharedScopesDefinition = Record<ScopePattern, Record<string, string>>;
|
|
30
42
|
/**
|
|
31
43
|
* Simplified scope definition.
|
|
32
44
|
* Can be a simple pattern string or an object with explicit column mapping.
|
|
@@ -46,6 +58,17 @@ export type ScopeDefinition = string | {
|
|
|
46
58
|
pattern: string;
|
|
47
59
|
column: string;
|
|
48
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* Build a scope string from a pattern and value.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* buildScopeKey('user:{user_id}', '123') // 'user:123'
|
|
66
|
+
*/
|
|
67
|
+
export declare function buildScopeKey(pattern: string, value: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Check if a scope string matches a pattern.
|
|
70
|
+
*/
|
|
71
|
+
export declare function scopeKeyMatchesPattern(pattern: string, scopeKey: string): boolean;
|
|
49
72
|
/**
|
|
50
73
|
* Normalize scope definitions to a pattern-to-column map.
|
|
51
74
|
*
|
|
@@ -54,6 +77,14 @@ export type ScopeDefinition = string | {
|
|
|
54
77
|
* // → { 'user:{user_id}': 'user_id' }
|
|
55
78
|
*/
|
|
56
79
|
export declare function normalizeScopes(scopes: ScopeDefinition[]): Record<string, string>;
|
|
80
|
+
/**
|
|
81
|
+
* Find the matching pattern and extract value from a scope string.
|
|
82
|
+
*/
|
|
83
|
+
export declare function findMatchingPattern(patterns: Record<string, string>, scopeKey: string): {
|
|
84
|
+
pattern: string;
|
|
85
|
+
column: string;
|
|
86
|
+
value: string;
|
|
87
|
+
} | null;
|
|
57
88
|
/**
|
|
58
89
|
* Extract variable names from a scope pattern.
|
|
59
90
|
*
|
|
@@ -62,4 +93,41 @@ export declare function normalizeScopes(scopes: ScopeDefinition[]): Record<strin
|
|
|
62
93
|
* extractScopeVars('event_date:{year}:{month}') // ['year', 'month']
|
|
63
94
|
*/
|
|
64
95
|
export declare function extractScopeVars(pattern: ScopePattern): string[];
|
|
96
|
+
/**
|
|
97
|
+
* Build scope values from a row based on a scope pattern.
|
|
98
|
+
* Uses the pattern's variable names to extract values from the row.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* buildScopeValuesFromRow('project:{project_id}', { id: '1', project_id: 'P1' })
|
|
102
|
+
* // { project_id: 'P1' }
|
|
103
|
+
*/
|
|
104
|
+
export declare function buildScopeValuesFromRow(pattern: ScopePattern, row: Record<string, unknown>): StoredScopes;
|
|
105
|
+
/**
|
|
106
|
+
* Merge multiple scope value objects into one.
|
|
107
|
+
* Later values override earlier ones.
|
|
108
|
+
*/
|
|
109
|
+
export declare function mergeScopeValues(...sources: StoredScopes[]): StoredScopes;
|
|
110
|
+
/**
|
|
111
|
+
* Check if two stored scopes are equal.
|
|
112
|
+
*/
|
|
113
|
+
export declare function scopesEqual(a: StoredScopes, b: StoredScopes): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Check if stored scopes match a subscription's scope values.
|
|
116
|
+
* Handles array values in subscription (OR semantics).
|
|
117
|
+
* Missing keys in subscription are treated as wildcards (match any).
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* scopesMatchSubscription({ project_id: 'P1' }, { project_id: 'P1' }) // true
|
|
121
|
+
* scopesMatchSubscription({ project_id: 'P1' }, { project_id: ['P1', 'P2'] }) // true
|
|
122
|
+
* scopesMatchSubscription({ project_id: 'P1' }, { project_id: 'P2' }) // false
|
|
123
|
+
*/
|
|
124
|
+
export declare function scopesMatchSubscription(stored: StoredScopes, subscription: ScopeValues): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Normalize scope values to always use arrays (for consistent handling).
|
|
127
|
+
*/
|
|
128
|
+
export declare function normalizeScopeValues(values: ScopeValues): Record<string, string[]>;
|
|
129
|
+
/**
|
|
130
|
+
* Get all scope variable names from a set of patterns.
|
|
131
|
+
*/
|
|
132
|
+
export declare function getAllScopeVars(patterns: ScopePattern[]): string[];
|
|
65
133
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scopes/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scopes/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CACzC,YAAY,EACZ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA+D3E;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOpE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQ3D;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CAIhE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,YAAY,CAcd;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,CAQzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAYrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,WAAW,GACxB,OAAO,CAaT;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAM1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAQlE"}
|
package/dist/scopes/index.js
CHANGED
|
@@ -20,6 +20,29 @@ function extractPlaceholder(pattern) {
|
|
|
20
20
|
suffix: match[3],
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Match a scope string against a pattern and extract the value.
|
|
25
|
+
*/
|
|
26
|
+
function matchScopePattern(pattern, scopeKey) {
|
|
27
|
+
const parsed = extractPlaceholder(pattern);
|
|
28
|
+
if (!parsed) {
|
|
29
|
+
// No placeholder - exact match
|
|
30
|
+
return pattern === scopeKey ? '' : null;
|
|
31
|
+
}
|
|
32
|
+
const { prefix, suffix } = parsed;
|
|
33
|
+
if (!scopeKey.startsWith(prefix)) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
if (suffix && !scopeKey.endsWith(suffix)) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const valueStart = prefix.length;
|
|
40
|
+
const valueEnd = suffix ? scopeKey.length - suffix.length : scopeKey.length;
|
|
41
|
+
if (valueStart >= valueEnd) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return scopeKey.slice(valueStart, valueEnd);
|
|
45
|
+
}
|
|
23
46
|
/**
|
|
24
47
|
* Extract the placeholder name from a pattern.
|
|
25
48
|
*/
|
|
@@ -27,6 +50,26 @@ function getPlaceholderName(pattern) {
|
|
|
27
50
|
const parsed = extractPlaceholder(pattern);
|
|
28
51
|
return parsed?.placeholder ?? null;
|
|
29
52
|
}
|
|
53
|
+
// ── Pattern operations (public) ──────────────────────────────────────
|
|
54
|
+
/**
|
|
55
|
+
* Build a scope string from a pattern and value.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* buildScopeKey('user:{user_id}', '123') // 'user:123'
|
|
59
|
+
*/
|
|
60
|
+
export function buildScopeKey(pattern, value) {
|
|
61
|
+
const parsed = extractPlaceholder(pattern);
|
|
62
|
+
if (!parsed) {
|
|
63
|
+
return pattern;
|
|
64
|
+
}
|
|
65
|
+
return `${parsed.prefix}${value}${parsed.suffix}`;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if a scope string matches a pattern.
|
|
69
|
+
*/
|
|
70
|
+
export function scopeKeyMatchesPattern(pattern, scopeKey) {
|
|
71
|
+
return matchScopePattern(pattern, scopeKey) !== null;
|
|
72
|
+
}
|
|
30
73
|
/**
|
|
31
74
|
* Normalize scope definitions to a pattern-to-column map.
|
|
32
75
|
*
|
|
@@ -50,6 +93,18 @@ export function normalizeScopes(scopes) {
|
|
|
50
93
|
}
|
|
51
94
|
return result;
|
|
52
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Find the matching pattern and extract value from a scope string.
|
|
98
|
+
*/
|
|
99
|
+
export function findMatchingPattern(patterns, scopeKey) {
|
|
100
|
+
for (const [pattern, column] of Object.entries(patterns)) {
|
|
101
|
+
const value = matchScopePattern(pattern, scopeKey);
|
|
102
|
+
if (value !== null) {
|
|
103
|
+
return { pattern, column, value };
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
53
108
|
// ── Value operations (public) ────────────────────────────────────────
|
|
54
109
|
/**
|
|
55
110
|
* Extract variable names from a scope pattern.
|
|
@@ -64,4 +119,103 @@ export function extractScopeVars(pattern) {
|
|
|
64
119
|
return [];
|
|
65
120
|
return matches.map((m) => m.slice(1, -1));
|
|
66
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Build scope values from a row based on a scope pattern.
|
|
124
|
+
* Uses the pattern's variable names to extract values from the row.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* buildScopeValuesFromRow('project:{project_id}', { id: '1', project_id: 'P1' })
|
|
128
|
+
* // { project_id: 'P1' }
|
|
129
|
+
*/
|
|
130
|
+
export function buildScopeValuesFromRow(pattern, row) {
|
|
131
|
+
const vars = extractScopeVars(pattern);
|
|
132
|
+
const result = {};
|
|
133
|
+
for (const varName of vars) {
|
|
134
|
+
const value = row[varName];
|
|
135
|
+
if (value === null || value === undefined) {
|
|
136
|
+
result[varName] = '';
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
result[varName] = String(value);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Merge multiple scope value objects into one.
|
|
146
|
+
* Later values override earlier ones.
|
|
147
|
+
*/
|
|
148
|
+
export function mergeScopeValues(...sources) {
|
|
149
|
+
const result = {};
|
|
150
|
+
for (const source of sources) {
|
|
151
|
+
for (const [key, value] of Object.entries(source)) {
|
|
152
|
+
result[key] = value;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Check if two stored scopes are equal.
|
|
159
|
+
*/
|
|
160
|
+
export function scopesEqual(a, b) {
|
|
161
|
+
const keysA = Object.keys(a).sort();
|
|
162
|
+
const keysB = Object.keys(b).sort();
|
|
163
|
+
if (keysA.length !== keysB.length)
|
|
164
|
+
return false;
|
|
165
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
166
|
+
if (keysA[i] !== keysB[i])
|
|
167
|
+
return false;
|
|
168
|
+
if (a[keysA[i]] !== b[keysB[i]])
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Check if stored scopes match a subscription's scope values.
|
|
175
|
+
* Handles array values in subscription (OR semantics).
|
|
176
|
+
* Missing keys in subscription are treated as wildcards (match any).
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* scopesMatchSubscription({ project_id: 'P1' }, { project_id: 'P1' }) // true
|
|
180
|
+
* scopesMatchSubscription({ project_id: 'P1' }, { project_id: ['P1', 'P2'] }) // true
|
|
181
|
+
* scopesMatchSubscription({ project_id: 'P1' }, { project_id: 'P2' }) // false
|
|
182
|
+
*/
|
|
183
|
+
export function scopesMatchSubscription(stored, subscription) {
|
|
184
|
+
for (const [key, subValue] of Object.entries(subscription)) {
|
|
185
|
+
const storedValue = stored[key];
|
|
186
|
+
if (storedValue === undefined)
|
|
187
|
+
return false;
|
|
188
|
+
if (Array.isArray(subValue)) {
|
|
189
|
+
if (!subValue.includes(storedValue))
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
if (storedValue !== subValue)
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Normalize scope values to always use arrays (for consistent handling).
|
|
201
|
+
*/
|
|
202
|
+
export function normalizeScopeValues(values) {
|
|
203
|
+
const result = {};
|
|
204
|
+
for (const [key, value] of Object.entries(values)) {
|
|
205
|
+
result[key] = Array.isArray(value) ? value : [value];
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get all scope variable names from a set of patterns.
|
|
211
|
+
*/
|
|
212
|
+
export function getAllScopeVars(patterns) {
|
|
213
|
+
const vars = new Set();
|
|
214
|
+
for (const pattern of patterns) {
|
|
215
|
+
for (const v of extractScopeVars(pattern)) {
|
|
216
|
+
vars.add(v);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return Array.from(vars);
|
|
220
|
+
}
|
|
67
221
|
//# sourceMappingURL=index.js.map
|
package/dist/scopes/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scopes/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scopes/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Non-protocol types: conflict detection, transport interfaces.
|
|
5
5
|
* Protocol types (SyncOp, SyncPushRequest, etc.) live in ./schemas/sync.ts
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { SyncPullRequest, SyncPullResponse, SyncPushRequest, SyncPushResponse } from './schemas/sync';
|
|
8
8
|
/**
|
|
9
9
|
* Result of a conflict check - no conflict
|
|
10
10
|
*/
|
|
@@ -102,11 +102,17 @@ export interface SyncTransportBlobs {
|
|
|
102
102
|
*/
|
|
103
103
|
export interface SyncTransport {
|
|
104
104
|
/**
|
|
105
|
-
*
|
|
105
|
+
* Pull commits/snapshots from the server.
|
|
106
106
|
*/
|
|
107
|
-
|
|
107
|
+
pull(request: SyncPullRequest, options?: SyncTransportOptions): Promise<SyncPullResponse>;
|
|
108
|
+
/**
|
|
109
|
+
* Push a client commit to the server.
|
|
110
|
+
*/
|
|
111
|
+
push(request: SyncPushRequest, options?: SyncTransportOptions): Promise<SyncPushResponse>;
|
|
108
112
|
/**
|
|
109
113
|
* Download an encoded bootstrap snapshot chunk.
|
|
114
|
+
*
|
|
115
|
+
* The server must validate auth for the chunk.
|
|
110
116
|
*/
|
|
111
117
|
fetchSnapshotChunk(request: {
|
|
112
118
|
chunkId: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2JH;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAGzB,MAAM;IACN,IAAI;IAHtB,YACE,OAAe,EACC,MAAe,EACf,IAAa,EAC7B;QACA,KAAK,CAAC,OAAO,CAAC,CAAC;sBAHC,MAAM;oBACN,IAAI;QAGpB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAAA,CAClC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,25 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncular/core",
|
|
3
|
-
"version": "0.0.1
|
|
4
|
-
"description": "Core protocol types and shared utilities for the Syncular sync framework",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"author": "Benjamin Kniffler",
|
|
7
|
-
"homepage": "https://syncular.dev",
|
|
8
|
-
"repository": {
|
|
9
|
-
"type": "git",
|
|
10
|
-
"url": "https://github.com/syncular/syncular.git",
|
|
11
|
-
"directory": "packages/core"
|
|
12
|
-
},
|
|
13
|
-
"bugs": {
|
|
14
|
-
"url": "https://github.com/syncular/syncular/issues"
|
|
15
|
-
},
|
|
16
|
-
"keywords": [
|
|
17
|
-
"sync",
|
|
18
|
-
"offline-first",
|
|
19
|
-
"realtime",
|
|
20
|
-
"database",
|
|
21
|
-
"typescript"
|
|
22
|
-
],
|
|
3
|
+
"version": "0.0.1",
|
|
23
4
|
"private": false,
|
|
24
5
|
"publishConfig": {
|
|
25
6
|
"access": "public"
|
|
@@ -37,17 +18,17 @@
|
|
|
37
18
|
"scripts": {
|
|
38
19
|
"test": "bun test src/__tests__",
|
|
39
20
|
"tsgo": "tsgo --noEmit",
|
|
40
|
-
"build": "rm -rf dist && tsgo"
|
|
41
|
-
|
|
21
|
+
"build": "rm -rf dist && tsgo"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"zod": "^4.3.6"
|
|
42
25
|
},
|
|
43
26
|
"peerDependencies": {
|
|
44
|
-
"kysely": "^0.28.0"
|
|
45
|
-
"zod": "^4.0.0"
|
|
27
|
+
"kysely": "^0.28.0"
|
|
46
28
|
},
|
|
47
29
|
"devDependencies": {
|
|
48
|
-
"@syncular/config": "
|
|
49
|
-
"kysely": "*"
|
|
50
|
-
"zod": "*"
|
|
30
|
+
"@syncular/config": "workspace:*",
|
|
31
|
+
"kysely": "*"
|
|
51
32
|
},
|
|
52
33
|
"files": [
|
|
53
34
|
"dist",
|
package/src/blobs.ts
CHANGED
|
@@ -185,3 +185,17 @@ export function parseBlobHash(hash: string): string | null {
|
|
|
185
185
|
export function createBlobHash(hexHash: string): string {
|
|
186
186
|
return `sha256:${hexHash.toLowerCase()}`;
|
|
187
187
|
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Check if a value looks like a BlobRef.
|
|
191
|
+
*/
|
|
192
|
+
export function isBlobRef(value: unknown): value is BlobRef {
|
|
193
|
+
if (typeof value !== 'object' || value === null) return false;
|
|
194
|
+
const obj = value as Record<string, unknown>;
|
|
195
|
+
return (
|
|
196
|
+
typeof obj.hash === 'string' &&
|
|
197
|
+
obj.hash.startsWith('sha256:') &&
|
|
198
|
+
typeof obj.size === 'number' &&
|
|
199
|
+
typeof obj.mimeType === 'string'
|
|
200
|
+
);
|
|
201
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -11,20 +11,54 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
// Blob transport/storage types and utilities (protocol types come from ./schemas)
|
|
14
|
-
export
|
|
14
|
+
export type {
|
|
15
|
+
BlobSignDownloadOptions,
|
|
16
|
+
BlobSignedUpload,
|
|
17
|
+
BlobSignUploadOptions,
|
|
18
|
+
BlobStorageAdapter,
|
|
19
|
+
BlobTransport,
|
|
20
|
+
} from './blobs';
|
|
21
|
+
export {
|
|
22
|
+
createBlobHash,
|
|
23
|
+
createBlobRef,
|
|
24
|
+
parseBlobHash,
|
|
25
|
+
} from './blobs';
|
|
15
26
|
// Conflict detection utilities
|
|
16
|
-
export * from './conflict';
|
|
17
27
|
// Kysely plugin utilities
|
|
18
|
-
export
|
|
28
|
+
export { SerializePlugin } from './kysely-serialize';
|
|
19
29
|
// Logging utilities
|
|
20
|
-
export
|
|
30
|
+
export {
|
|
31
|
+
createSyncTimer,
|
|
32
|
+
logSyncEvent,
|
|
33
|
+
} from './logger';
|
|
21
34
|
// Proxy protocol types
|
|
22
|
-
export
|
|
35
|
+
export type {
|
|
36
|
+
ProxyHandshake,
|
|
37
|
+
ProxyHandshakeAck,
|
|
38
|
+
ProxyMessage,
|
|
39
|
+
ProxyResponse,
|
|
40
|
+
} from './proxy';
|
|
23
41
|
// Schemas (Zod)
|
|
24
42
|
export * from './schemas';
|
|
25
43
|
// Scope types, patterns, and utilities
|
|
26
|
-
export
|
|
44
|
+
export type {
|
|
45
|
+
ScopeDefinition,
|
|
46
|
+
ScopePattern,
|
|
47
|
+
ScopeValues,
|
|
48
|
+
StoredScopes,
|
|
49
|
+
} from './scopes';
|
|
50
|
+
export { extractScopeVars, normalizeScopes } from './scopes';
|
|
27
51
|
// Data transformation hooks
|
|
28
52
|
export * from './transforms';
|
|
53
|
+
|
|
29
54
|
// Transport and conflict types (protocol types come from ./schemas)
|
|
30
|
-
export
|
|
55
|
+
export type {
|
|
56
|
+
ConflictCheckResult,
|
|
57
|
+
MergeResult,
|
|
58
|
+
MergeResultConflict,
|
|
59
|
+
MergeResultOk,
|
|
60
|
+
SyncTransport,
|
|
61
|
+
SyncTransportBlobs,
|
|
62
|
+
SyncTransportOptions,
|
|
63
|
+
} from './types';
|
|
64
|
+
export { SyncTransportError } from './types';
|
package/src/kysely-serialize.ts
CHANGED
|
@@ -196,7 +196,7 @@ class BaseSerializePlugin implements KyselyPlugin {
|
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
interface SerializePluginOptions {
|
|
199
|
+
export interface SerializePluginOptions {
|
|
200
200
|
serializer?: Serializer;
|
|
201
201
|
deserializer?: Deserializer;
|
|
202
202
|
skipNodeKind?: Array<RootOperationNode['kind']>;
|
package/src/logger.ts
CHANGED
|
@@ -78,3 +78,19 @@ export function createSyncTimer(): () => number {
|
|
|
78
78
|
const start = performance.now();
|
|
79
79
|
return () => Math.round(performance.now() - start);
|
|
80
80
|
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Create a scoped logger that automatically adds context to all events.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* const log = createScopedLogger({ userId: 'user123', shape: 'teams' });
|
|
87
|
+
* log({ event: 'pull_start' }); // Includes userId and shape
|
|
88
|
+
*/
|
|
89
|
+
export function createScopedLogger(
|
|
90
|
+
context: Record<string, unknown>,
|
|
91
|
+
baseLogger: SyncLogger = logSyncEvent
|
|
92
|
+
): SyncLogger {
|
|
93
|
+
return (event: SyncLogEvent) => {
|
|
94
|
+
baseLogger({ ...context, ...event });
|
|
95
|
+
};
|
|
96
|
+
}
|
package/src/proxy/types.ts
CHANGED
|
@@ -34,6 +34,16 @@ export interface ProxyResponse {
|
|
|
34
34
|
error?: string;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Options for establishing a proxy connection.
|
|
39
|
+
*/
|
|
40
|
+
export interface ProxyConnectOptions {
|
|
41
|
+
/** Actor ID for oplog tracking */
|
|
42
|
+
actorId: string;
|
|
43
|
+
/** Client ID for oplog tracking */
|
|
44
|
+
clientId: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
37
47
|
/**
|
|
38
48
|
* Handshake message sent when connection is established.
|
|
39
49
|
*/
|
package/src/schemas/sync.ts
CHANGED
|
@@ -200,23 +200,3 @@ export const SyncPullResponseSchema = z.object({
|
|
|
200
200
|
});
|
|
201
201
|
|
|
202
202
|
export type SyncPullResponse = z.infer<typeof SyncPullResponseSchema>;
|
|
203
|
-
|
|
204
|
-
// ============================================================================
|
|
205
|
-
// Combined Sync Request/Response Schemas
|
|
206
|
-
// ============================================================================
|
|
207
|
-
|
|
208
|
-
export const SyncCombinedRequestSchema = z.object({
|
|
209
|
-
clientId: z.string().min(1),
|
|
210
|
-
push: SyncPushRequestSchema.omit({ clientId: true }).optional(),
|
|
211
|
-
pull: SyncPullRequestSchema.omit({ clientId: true }).optional(),
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
export type SyncCombinedRequest = z.infer<typeof SyncCombinedRequestSchema>;
|
|
215
|
-
|
|
216
|
-
export const SyncCombinedResponseSchema = z.object({
|
|
217
|
-
ok: z.literal(true),
|
|
218
|
-
push: SyncPushResponseSchema.optional(),
|
|
219
|
-
pull: SyncPullResponseSchema.optional(),
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
export type SyncCombinedResponse = z.infer<typeof SyncCombinedResponseSchema>;
|
package/src/scopes/index.ts
CHANGED
|
@@ -33,6 +33,22 @@ export type ScopeValues = Record<string, string | string[]>;
|
|
|
33
33
|
*/
|
|
34
34
|
export type StoredScopes = Record<string, string>;
|
|
35
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Definition of shared scopes across server and client.
|
|
38
|
+
* Maps scope patterns to their variable types.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* type SharedScopes = {
|
|
42
|
+
* 'user:{user_id}': { user_id: string };
|
|
43
|
+
* 'project:{project_id}': { project_id: string };
|
|
44
|
+
* 'event_date:{year}:{month}': { year: string; month: string };
|
|
45
|
+
* };
|
|
46
|
+
*/
|
|
47
|
+
export type SharedScopesDefinition = Record<
|
|
48
|
+
ScopePattern,
|
|
49
|
+
Record<string, string>
|
|
50
|
+
>;
|
|
51
|
+
|
|
36
52
|
/**
|
|
37
53
|
* Simplified scope definition.
|
|
38
54
|
* Can be a simple pattern string or an object with explicit column mapping.
|
|
@@ -71,6 +87,36 @@ function extractPlaceholder(pattern: string): {
|
|
|
71
87
|
};
|
|
72
88
|
}
|
|
73
89
|
|
|
90
|
+
/**
|
|
91
|
+
* Match a scope string against a pattern and extract the value.
|
|
92
|
+
*/
|
|
93
|
+
function matchScopePattern(pattern: string, scopeKey: string): string | null {
|
|
94
|
+
const parsed = extractPlaceholder(pattern);
|
|
95
|
+
if (!parsed) {
|
|
96
|
+
// No placeholder - exact match
|
|
97
|
+
return pattern === scopeKey ? '' : null;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const { prefix, suffix } = parsed;
|
|
101
|
+
|
|
102
|
+
if (!scopeKey.startsWith(prefix)) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (suffix && !scopeKey.endsWith(suffix)) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const valueStart = prefix.length;
|
|
111
|
+
const valueEnd = suffix ? scopeKey.length - suffix.length : scopeKey.length;
|
|
112
|
+
|
|
113
|
+
if (valueStart >= valueEnd) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return scopeKey.slice(valueStart, valueEnd);
|
|
118
|
+
}
|
|
119
|
+
|
|
74
120
|
/**
|
|
75
121
|
* Extract the placeholder name from a pattern.
|
|
76
122
|
*/
|
|
@@ -79,6 +125,33 @@ function getPlaceholderName(pattern: string): string | null {
|
|
|
79
125
|
return parsed?.placeholder ?? null;
|
|
80
126
|
}
|
|
81
127
|
|
|
128
|
+
// ── Pattern operations (public) ──────────────────────────────────────
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Build a scope string from a pattern and value.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* buildScopeKey('user:{user_id}', '123') // 'user:123'
|
|
135
|
+
*/
|
|
136
|
+
export function buildScopeKey(pattern: string, value: string): string {
|
|
137
|
+
const parsed = extractPlaceholder(pattern);
|
|
138
|
+
if (!parsed) {
|
|
139
|
+
return pattern;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return `${parsed.prefix}${value}${parsed.suffix}`;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Check if a scope string matches a pattern.
|
|
147
|
+
*/
|
|
148
|
+
export function scopeKeyMatchesPattern(
|
|
149
|
+
pattern: string,
|
|
150
|
+
scopeKey: string
|
|
151
|
+
): boolean {
|
|
152
|
+
return matchScopePattern(pattern, scopeKey) !== null;
|
|
153
|
+
}
|
|
154
|
+
|
|
82
155
|
/**
|
|
83
156
|
* Normalize scope definitions to a pattern-to-column map.
|
|
84
157
|
*
|
|
@@ -106,6 +179,22 @@ export function normalizeScopes(
|
|
|
106
179
|
return result;
|
|
107
180
|
}
|
|
108
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Find the matching pattern and extract value from a scope string.
|
|
184
|
+
*/
|
|
185
|
+
export function findMatchingPattern(
|
|
186
|
+
patterns: Record<string, string>,
|
|
187
|
+
scopeKey: string
|
|
188
|
+
): { pattern: string; column: string; value: string } | null {
|
|
189
|
+
for (const [pattern, column] of Object.entries(patterns)) {
|
|
190
|
+
const value = matchScopePattern(pattern, scopeKey);
|
|
191
|
+
if (value !== null) {
|
|
192
|
+
return { pattern, column, value };
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
|
|
109
198
|
// ── Value operations (public) ────────────────────────────────────────
|
|
110
199
|
|
|
111
200
|
/**
|
|
@@ -120,3 +209,115 @@ export function extractScopeVars(pattern: ScopePattern): string[] {
|
|
|
120
209
|
if (!matches) return [];
|
|
121
210
|
return matches.map((m) => m.slice(1, -1));
|
|
122
211
|
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Build scope values from a row based on a scope pattern.
|
|
215
|
+
* Uses the pattern's variable names to extract values from the row.
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* buildScopeValuesFromRow('project:{project_id}', { id: '1', project_id: 'P1' })
|
|
219
|
+
* // { project_id: 'P1' }
|
|
220
|
+
*/
|
|
221
|
+
export function buildScopeValuesFromRow(
|
|
222
|
+
pattern: ScopePattern,
|
|
223
|
+
row: Record<string, unknown>
|
|
224
|
+
): StoredScopes {
|
|
225
|
+
const vars = extractScopeVars(pattern);
|
|
226
|
+
const result: StoredScopes = {};
|
|
227
|
+
|
|
228
|
+
for (const varName of vars) {
|
|
229
|
+
const value = row[varName];
|
|
230
|
+
if (value === null || value === undefined) {
|
|
231
|
+
result[varName] = '';
|
|
232
|
+
} else {
|
|
233
|
+
result[varName] = String(value);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return result;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Merge multiple scope value objects into one.
|
|
242
|
+
* Later values override earlier ones.
|
|
243
|
+
*/
|
|
244
|
+
export function mergeScopeValues(...sources: StoredScopes[]): StoredScopes {
|
|
245
|
+
const result: StoredScopes = {};
|
|
246
|
+
for (const source of sources) {
|
|
247
|
+
for (const [key, value] of Object.entries(source)) {
|
|
248
|
+
result[key] = value;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return result;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Check if two stored scopes are equal.
|
|
256
|
+
*/
|
|
257
|
+
export function scopesEqual(a: StoredScopes, b: StoredScopes): boolean {
|
|
258
|
+
const keysA = Object.keys(a).sort();
|
|
259
|
+
const keysB = Object.keys(b).sort();
|
|
260
|
+
|
|
261
|
+
if (keysA.length !== keysB.length) return false;
|
|
262
|
+
|
|
263
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
264
|
+
if (keysA[i] !== keysB[i]) return false;
|
|
265
|
+
if (a[keysA[i]!] !== b[keysB[i]!]) return false;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Check if stored scopes match a subscription's scope values.
|
|
273
|
+
* Handles array values in subscription (OR semantics).
|
|
274
|
+
* Missing keys in subscription are treated as wildcards (match any).
|
|
275
|
+
*
|
|
276
|
+
* @example
|
|
277
|
+
* scopesMatchSubscription({ project_id: 'P1' }, { project_id: 'P1' }) // true
|
|
278
|
+
* scopesMatchSubscription({ project_id: 'P1' }, { project_id: ['P1', 'P2'] }) // true
|
|
279
|
+
* scopesMatchSubscription({ project_id: 'P1' }, { project_id: 'P2' }) // false
|
|
280
|
+
*/
|
|
281
|
+
export function scopesMatchSubscription(
|
|
282
|
+
stored: StoredScopes,
|
|
283
|
+
subscription: ScopeValues
|
|
284
|
+
): boolean {
|
|
285
|
+
for (const [key, subValue] of Object.entries(subscription)) {
|
|
286
|
+
const storedValue = stored[key];
|
|
287
|
+
if (storedValue === undefined) return false;
|
|
288
|
+
|
|
289
|
+
if (Array.isArray(subValue)) {
|
|
290
|
+
if (!subValue.includes(storedValue)) return false;
|
|
291
|
+
} else {
|
|
292
|
+
if (storedValue !== subValue) return false;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Normalize scope values to always use arrays (for consistent handling).
|
|
301
|
+
*/
|
|
302
|
+
export function normalizeScopeValues(
|
|
303
|
+
values: ScopeValues
|
|
304
|
+
): Record<string, string[]> {
|
|
305
|
+
const result: Record<string, string[]> = {};
|
|
306
|
+
for (const [key, value] of Object.entries(values)) {
|
|
307
|
+
result[key] = Array.isArray(value) ? value : [value];
|
|
308
|
+
}
|
|
309
|
+
return result;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Get all scope variable names from a set of patterns.
|
|
314
|
+
*/
|
|
315
|
+
export function getAllScopeVars(patterns: ScopePattern[]): string[] {
|
|
316
|
+
const vars = new Set<string>();
|
|
317
|
+
for (const pattern of patterns) {
|
|
318
|
+
for (const v of extractScopeVars(pattern)) {
|
|
319
|
+
vars.add(v);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return Array.from(vars);
|
|
323
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
* Protocol types (SyncOp, SyncPushRequest, etc.) live in ./schemas/sync.ts
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
SyncPullRequest,
|
|
10
|
+
SyncPullResponse,
|
|
11
|
+
SyncPushRequest,
|
|
12
|
+
SyncPushResponse,
|
|
13
|
+
} from './schemas/sync';
|
|
9
14
|
|
|
10
15
|
// ============================================================================
|
|
11
16
|
// Conflict Detection Types
|
|
@@ -121,15 +126,25 @@ export interface SyncTransportBlobs {
|
|
|
121
126
|
*/
|
|
122
127
|
export interface SyncTransport {
|
|
123
128
|
/**
|
|
124
|
-
*
|
|
129
|
+
* Pull commits/snapshots from the server.
|
|
125
130
|
*/
|
|
126
|
-
|
|
127
|
-
request:
|
|
131
|
+
pull(
|
|
132
|
+
request: SyncPullRequest,
|
|
128
133
|
options?: SyncTransportOptions
|
|
129
|
-
): Promise<
|
|
134
|
+
): Promise<SyncPullResponse>;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Push a client commit to the server.
|
|
138
|
+
*/
|
|
139
|
+
push(
|
|
140
|
+
request: SyncPushRequest,
|
|
141
|
+
options?: SyncTransportOptions
|
|
142
|
+
): Promise<SyncPushResponse>;
|
|
130
143
|
|
|
131
144
|
/**
|
|
132
145
|
* Download an encoded bootstrap snapshot chunk.
|
|
146
|
+
*
|
|
147
|
+
* The server must validate auth for the chunk.
|
|
133
148
|
*/
|
|
134
149
|
fetchSnapshotChunk(
|
|
135
150
|
request: { chunkId: string },
|