lakesync 0.1.6 → 0.1.8
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/adapter.d.ts +185 -20
- package/dist/adapter.js +13 -3
- package/dist/analyst.js +2 -2
- package/dist/{base-poller-BpUyuG2R.d.ts → base-poller-Bj9kX9dv.d.ts} +76 -19
- package/dist/catalogue.d.ts +1 -1
- package/dist/catalogue.js +3 -3
- package/dist/chunk-DGUM43GV.js +11 -0
- package/dist/{chunk-IRJ4QRWV.js → chunk-JI4C4R5H.js} +249 -140
- package/dist/chunk-JI4C4R5H.js.map +1 -0
- package/dist/{chunk-FHVTUKXL.js → chunk-KVSWLIJR.js} +2 -2
- package/dist/{chunk-P3FT7QCW.js → chunk-LDFFCG2K.js} +377 -247
- package/dist/chunk-LDFFCG2K.js.map +1 -0
- package/dist/{chunk-GUJWMK5P.js → chunk-LPWXOYNS.js} +373 -350
- package/dist/chunk-LPWXOYNS.js.map +1 -0
- package/dist/{chunk-QMS7TGFL.js → chunk-PYRS74YP.js} +15 -4
- package/dist/{chunk-QMS7TGFL.js.map → chunk-PYRS74YP.js.map} +1 -1
- package/dist/{chunk-NCZYFZ3B.js → chunk-QNITY4F6.js} +30 -7
- package/dist/{chunk-NCZYFZ3B.js.map → chunk-QNITY4F6.js.map} +1 -1
- package/dist/{chunk-SF7Y6ZUA.js → chunk-SSICS5KI.js} +2 -2
- package/dist/{chunk-UAUQGP3B.js → chunk-TMLG32QV.js} +2 -2
- package/dist/client.d.ts +164 -13
- package/dist/client.js +310 -163
- package/dist/client.js.map +1 -1
- package/dist/compactor.d.ts +1 -1
- package/dist/compactor.js +4 -4
- package/dist/connector-jira.d.ts +2 -2
- package/dist/connector-jira.js +3 -3
- package/dist/connector-salesforce.d.ts +2 -2
- package/dist/connector-salesforce.js +3 -3
- package/dist/{coordinator-D32a5rNk.d.ts → coordinator-NXy6tA0h.d.ts} +23 -16
- package/dist/{db-types-BlN-4KbQ.d.ts → db-types-CfLMUBfW.d.ts} +1 -1
- package/dist/gateway-server.d.ts +158 -64
- package/dist/gateway-server.js +482 -4003
- package/dist/gateway-server.js.map +1 -1
- package/dist/gateway.d.ts +61 -104
- package/dist/gateway.js +12 -6
- package/dist/index.d.ts +45 -10
- package/dist/index.js +14 -2
- package/dist/parquet.d.ts +1 -1
- package/dist/parquet.js +3 -3
- package/dist/proto.d.ts +1 -1
- package/dist/proto.js +3 -3
- package/dist/react.d.ts +47 -10
- package/dist/react.js +88 -40
- package/dist/react.js.map +1 -1
- package/dist/{registry-CPTgO9jv.d.ts → registry-BcspAtZI.d.ts} +19 -4
- package/dist/{gateway-Bpvatd9n.d.ts → request-handler-pUvL7ozF.d.ts} +139 -10
- package/dist/{resolver-CbuXm3nB.d.ts → resolver-CXxmC0jR.d.ts} +1 -1
- package/dist/{src-FPJQYQNA.js → src-B6NLV3FP.js} +4 -4
- package/dist/{src-RHKJFQKR.js → src-ROW4XLO7.js} +15 -3
- package/dist/{src-CLCALYDT.js → src-ZRHKG42A.js} +4 -4
- package/dist/{types-CLlD4XOy.d.ts → types-BdGBv2ba.d.ts} +17 -2
- package/dist/{types-D-E0VrfS.d.ts → types-BrcD1oJg.d.ts} +26 -19
- package/package.json +1 -1
- package/dist/chunk-7D4SUZUM.js +0 -38
- package/dist/chunk-GUJWMK5P.js.map +0 -1
- package/dist/chunk-IRJ4QRWV.js.map +0 -1
- package/dist/chunk-P3FT7QCW.js.map +0 -1
- /package/dist/{chunk-7D4SUZUM.js.map → chunk-DGUM43GV.js.map} +0 -0
- /package/dist/{chunk-FHVTUKXL.js.map → chunk-KVSWLIJR.js.map} +0 -0
- /package/dist/{chunk-SF7Y6ZUA.js.map → chunk-SSICS5KI.js.map} +0 -0
- /package/dist/{chunk-UAUQGP3B.js.map → chunk-TMLG32QV.js.map} +0 -0
- /package/dist/{src-CLCALYDT.js.map → src-B6NLV3FP.js.map} +0 -0
- /package/dist/{src-FPJQYQNA.js.map → src-ROW4XLO7.js.map} +0 -0
- /package/dist/{src-RHKJFQKR.js.map → src-ZRHKG42A.js.map} +0 -0
package/dist/react.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./chunk-
|
|
1
|
+
import "./chunk-DGUM43GV.js";
|
|
2
2
|
|
|
3
3
|
// ../react/src/context.ts
|
|
4
4
|
import {
|
|
@@ -10,7 +10,8 @@ import {
|
|
|
10
10
|
useMemo,
|
|
11
11
|
useState
|
|
12
12
|
} from "react";
|
|
13
|
-
var
|
|
13
|
+
var LakeSyncStableContext = createContext(null);
|
|
14
|
+
var LakeSyncDataContext = createContext(null);
|
|
14
15
|
function LakeSyncProvider(props) {
|
|
15
16
|
const { coordinator, children } = props;
|
|
16
17
|
const [dataVersion, setDataVersion] = useState(0);
|
|
@@ -26,35 +27,60 @@ function LakeSyncProvider(props) {
|
|
|
26
27
|
coordinator.off("onChange", handleChange);
|
|
27
28
|
};
|
|
28
29
|
}, [coordinator]);
|
|
29
|
-
const
|
|
30
|
+
const stableValue = useMemo(
|
|
30
31
|
() => ({
|
|
31
32
|
coordinator,
|
|
32
|
-
tracker: coordinator.tracker
|
|
33
|
+
tracker: coordinator.tracker
|
|
34
|
+
}),
|
|
35
|
+
[coordinator]
|
|
36
|
+
);
|
|
37
|
+
const dataValue = useMemo(
|
|
38
|
+
() => ({
|
|
33
39
|
dataVersion,
|
|
34
40
|
invalidate
|
|
35
41
|
}),
|
|
36
|
-
[
|
|
42
|
+
[dataVersion, invalidate]
|
|
43
|
+
);
|
|
44
|
+
return createElement(
|
|
45
|
+
LakeSyncStableContext.Provider,
|
|
46
|
+
{ value: stableValue },
|
|
47
|
+
createElement(LakeSyncDataContext.Provider, { value: dataValue }, children)
|
|
37
48
|
);
|
|
38
|
-
return createElement(LakeSyncContext.Provider, { value }, children);
|
|
39
49
|
}
|
|
40
|
-
function
|
|
41
|
-
const ctx = useContext(
|
|
50
|
+
function useLakeSyncStable() {
|
|
51
|
+
const ctx = useContext(LakeSyncStableContext);
|
|
42
52
|
if (!ctx) {
|
|
43
|
-
throw new Error("
|
|
53
|
+
throw new Error("useLakeSyncStable must be used within a <LakeSyncProvider>");
|
|
44
54
|
}
|
|
45
55
|
return ctx;
|
|
46
56
|
}
|
|
57
|
+
function useLakeSyncData() {
|
|
58
|
+
const ctx = useContext(LakeSyncDataContext);
|
|
59
|
+
if (!ctx) {
|
|
60
|
+
throw new Error("useLakeSyncData must be used within a <LakeSyncProvider>");
|
|
61
|
+
}
|
|
62
|
+
return ctx;
|
|
63
|
+
}
|
|
64
|
+
function useLakeSync() {
|
|
65
|
+
const stable = useLakeSyncStable();
|
|
66
|
+
const data = useLakeSyncData();
|
|
67
|
+
return { ...stable, ...data };
|
|
68
|
+
}
|
|
47
69
|
|
|
48
70
|
// ../react/src/use-action.ts
|
|
49
|
-
import { useCallback as useCallback2, useEffect as useEffect2, useState as useState2 } from "react";
|
|
71
|
+
import { useCallback as useCallback2, useEffect as useEffect2, useRef, useState as useState2 } from "react";
|
|
50
72
|
function useAction() {
|
|
51
|
-
const { coordinator } =
|
|
73
|
+
const { coordinator } = useLakeSyncStable();
|
|
52
74
|
const [lastResult, setLastResult] = useState2(null);
|
|
53
75
|
const [isPending, setIsPending] = useState2(false);
|
|
76
|
+
const waitingForCompletion = useRef(false);
|
|
54
77
|
useEffect2(() => {
|
|
55
78
|
const handleComplete = (_actionId, result) => {
|
|
56
|
-
|
|
57
|
-
|
|
79
|
+
if (waitingForCompletion.current) {
|
|
80
|
+
waitingForCompletion.current = false;
|
|
81
|
+
setLastResult(result);
|
|
82
|
+
setIsPending(false);
|
|
83
|
+
}
|
|
58
84
|
};
|
|
59
85
|
coordinator.on("onActionComplete", handleComplete);
|
|
60
86
|
return () => {
|
|
@@ -64,6 +90,8 @@ function useAction() {
|
|
|
64
90
|
const execute = useCallback2(
|
|
65
91
|
async (params) => {
|
|
66
92
|
setIsPending(true);
|
|
93
|
+
setLastResult(null);
|
|
94
|
+
waitingForCompletion.current = true;
|
|
67
95
|
await coordinator.executeAction(params);
|
|
68
96
|
},
|
|
69
97
|
[coordinator]
|
|
@@ -71,7 +99,7 @@ function useAction() {
|
|
|
71
99
|
return { execute, lastResult, isPending };
|
|
72
100
|
}
|
|
73
101
|
function useActionDiscovery() {
|
|
74
|
-
const { coordinator } =
|
|
102
|
+
const { coordinator } = useLakeSyncStable();
|
|
75
103
|
const [connectors, setConnectors] = useState2({});
|
|
76
104
|
const [isLoading, setIsLoading] = useState2(true);
|
|
77
105
|
const [error, setError] = useState2(null);
|
|
@@ -105,7 +133,7 @@ function useActionDiscovery() {
|
|
|
105
133
|
// ../react/src/use-connector-types.ts
|
|
106
134
|
import { useCallback as useCallback3, useEffect as useEffect3, useState as useState3 } from "react";
|
|
107
135
|
function useConnectorTypes() {
|
|
108
|
-
const { coordinator } =
|
|
136
|
+
const { coordinator } = useLakeSyncStable();
|
|
109
137
|
const [types, setTypes] = useState3([]);
|
|
110
138
|
const [isLoading, setIsLoading] = useState3(true);
|
|
111
139
|
const [error, setError] = useState3(null);
|
|
@@ -139,7 +167,8 @@ function useConnectorTypes() {
|
|
|
139
167
|
// ../react/src/use-mutation.ts
|
|
140
168
|
import { useCallback as useCallback4 } from "react";
|
|
141
169
|
function useMutation() {
|
|
142
|
-
const { tracker
|
|
170
|
+
const { tracker } = useLakeSyncStable();
|
|
171
|
+
const { invalidate } = useLakeSyncData();
|
|
143
172
|
const insert = useCallback4(
|
|
144
173
|
async (table, rowId, data) => {
|
|
145
174
|
const result = await tracker.insert(table, rowId, data);
|
|
@@ -168,15 +197,16 @@ function useMutation() {
|
|
|
168
197
|
}
|
|
169
198
|
|
|
170
199
|
// ../react/src/use-query.ts
|
|
171
|
-
import { useCallback as useCallback5, useEffect as useEffect4, useRef, useState as useState4 } from "react";
|
|
200
|
+
import { useCallback as useCallback5, useEffect as useEffect4, useRef as useRef2, useState as useState4 } from "react";
|
|
172
201
|
function useQuery(sql, params) {
|
|
173
|
-
const { tracker
|
|
202
|
+
const { tracker } = useLakeSyncStable();
|
|
203
|
+
const { dataVersion } = useLakeSyncData();
|
|
174
204
|
const [data, setData] = useState4([]);
|
|
175
205
|
const [error, setError] = useState4(null);
|
|
176
206
|
const [isLoading, setIsLoading] = useState4(true);
|
|
177
207
|
const [manualTrigger, setManualTrigger] = useState4(0);
|
|
178
208
|
const paramsKey = JSON.stringify(params ?? []);
|
|
179
|
-
const paramsRef =
|
|
209
|
+
const paramsRef = useRef2(params);
|
|
180
210
|
paramsRef.current = params;
|
|
181
211
|
const refetch = useCallback5(() => {
|
|
182
212
|
setManualTrigger((v) => v + 1);
|
|
@@ -207,44 +237,60 @@ function useQuery(sql, params) {
|
|
|
207
237
|
// ../react/src/use-sync-status.ts
|
|
208
238
|
import { useCallback as useCallback6, useEffect as useEffect5, useState as useState5 } from "react";
|
|
209
239
|
function useSyncStatus() {
|
|
210
|
-
const { coordinator
|
|
211
|
-
const [
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
240
|
+
const { coordinator } = useLakeSyncStable();
|
|
241
|
+
const [status, setStatus] = useState5({
|
|
242
|
+
isSyncing: false,
|
|
243
|
+
lastSyncTime: null,
|
|
244
|
+
queueDepth: 0,
|
|
245
|
+
error: null
|
|
246
|
+
});
|
|
247
|
+
const refreshStatus = useCallback6(async () => {
|
|
248
|
+
const state = coordinator.state;
|
|
216
249
|
const depth = await coordinator.queueDepth();
|
|
217
|
-
|
|
250
|
+
setStatus((prev) => ({
|
|
251
|
+
isSyncing: state.syncing,
|
|
252
|
+
lastSyncTime: state.lastSyncTime,
|
|
253
|
+
queueDepth: depth,
|
|
254
|
+
error: prev.error
|
|
255
|
+
}));
|
|
218
256
|
}, [coordinator]);
|
|
219
257
|
useEffect5(() => {
|
|
258
|
+
const handleSyncStart = () => {
|
|
259
|
+
setStatus((prev) => ({ ...prev, isSyncing: true }));
|
|
260
|
+
};
|
|
220
261
|
const handleSyncComplete = () => {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
262
|
+
const state = coordinator.state;
|
|
263
|
+
setStatus((prev) => ({
|
|
264
|
+
...prev,
|
|
265
|
+
isSyncing: false,
|
|
266
|
+
lastSyncTime: state.lastSyncTime,
|
|
267
|
+
error: null
|
|
268
|
+
}));
|
|
269
|
+
refreshStatus();
|
|
225
270
|
};
|
|
226
271
|
const handleError = (err) => {
|
|
227
|
-
|
|
228
|
-
|
|
272
|
+
setStatus((prev) => ({
|
|
273
|
+
...prev,
|
|
274
|
+
isSyncing: false,
|
|
275
|
+
error: err
|
|
276
|
+
}));
|
|
229
277
|
};
|
|
230
278
|
const handleChange = () => {
|
|
231
|
-
|
|
279
|
+
refreshStatus();
|
|
232
280
|
};
|
|
281
|
+
coordinator.on("onSyncStart", handleSyncStart);
|
|
233
282
|
coordinator.on("onSyncComplete", handleSyncComplete);
|
|
234
283
|
coordinator.on("onError", handleError);
|
|
235
284
|
coordinator.on("onChange", handleChange);
|
|
236
|
-
|
|
285
|
+
refreshStatus();
|
|
237
286
|
return () => {
|
|
287
|
+
coordinator.off("onSyncStart", handleSyncStart);
|
|
238
288
|
coordinator.off("onSyncComplete", handleSyncComplete);
|
|
239
289
|
coordinator.off("onError", handleError);
|
|
240
290
|
coordinator.off("onChange", handleChange);
|
|
241
291
|
};
|
|
242
|
-
}, [coordinator,
|
|
243
|
-
|
|
244
|
-
void dataVersion;
|
|
245
|
-
refreshQueueDepth();
|
|
246
|
-
}, [dataVersion, refreshQueueDepth]);
|
|
247
|
-
return { isSyncing, lastSyncTime, queueDepth, error };
|
|
292
|
+
}, [coordinator, refreshStatus]);
|
|
293
|
+
return status;
|
|
248
294
|
}
|
|
249
295
|
export {
|
|
250
296
|
LakeSyncProvider,
|
|
@@ -252,6 +298,8 @@ export {
|
|
|
252
298
|
useActionDiscovery,
|
|
253
299
|
useConnectorTypes,
|
|
254
300
|
useLakeSync,
|
|
301
|
+
useLakeSyncData,
|
|
302
|
+
useLakeSyncStable,
|
|
255
303
|
useMutation,
|
|
256
304
|
useQuery,
|
|
257
305
|
useSyncStatus
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../react/src/context.ts","../../react/src/use-action.ts","../../react/src/use-connector-types.ts","../../react/src/use-mutation.ts","../../react/src/use-query.ts","../../react/src/use-sync-status.ts"],"sourcesContent":["import type { SyncCoordinator, SyncTracker } from \"@lakesync/client\";\nimport {\n\tcreateContext,\n\tcreateElement,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from \"react\";\n\n/** Internal context value shared across all hooks. */\nexport interface LakeSyncContextValue {\n\tcoordinator: SyncCoordinator;\n\ttracker: SyncTracker;\n\t/** Monotonically increasing counter — bumped on every data change. */\n\tdataVersion: number;\n\t/** Increment dataVersion to trigger query re-runs. */\n\tinvalidate: () => void;\n}\n\nconst LakeSyncContext = createContext<LakeSyncContextValue | null>(null);\n\n/** Props for the LakeSyncProvider component. */\nexport interface LakeSyncProviderProps {\n\t/** An already-constructed SyncCoordinator instance. */\n\tcoordinator: SyncCoordinator;\n\tchildren: React.ReactNode;\n}\n\n/**\n * Provides LakeSync context to the component tree.\n *\n * Subscribes to `onChange` events from the coordinator and maintains a\n * `dataVersion` counter that increments on every remote delta application,\n * triggering reactive query re-runs in `useQuery`.\n */\nexport function LakeSyncProvider(props: LakeSyncProviderProps) {\n\tconst { coordinator, children } = props;\n\tconst [dataVersion, setDataVersion] = useState(0);\n\n\tconst invalidate = useCallback(() => {\n\t\tsetDataVersion((v) => v + 1);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst handleChange = () => {\n\t\t\tsetDataVersion((v) => v + 1);\n\t\t};\n\t\tcoordinator.on(\"onChange\", handleChange);\n\t\treturn () => {\n\t\t\tcoordinator.off(\"onChange\", handleChange);\n\t\t};\n\t}, [coordinator]);\n\n\tconst value = useMemo<LakeSyncContextValue>(\n\t\t() => ({\n\t\t\tcoordinator,\n\t\t\ttracker: coordinator.tracker,\n\t\t\tdataVersion,\n\t\t\tinvalidate,\n\t\t}),\n\t\t[coordinator, dataVersion, invalidate],\n\t);\n\n\treturn createElement(LakeSyncContext.Provider, { value }, children);\n}\n\n/**\n * Access the raw LakeSync SDK instances from context.\n *\n * @throws if called outside a `<LakeSyncProvider>`.\n */\nexport function useLakeSync(): LakeSyncContextValue {\n\tconst ctx = useContext(LakeSyncContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"useLakeSync must be used within a <LakeSyncProvider>\");\n\t}\n\treturn ctx;\n}\n","import type {\n\tActionDescriptor,\n\tActionErrorResult,\n\tActionResult,\n\tLakeSyncError,\n} from \"@lakesync/core\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useLakeSync } from \"./context\";\n\n/** Parameters for a single action execution. */\nexport interface ActionParams {\n\tconnector: string;\n\tactionType: string;\n\tparams: Record<string, unknown>;\n\tidempotencyKey?: string;\n}\n\n/** Return type of `useAction`. */\nexport interface UseActionResult {\n\t/** Execute an action against a connector via the gateway. */\n\texecute: (params: ActionParams) => Promise<void>;\n\t/** Last action result (success or error). Null before first execution. */\n\tlastResult: ActionResult | ActionErrorResult | null;\n\t/** Whether an action is currently in flight. */\n\tisPending: boolean;\n}\n\n/**\n * Execute imperative actions against external systems via the gateway.\n *\n * Wraps `SyncCoordinator.executeAction()` and subscribes to\n * `onActionComplete` events to track the latest result.\n *\n * ```ts\n * const { execute, lastResult, isPending } = useAction();\n *\n * await execute({\n * connector: \"slack\",\n * actionType: \"send_message\",\n * params: { channel: \"#general\", text: \"Hello\" },\n * });\n * ```\n */\nexport function useAction(): UseActionResult {\n\tconst { coordinator } = useLakeSync();\n\tconst [lastResult, setLastResult] = useState<ActionResult | ActionErrorResult | null>(null);\n\tconst [isPending, setIsPending] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst handleComplete = (_actionId: string, result: ActionResult | ActionErrorResult) => {\n\t\t\tsetLastResult(result);\n\t\t\tsetIsPending(false);\n\t\t};\n\n\t\tcoordinator.on(\"onActionComplete\", handleComplete);\n\t\treturn () => {\n\t\t\tcoordinator.off(\"onActionComplete\", handleComplete);\n\t\t};\n\t}, [coordinator]);\n\n\tconst execute = useCallback(\n\t\tasync (params: ActionParams): Promise<void> => {\n\t\t\tsetIsPending(true);\n\t\t\tawait coordinator.executeAction(params);\n\t\t},\n\t\t[coordinator],\n\t);\n\n\treturn { execute, lastResult, isPending };\n}\n\n/** Return type of `useActionDiscovery`. */\nexport interface UseActionDiscoveryResult {\n\t/** Map of connector name to supported action descriptors. */\n\tconnectors: Record<string, ActionDescriptor[]>;\n\t/** Whether discovery is loading. */\n\tisLoading: boolean;\n\t/** Error from the last fetch, or null. */\n\terror: LakeSyncError | null;\n\t/** Manually re-fetch available actions. */\n\trefetch: () => void;\n}\n\n/**\n * Discover available connectors and their supported action types.\n *\n * Calls `transport.describeActions()` on mount and returns the result\n * reactively. Use this to build dynamic UI based on available actions.\n *\n * ```ts\n * const { connectors, isLoading } = useActionDiscovery();\n *\n * for (const [name, actions] of Object.entries(connectors)) {\n * console.log(name, actions.map(a => a.actionType));\n * }\n * ```\n */\nexport function useActionDiscovery(): UseActionDiscoveryResult {\n\tconst { coordinator } = useLakeSync();\n\tconst [connectors, setConnectors] = useState<Record<string, ActionDescriptor[]>>({});\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [error, setError] = useState<LakeSyncError | null>(null);\n\tconst [trigger, setTrigger] = useState(0);\n\n\tconst refetch = useCallback(() => {\n\t\tsetTrigger((v) => v + 1);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tvoid trigger;\n\t\tlet cancelled = false;\n\n\t\tconst run = async () => {\n\t\t\tsetIsLoading(true);\n\t\t\tconst result = await coordinator.describeActions();\n\t\t\tif (cancelled) return;\n\n\t\t\tif (result.ok) {\n\t\t\t\tsetConnectors(result.value.connectors);\n\t\t\t\tsetError(null);\n\t\t\t} else {\n\t\t\t\tsetError(result.error);\n\t\t\t}\n\t\t\tsetIsLoading(false);\n\t\t};\n\n\t\trun();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [coordinator, trigger]);\n\n\treturn { connectors, isLoading, error, refetch };\n}\n","import type { ConnectorDescriptor, LakeSyncError } from \"@lakesync/core\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useLakeSync } from \"./context\";\n\n/** Return type of `useConnectorTypes`. */\nexport interface UseConnectorTypesResult {\n\t/** Array of available connector type descriptors. */\n\ttypes: ConnectorDescriptor[];\n\t/** Whether discovery is loading. */\n\tisLoading: boolean;\n\t/** Error from the last fetch, or null. */\n\terror: LakeSyncError | null;\n\t/** Manually re-fetch connector types. */\n\trefetch: () => void;\n}\n\n/**\n * Discover available connector types and their configuration schemas.\n *\n * Calls `coordinator.listConnectorTypes()` on mount and returns the\n * result reactively. Use this to build dynamic \"Add Connector\" forms.\n *\n * ```ts\n * const { types, isLoading } = useConnectorTypes();\n *\n * for (const t of types) {\n * console.log(t.displayName, t.configSchema);\n * }\n * ```\n */\nexport function useConnectorTypes(): UseConnectorTypesResult {\n\tconst { coordinator } = useLakeSync();\n\tconst [types, setTypes] = useState<ConnectorDescriptor[]>([]);\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [error, setError] = useState<LakeSyncError | null>(null);\n\tconst [trigger, setTrigger] = useState(0);\n\n\tconst refetch = useCallback(() => {\n\t\tsetTrigger((v) => v + 1);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tvoid trigger;\n\t\tlet cancelled = false;\n\n\t\tconst run = async () => {\n\t\t\tsetIsLoading(true);\n\t\t\tconst result = await coordinator.listConnectorTypes();\n\t\t\tif (cancelled) return;\n\n\t\t\tif (result.ok) {\n\t\t\t\tsetTypes(result.value);\n\t\t\t\tsetError(null);\n\t\t\t} else {\n\t\t\t\tsetError(result.error);\n\t\t\t}\n\t\t\tsetIsLoading(false);\n\t\t};\n\n\t\trun();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [coordinator, trigger]);\n\n\treturn { types, isLoading, error, refetch };\n}\n","import type { LakeSyncError, Result } from \"@lakesync/core\";\nimport { useCallback } from \"react\";\nimport { useLakeSync } from \"./context\";\n\n/** Return type of `useMutation`. */\nexport interface UseMutationResult {\n\tinsert: (\n\t\ttable: string,\n\t\trowId: string,\n\t\tdata: Record<string, unknown>,\n\t) => Promise<Result<void, LakeSyncError>>;\n\tupdate: (\n\t\ttable: string,\n\t\trowId: string,\n\t\tdata: Record<string, unknown>,\n\t) => Promise<Result<void, LakeSyncError>>;\n\tremove: (table: string, rowId: string) => Promise<Result<void, LakeSyncError>>;\n}\n\n/**\n * Wraps SyncTracker mutations with automatic query invalidation.\n *\n * After each successful mutation, `dataVersion` is incremented so all\n * active `useQuery` hooks re-run.\n */\nexport function useMutation(): UseMutationResult {\n\tconst { tracker, invalidate } = useLakeSync();\n\n\tconst insert = useCallback(\n\t\tasync (\n\t\t\ttable: string,\n\t\t\trowId: string,\n\t\t\tdata: Record<string, unknown>,\n\t\t): Promise<Result<void, LakeSyncError>> => {\n\t\t\tconst result = await tracker.insert(table, rowId, data);\n\t\t\tif (result.ok) invalidate();\n\t\t\treturn result;\n\t\t},\n\t\t[tracker, invalidate],\n\t);\n\n\tconst update = useCallback(\n\t\tasync (\n\t\t\ttable: string,\n\t\t\trowId: string,\n\t\t\tdata: Record<string, unknown>,\n\t\t): Promise<Result<void, LakeSyncError>> => {\n\t\t\tconst result = await tracker.update(table, rowId, data);\n\t\t\tif (result.ok) invalidate();\n\t\t\treturn result;\n\t\t},\n\t\t[tracker, invalidate],\n\t);\n\n\tconst remove = useCallback(\n\t\tasync (table: string, rowId: string): Promise<Result<void, LakeSyncError>> => {\n\t\t\tconst result = await tracker.delete(table, rowId);\n\t\t\tif (result.ok) invalidate();\n\t\t\treturn result;\n\t\t},\n\t\t[tracker, invalidate],\n\t);\n\n\treturn { insert, update, remove };\n}\n","import type { DbError } from \"@lakesync/client\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useLakeSync } from \"./context\";\n\n/** Return type of `useQuery`. */\nexport interface UseQueryResult<T> {\n\tdata: T[];\n\terror: DbError | null;\n\tisLoading: boolean;\n\trefetch: () => void;\n}\n\n/**\n * Reactive SQL query hook.\n *\n * Re-runs automatically when:\n * - Remote deltas are applied (via `onChange`)\n * - A local mutation completes (via `invalidate()`)\n * - The `sql` or `params` arguments change\n *\n * @param sql - SQL query string\n * @param params - Optional bind parameters\n */\nexport function useQuery<T>(sql: string, params?: unknown[]): UseQueryResult<T> {\n\tconst { tracker, dataVersion } = useLakeSync();\n\tconst [data, setData] = useState<T[]>([]);\n\tconst [error, setError] = useState<DbError | null>(null);\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [manualTrigger, setManualTrigger] = useState(0);\n\n\t// Stable serialisation of params for dependency comparison\n\tconst paramsKey = JSON.stringify(params ?? []);\n\tconst paramsRef = useRef(params);\n\tparamsRef.current = params;\n\n\tconst refetch = useCallback(() => {\n\t\tsetManualTrigger((v) => v + 1);\n\t}, []);\n\n\t// Combine all trigger values into a single version for the effect.\n\t// This satisfies exhaustive-deps: the effect reads `version` directly.\n\tconst version = `${dataVersion}:${manualTrigger}:${paramsKey}`;\n\n\tuseEffect(() => {\n\t\t// Read version to establish dependency\n\t\tvoid version;\n\t\tlet cancelled = false;\n\n\t\tconst run = async () => {\n\t\t\tconst result = await tracker.query<T>(sql, paramsRef.current);\n\t\t\tif (cancelled) return;\n\n\t\t\tif (result.ok) {\n\t\t\t\tsetData(result.value);\n\t\t\t\tsetError(null);\n\t\t\t} else {\n\t\t\t\tsetError(result.error);\n\t\t\t}\n\t\t\tsetIsLoading(false);\n\t\t};\n\n\t\trun();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [tracker, sql, version]);\n\n\treturn { data, error, isLoading, refetch };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useLakeSync } from \"./context\";\n\n/** Return type of `useSyncStatus`. */\nexport interface UseSyncStatusResult {\n\tisSyncing: boolean;\n\tlastSyncTime: Date | null;\n\tqueueDepth: number;\n\terror: Error | null;\n}\n\n/**\n * Observe the sync lifecycle.\n *\n * Tracks whether a sync is in progress, last successful sync time,\n * outbox queue depth, and the most recent sync error (cleared on success).\n */\nexport function useSyncStatus(): UseSyncStatusResult {\n\tconst { coordinator, dataVersion } = useLakeSync();\n\tconst [isSyncing, setIsSyncing] = useState(false);\n\tconst [lastSyncTime, setLastSyncTime] = useState<Date | null>(null);\n\tconst [queueDepth, setQueueDepth] = useState(0);\n\tconst [error, setError] = useState<Error | null>(null);\n\n\tconst refreshQueueDepth = useCallback(async () => {\n\t\tconst depth = await coordinator.queueDepth();\n\t\tsetQueueDepth(depth);\n\t}, [coordinator]);\n\n\tuseEffect(() => {\n\t\tconst handleSyncComplete = () => {\n\t\t\tsetIsSyncing(false);\n\t\t\tsetLastSyncTime(coordinator.lastSyncTime);\n\t\t\tsetError(null);\n\t\t\trefreshQueueDepth();\n\t\t};\n\n\t\tconst handleError = (err: Error) => {\n\t\t\tsetIsSyncing(false);\n\t\t\tsetError(err);\n\t\t};\n\n\t\tconst handleChange = () => {\n\t\t\trefreshQueueDepth();\n\t\t};\n\n\t\tcoordinator.on(\"onSyncComplete\", handleSyncComplete);\n\t\tcoordinator.on(\"onError\", handleError);\n\t\tcoordinator.on(\"onChange\", handleChange);\n\n\t\t// Initial queue depth\n\t\trefreshQueueDepth();\n\n\t\treturn () => {\n\t\t\tcoordinator.off(\"onSyncComplete\", handleSyncComplete);\n\t\t\tcoordinator.off(\"onError\", handleError);\n\t\t\tcoordinator.off(\"onChange\", handleChange);\n\t\t};\n\t}, [coordinator, refreshQueueDepth]);\n\n\t// Also refresh queue depth when dataVersion changes (local mutations)\n\tuseEffect(() => {\n\t\tvoid dataVersion;\n\t\trefreshQueueDepth();\n\t}, [dataVersion, refreshQueueDepth]);\n\n\treturn { isSyncing, lastSyncTime, queueDepth, error };\n}\n"],"mappings":"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","names":["useCallback","useEffect","useState","useState","useEffect","useCallback","useCallback","useEffect","useState","useState","useCallback","useEffect","useCallback","useCallback","useCallback","useEffect","useState","useState","useCallback","useEffect","useCallback","useEffect","useState","useState","useCallback","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../../react/src/context.ts","../../react/src/use-action.ts","../../react/src/use-connector-types.ts","../../react/src/use-mutation.ts","../../react/src/use-query.ts","../../react/src/use-sync-status.ts"],"sourcesContent":["import type { SyncCoordinator, SyncTracker } from \"@lakesync/client\";\nimport {\n\tcreateContext,\n\tcreateElement,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from \"react\";\n\n/** Stable context value — coordinator and tracker references that never change. */\nexport interface LakeSyncStableContextValue {\n\tcoordinator: SyncCoordinator;\n\ttracker: SyncTracker;\n}\n\n/** Reactive context value — data version that changes on every delta. */\nexport interface LakeSyncDataContextValue {\n\t/** Monotonically increasing counter — bumped on every data change. */\n\tdataVersion: number;\n\t/** Increment dataVersion to trigger query re-runs. */\n\tinvalidate: () => void;\n}\n\n/**\n * Combined context value for backwards compatibility.\n * @see useLakeSync\n */\nexport interface LakeSyncContextValue\n\textends LakeSyncStableContextValue,\n\t\tLakeSyncDataContextValue {}\n\nconst LakeSyncStableContext = createContext<LakeSyncStableContextValue | null>(null);\nconst LakeSyncDataContext = createContext<LakeSyncDataContextValue | null>(null);\n\n/** Props for the LakeSyncProvider component. */\nexport interface LakeSyncProviderProps {\n\t/** An already-constructed SyncCoordinator instance. */\n\tcoordinator: SyncCoordinator;\n\tchildren: React.ReactNode;\n}\n\n/**\n * Provides LakeSync context to the component tree.\n *\n * Subscribes to `onChange` events from the coordinator and maintains a\n * `dataVersion` counter that increments on every remote delta application,\n * triggering reactive query re-runs in `useQuery`.\n *\n * Uses a split context pattern: stable refs (coordinator, tracker) are\n * provided separately from reactive data (dataVersion) so that hooks\n * like `useSyncStatus` and `useAction` do not re-render on data changes.\n */\nexport function LakeSyncProvider(props: LakeSyncProviderProps) {\n\tconst { coordinator, children } = props;\n\tconst [dataVersion, setDataVersion] = useState(0);\n\n\tconst invalidate = useCallback(() => {\n\t\tsetDataVersion((v) => v + 1);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst handleChange = () => {\n\t\t\tsetDataVersion((v) => v + 1);\n\t\t};\n\t\tcoordinator.on(\"onChange\", handleChange);\n\t\treturn () => {\n\t\t\tcoordinator.off(\"onChange\", handleChange);\n\t\t};\n\t}, [coordinator]);\n\n\tconst stableValue = useMemo<LakeSyncStableContextValue>(\n\t\t() => ({\n\t\t\tcoordinator,\n\t\t\ttracker: coordinator.tracker,\n\t\t}),\n\t\t[coordinator],\n\t);\n\n\tconst dataValue = useMemo<LakeSyncDataContextValue>(\n\t\t() => ({\n\t\t\tdataVersion,\n\t\t\tinvalidate,\n\t\t}),\n\t\t[dataVersion, invalidate],\n\t);\n\n\treturn createElement(\n\t\tLakeSyncStableContext.Provider,\n\t\t{ value: stableValue },\n\t\tcreateElement(LakeSyncDataContext.Provider, { value: dataValue }, children),\n\t);\n}\n\n/**\n * Access the stable LakeSync SDK instances from context.\n *\n * This hook does NOT cause re-renders when dataVersion changes.\n * Use {@link useLakeSyncData} for reactive data.\n *\n * @throws if called outside a `<LakeSyncProvider>`.\n */\nexport function useLakeSyncStable(): LakeSyncStableContextValue {\n\tconst ctx = useContext(LakeSyncStableContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"useLakeSyncStable must be used within a <LakeSyncProvider>\");\n\t}\n\treturn ctx;\n}\n\n/**\n * Access reactive data (dataVersion, invalidate) from context.\n *\n * @throws if called outside a `<LakeSyncProvider>`.\n */\nexport function useLakeSyncData(): LakeSyncDataContextValue {\n\tconst ctx = useContext(LakeSyncDataContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"useLakeSyncData must be used within a <LakeSyncProvider>\");\n\t}\n\treturn ctx;\n}\n\n/**\n * Access the raw LakeSync SDK instances from context.\n *\n * Returns both stable and reactive values for backwards compatibility.\n *\n * @throws if called outside a `<LakeSyncProvider>`.\n */\nexport function useLakeSync(): LakeSyncContextValue {\n\tconst stable = useLakeSyncStable();\n\tconst data = useLakeSyncData();\n\treturn { ...stable, ...data };\n}\n","import type {\n\tActionDescriptor,\n\tActionErrorResult,\n\tActionResult,\n\tLakeSyncError,\n} from \"@lakesync/core\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useLakeSyncStable } from \"./context\";\n\n/** Parameters for a single action execution. */\nexport interface ActionParams {\n\tconnector: string;\n\tactionType: string;\n\tparams: Record<string, unknown>;\n\tidempotencyKey?: string;\n}\n\n/** Return type of `useAction`. */\nexport interface UseActionResult {\n\t/** Execute an action against a connector via the gateway. */\n\texecute: (params: ActionParams) => Promise<void>;\n\t/** Last action result (success or error). Null before first execution. */\n\tlastResult: ActionResult | ActionErrorResult | null;\n\t/** Whether an action is currently in flight. */\n\tisPending: boolean;\n}\n\n/**\n * Execute imperative actions against external systems via the gateway.\n *\n * Wraps `SyncCoordinator.executeAction()` and subscribes to\n * `onActionComplete` events to track the latest result.\n *\n * Uses a `pendingRef` to track whether we are waiting for a completion.\n * When `execute()` is called, we set the ref to `true` so the next\n * `onActionComplete` event is captured. This avoids the identity bug\n * where a stale action completion from a different hook instance would\n * overwrite state.\n *\n * ```ts\n * const { execute, lastResult, isPending } = useAction();\n *\n * await execute({\n * connector: \"slack\",\n * actionType: \"send_message\",\n * params: { channel: \"#general\", text: \"Hello\" },\n * });\n * ```\n */\nexport function useAction(): UseActionResult {\n\tconst { coordinator } = useLakeSyncStable();\n\tconst [lastResult, setLastResult] = useState<ActionResult | ActionErrorResult | null>(null);\n\tconst [isPending, setIsPending] = useState(false);\n\tconst waitingForCompletion = useRef(false);\n\n\tuseEffect(() => {\n\t\tconst handleComplete = (_actionId: string, result: ActionResult | ActionErrorResult) => {\n\t\t\tif (waitingForCompletion.current) {\n\t\t\t\twaitingForCompletion.current = false;\n\t\t\t\tsetLastResult(result);\n\t\t\t\tsetIsPending(false);\n\t\t\t}\n\t\t};\n\n\t\tcoordinator.on(\"onActionComplete\", handleComplete);\n\t\treturn () => {\n\t\t\tcoordinator.off(\"onActionComplete\", handleComplete);\n\t\t};\n\t}, [coordinator]);\n\n\tconst execute = useCallback(\n\t\tasync (params: ActionParams): Promise<void> => {\n\t\t\tsetIsPending(true);\n\t\t\tsetLastResult(null);\n\t\t\twaitingForCompletion.current = true;\n\t\t\tawait coordinator.executeAction(params);\n\t\t},\n\t\t[coordinator],\n\t);\n\n\treturn { execute, lastResult, isPending };\n}\n\n/** Return type of `useActionDiscovery`. */\nexport interface UseActionDiscoveryResult {\n\t/** Map of connector name to supported action descriptors. */\n\tconnectors: Record<string, ActionDescriptor[]>;\n\t/** Whether discovery is loading. */\n\tisLoading: boolean;\n\t/** Error from the last fetch, or null. */\n\terror: LakeSyncError | null;\n\t/** Manually re-fetch available actions. */\n\trefetch: () => void;\n}\n\n/**\n * Discover available connectors and their supported action types.\n *\n * Calls `transport.describeActions()` on mount and returns the result\n * reactively. Use this to build dynamic UI based on available actions.\n *\n * ```ts\n * const { connectors, isLoading } = useActionDiscovery();\n *\n * for (const [name, actions] of Object.entries(connectors)) {\n * console.log(name, actions.map(a => a.actionType));\n * }\n * ```\n */\nexport function useActionDiscovery(): UseActionDiscoveryResult {\n\tconst { coordinator } = useLakeSyncStable();\n\tconst [connectors, setConnectors] = useState<Record<string, ActionDescriptor[]>>({});\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [error, setError] = useState<LakeSyncError | null>(null);\n\tconst [trigger, setTrigger] = useState(0);\n\n\tconst refetch = useCallback(() => {\n\t\tsetTrigger((v) => v + 1);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tvoid trigger;\n\t\tlet cancelled = false;\n\n\t\tconst run = async () => {\n\t\t\tsetIsLoading(true);\n\t\t\tconst result = await coordinator.describeActions();\n\t\t\tif (cancelled) return;\n\n\t\t\tif (result.ok) {\n\t\t\t\tsetConnectors(result.value.connectors);\n\t\t\t\tsetError(null);\n\t\t\t} else {\n\t\t\t\tsetError(result.error);\n\t\t\t}\n\t\t\tsetIsLoading(false);\n\t\t};\n\n\t\trun();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [coordinator, trigger]);\n\n\treturn { connectors, isLoading, error, refetch };\n}\n","import type { ConnectorDescriptor, LakeSyncError } from \"@lakesync/core\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useLakeSyncStable } from \"./context\";\n\n/** Return type of `useConnectorTypes`. */\nexport interface UseConnectorTypesResult {\n\t/** Array of available connector type descriptors. */\n\ttypes: ConnectorDescriptor[];\n\t/** Whether discovery is loading. */\n\tisLoading: boolean;\n\t/** Error from the last fetch, or null. */\n\terror: LakeSyncError | null;\n\t/** Manually re-fetch connector types. */\n\trefetch: () => void;\n}\n\n/**\n * Discover available connector types and their configuration schemas.\n *\n * Calls `coordinator.listConnectorTypes()` on mount and returns the\n * result reactively. Use this to build dynamic \"Add Connector\" forms.\n *\n * ```ts\n * const { types, isLoading } = useConnectorTypes();\n *\n * for (const t of types) {\n * console.log(t.displayName, t.configSchema);\n * }\n * ```\n */\nexport function useConnectorTypes(): UseConnectorTypesResult {\n\tconst { coordinator } = useLakeSyncStable();\n\tconst [types, setTypes] = useState<ConnectorDescriptor[]>([]);\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [error, setError] = useState<LakeSyncError | null>(null);\n\tconst [trigger, setTrigger] = useState(0);\n\n\tconst refetch = useCallback(() => {\n\t\tsetTrigger((v) => v + 1);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tvoid trigger;\n\t\tlet cancelled = false;\n\n\t\tconst run = async () => {\n\t\t\tsetIsLoading(true);\n\t\t\tconst result = await coordinator.listConnectorTypes();\n\t\t\tif (cancelled) return;\n\n\t\t\tif (result.ok) {\n\t\t\t\tsetTypes(result.value);\n\t\t\t\tsetError(null);\n\t\t\t} else {\n\t\t\t\tsetError(result.error);\n\t\t\t}\n\t\t\tsetIsLoading(false);\n\t\t};\n\n\t\trun();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [coordinator, trigger]);\n\n\treturn { types, isLoading, error, refetch };\n}\n","import type { LakeSyncError, Result } from \"@lakesync/core\";\nimport { useCallback } from \"react\";\nimport { useLakeSyncData, useLakeSyncStable } from \"./context\";\n\n/** Return type of `useMutation`. */\nexport interface UseMutationResult {\n\tinsert: (\n\t\ttable: string,\n\t\trowId: string,\n\t\tdata: Record<string, unknown>,\n\t) => Promise<Result<void, LakeSyncError>>;\n\tupdate: (\n\t\ttable: string,\n\t\trowId: string,\n\t\tdata: Record<string, unknown>,\n\t) => Promise<Result<void, LakeSyncError>>;\n\tremove: (table: string, rowId: string) => Promise<Result<void, LakeSyncError>>;\n}\n\n/**\n * Wraps SyncTracker mutations with automatic query invalidation.\n *\n * After each successful mutation, `dataVersion` is incremented so all\n * active `useQuery` hooks re-run.\n */\nexport function useMutation(): UseMutationResult {\n\tconst { tracker } = useLakeSyncStable();\n\tconst { invalidate } = useLakeSyncData();\n\n\tconst insert = useCallback(\n\t\tasync (\n\t\t\ttable: string,\n\t\t\trowId: string,\n\t\t\tdata: Record<string, unknown>,\n\t\t): Promise<Result<void, LakeSyncError>> => {\n\t\t\tconst result = await tracker.insert(table, rowId, data);\n\t\t\tif (result.ok) invalidate();\n\t\t\treturn result;\n\t\t},\n\t\t[tracker, invalidate],\n\t);\n\n\tconst update = useCallback(\n\t\tasync (\n\t\t\ttable: string,\n\t\t\trowId: string,\n\t\t\tdata: Record<string, unknown>,\n\t\t): Promise<Result<void, LakeSyncError>> => {\n\t\t\tconst result = await tracker.update(table, rowId, data);\n\t\t\tif (result.ok) invalidate();\n\t\t\treturn result;\n\t\t},\n\t\t[tracker, invalidate],\n\t);\n\n\tconst remove = useCallback(\n\t\tasync (table: string, rowId: string): Promise<Result<void, LakeSyncError>> => {\n\t\t\tconst result = await tracker.delete(table, rowId);\n\t\t\tif (result.ok) invalidate();\n\t\t\treturn result;\n\t\t},\n\t\t[tracker, invalidate],\n\t);\n\n\treturn { insert, update, remove };\n}\n","import type { DbError } from \"@lakesync/client\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useLakeSyncData, useLakeSyncStable } from \"./context\";\n\n/** Return type of `useQuery`. */\nexport interface UseQueryResult<T> {\n\tdata: T[];\n\terror: DbError | null;\n\tisLoading: boolean;\n\trefetch: () => void;\n}\n\n/**\n * Reactive SQL query hook.\n *\n * Re-runs automatically when:\n * - Remote deltas are applied (via `onChange`)\n * - A local mutation completes (via `invalidate()`)\n * - The `sql` or `params` arguments change\n *\n * @param sql - SQL query string\n * @param params - Optional bind parameters\n */\nexport function useQuery<T>(sql: string, params?: unknown[]): UseQueryResult<T> {\n\tconst { tracker } = useLakeSyncStable();\n\tconst { dataVersion } = useLakeSyncData();\n\tconst [data, setData] = useState<T[]>([]);\n\tconst [error, setError] = useState<DbError | null>(null);\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [manualTrigger, setManualTrigger] = useState(0);\n\n\t// Stable serialisation of params for dependency comparison\n\tconst paramsKey = JSON.stringify(params ?? []);\n\tconst paramsRef = useRef(params);\n\tparamsRef.current = params;\n\n\tconst refetch = useCallback(() => {\n\t\tsetManualTrigger((v) => v + 1);\n\t}, []);\n\n\t// Combine all trigger values into a single version for the effect.\n\t// This satisfies exhaustive-deps: the effect reads `version` directly.\n\tconst version = `${dataVersion}:${manualTrigger}:${paramsKey}`;\n\n\tuseEffect(() => {\n\t\t// Read version to establish dependency\n\t\tvoid version;\n\t\tlet cancelled = false;\n\n\t\tconst run = async () => {\n\t\t\tconst result = await tracker.query<T>(sql, paramsRef.current);\n\t\t\tif (cancelled) return;\n\n\t\t\tif (result.ok) {\n\t\t\t\tsetData(result.value);\n\t\t\t\tsetError(null);\n\t\t\t} else {\n\t\t\t\tsetError(result.error);\n\t\t\t}\n\t\t\tsetIsLoading(false);\n\t\t};\n\n\t\trun();\n\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [tracker, sql, version]);\n\n\treturn { data, error, isLoading, refetch };\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useLakeSyncStable } from \"./context\";\n\n/** Return type of `useSyncStatus`. */\nexport interface UseSyncStatusResult {\n\tisSyncing: boolean;\n\tlastSyncTime: Date | null;\n\tqueueDepth: number;\n\terror: Error | null;\n}\n\n/**\n * Observe the sync lifecycle.\n *\n * Reads `coordinator.state` directly for sync status and subscribes to\n * events only for invalidation (re-reading the state snapshot).\n * Uses the stable context so it does not re-render on data version changes.\n */\nexport function useSyncStatus(): UseSyncStatusResult {\n\tconst { coordinator } = useLakeSyncStable();\n\tconst [status, setStatus] = useState<UseSyncStatusResult>({\n\t\tisSyncing: false,\n\t\tlastSyncTime: null,\n\t\tqueueDepth: 0,\n\t\terror: null,\n\t});\n\n\tconst refreshStatus = useCallback(async () => {\n\t\tconst state = coordinator.state;\n\t\tconst depth = await coordinator.queueDepth();\n\t\tsetStatus((prev) => ({\n\t\t\tisSyncing: state.syncing,\n\t\t\tlastSyncTime: state.lastSyncTime,\n\t\t\tqueueDepth: depth,\n\t\t\terror: prev.error,\n\t\t}));\n\t}, [coordinator]);\n\n\tuseEffect(() => {\n\t\tconst handleSyncStart = () => {\n\t\t\tsetStatus((prev) => ({ ...prev, isSyncing: true }));\n\t\t};\n\n\t\tconst handleSyncComplete = () => {\n\t\t\tconst state = coordinator.state;\n\t\t\tsetStatus((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tisSyncing: false,\n\t\t\t\tlastSyncTime: state.lastSyncTime,\n\t\t\t\terror: null,\n\t\t\t}));\n\t\t\trefreshStatus();\n\t\t};\n\n\t\tconst handleError = (err: Error) => {\n\t\t\tsetStatus((prev) => ({\n\t\t\t\t...prev,\n\t\t\t\tisSyncing: false,\n\t\t\t\terror: err,\n\t\t\t}));\n\t\t};\n\n\t\tconst handleChange = () => {\n\t\t\trefreshStatus();\n\t\t};\n\n\t\tcoordinator.on(\"onSyncStart\", handleSyncStart);\n\t\tcoordinator.on(\"onSyncComplete\", handleSyncComplete);\n\t\tcoordinator.on(\"onError\", handleError);\n\t\tcoordinator.on(\"onChange\", handleChange);\n\n\t\t// Initial status read\n\t\trefreshStatus();\n\n\t\treturn () => {\n\t\t\tcoordinator.off(\"onSyncStart\", handleSyncStart);\n\t\t\tcoordinator.off(\"onSyncComplete\", handleSyncComplete);\n\t\t\tcoordinator.off(\"onError\", handleError);\n\t\t\tcoordinator.off(\"onChange\", handleChange);\n\t\t};\n\t}, [coordinator, refreshStatus]);\n\n\treturn status;\n}\n"],"mappings":";;;AACA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAwBP,IAAM,wBAAwB,cAAiD,IAAI;AACnF,IAAM,sBAAsB,cAA+C,IAAI;AAoBxE,SAAS,iBAAiB,OAA8B;AAC9D,QAAM,EAAE,aAAa,SAAS,IAAI;AAClC,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,CAAC;AAEhD,QAAM,aAAa,YAAY,MAAM;AACpC,mBAAe,CAAC,MAAM,IAAI,CAAC;AAAA,EAC5B,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACf,UAAM,eAAe,MAAM;AAC1B,qBAAe,CAAC,MAAM,IAAI,CAAC;AAAA,IAC5B;AACA,gBAAY,GAAG,YAAY,YAAY;AACvC,WAAO,MAAM;AACZ,kBAAY,IAAI,YAAY,YAAY;AAAA,IACzC;AAAA,EACD,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,cAAc;AAAA,IACnB,OAAO;AAAA,MACN;AAAA,MACA,SAAS,YAAY;AAAA,IACtB;AAAA,IACA,CAAC,WAAW;AAAA,EACb;AAEA,QAAM,YAAY;AAAA,IACjB,OAAO;AAAA,MACN;AAAA,MACA;AAAA,IACD;AAAA,IACA,CAAC,aAAa,UAAU;AAAA,EACzB;AAEA,SAAO;AAAA,IACN,sBAAsB;AAAA,IACtB,EAAE,OAAO,YAAY;AAAA,IACrB,cAAc,oBAAoB,UAAU,EAAE,OAAO,UAAU,GAAG,QAAQ;AAAA,EAC3E;AACD;AAUO,SAAS,oBAAgD;AAC/D,QAAM,MAAM,WAAW,qBAAqB;AAC5C,MAAI,CAAC,KAAK;AACT,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC7E;AACA,SAAO;AACR;AAOO,SAAS,kBAA4C;AAC3D,QAAM,MAAM,WAAW,mBAAmB;AAC1C,MAAI,CAAC,KAAK;AACT,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC3E;AACA,SAAO;AACR;AASO,SAAS,cAAoC;AACnD,QAAM,SAAS,kBAAkB;AACjC,QAAM,OAAO,gBAAgB;AAC7B,SAAO,EAAE,GAAG,QAAQ,GAAG,KAAK;AAC7B;;;ACjIA,SAAS,eAAAA,cAAa,aAAAC,YAAW,QAAQ,YAAAC,iBAAgB;AA2ClD,SAAS,YAA6B;AAC5C,QAAM,EAAE,YAAY,IAAI,kBAAkB;AAC1C,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAkD,IAAI;AAC1F,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,KAAK;AAChD,QAAM,uBAAuB,OAAO,KAAK;AAEzC,EAAAC,WAAU,MAAM;AACf,UAAM,iBAAiB,CAAC,WAAmB,WAA6C;AACvF,UAAI,qBAAqB,SAAS;AACjC,6BAAqB,UAAU;AAC/B,sBAAc,MAAM;AACpB,qBAAa,KAAK;AAAA,MACnB;AAAA,IACD;AAEA,gBAAY,GAAG,oBAAoB,cAAc;AACjD,WAAO,MAAM;AACZ,kBAAY,IAAI,oBAAoB,cAAc;AAAA,IACnD;AAAA,EACD,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,UAAUC;AAAA,IACf,OAAO,WAAwC;AAC9C,mBAAa,IAAI;AACjB,oBAAc,IAAI;AAClB,2BAAqB,UAAU;AAC/B,YAAM,YAAY,cAAc,MAAM;AAAA,IACvC;AAAA,IACA,CAAC,WAAW;AAAA,EACb;AAEA,SAAO,EAAE,SAAS,YAAY,UAAU;AACzC;AA4BO,SAAS,qBAA+C;AAC9D,QAAM,EAAE,YAAY,IAAI,kBAAkB;AAC1C,QAAM,CAAC,YAAY,aAAa,IAAIF,UAA6C,CAAC,CAAC;AACnF,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,IAAI;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAA+B,IAAI;AAC7D,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,CAAC;AAExC,QAAM,UAAUE,aAAY,MAAM;AACjC,eAAW,CAAC,MAAM,IAAI,CAAC;AAAA,EACxB,GAAG,CAAC,CAAC;AAEL,EAAAD,WAAU,MAAM;AACf,SAAK;AACL,QAAI,YAAY;AAEhB,UAAM,MAAM,YAAY;AACvB,mBAAa,IAAI;AACjB,YAAM,SAAS,MAAM,YAAY,gBAAgB;AACjD,UAAI,UAAW;AAEf,UAAI,OAAO,IAAI;AACd,sBAAc,OAAO,MAAM,UAAU;AACrC,iBAAS,IAAI;AAAA,MACd,OAAO;AACN,iBAAS,OAAO,KAAK;AAAA,MACtB;AACA,mBAAa,KAAK;AAAA,IACnB;AAEA,QAAI;AAEJ,WAAO,MAAM;AACZ,kBAAY;AAAA,IACb;AAAA,EACD,GAAG,CAAC,aAAa,OAAO,CAAC;AAEzB,SAAO,EAAE,YAAY,WAAW,OAAO,QAAQ;AAChD;;;ACjJA,SAAS,eAAAE,cAAa,aAAAC,YAAW,YAAAC,iBAAgB;AA6B1C,SAAS,oBAA6C;AAC5D,QAAM,EAAE,YAAY,IAAI,kBAAkB;AAC1C,QAAM,CAAC,OAAO,QAAQ,IAAIC,UAAgC,CAAC,CAAC;AAC5D,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,IAAI;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAA+B,IAAI;AAC7D,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,CAAC;AAExC,QAAM,UAAUC,aAAY,MAAM;AACjC,eAAW,CAAC,MAAM,IAAI,CAAC;AAAA,EACxB,GAAG,CAAC,CAAC;AAEL,EAAAC,WAAU,MAAM;AACf,SAAK;AACL,QAAI,YAAY;AAEhB,UAAM,MAAM,YAAY;AACvB,mBAAa,IAAI;AACjB,YAAM,SAAS,MAAM,YAAY,mBAAmB;AACpD,UAAI,UAAW;AAEf,UAAI,OAAO,IAAI;AACd,iBAAS,OAAO,KAAK;AACrB,iBAAS,IAAI;AAAA,MACd,OAAO;AACN,iBAAS,OAAO,KAAK;AAAA,MACtB;AACA,mBAAa,KAAK;AAAA,IACnB;AAEA,QAAI;AAEJ,WAAO,MAAM;AACZ,kBAAY;AAAA,IACb;AAAA,EACD,GAAG,CAAC,aAAa,OAAO,CAAC;AAEzB,SAAO,EAAE,OAAO,WAAW,OAAO,QAAQ;AAC3C;;;AClEA,SAAS,eAAAC,oBAAmB;AAwBrB,SAAS,cAAiC;AAChD,QAAM,EAAE,QAAQ,IAAI,kBAAkB;AACtC,QAAM,EAAE,WAAW,IAAI,gBAAgB;AAEvC,QAAM,SAASC;AAAA,IACd,OACC,OACA,OACA,SAC0C;AAC1C,YAAM,SAAS,MAAM,QAAQ,OAAO,OAAO,OAAO,IAAI;AACtD,UAAI,OAAO,GAAI,YAAW;AAC1B,aAAO;AAAA,IACR;AAAA,IACA,CAAC,SAAS,UAAU;AAAA,EACrB;AAEA,QAAM,SAASA;AAAA,IACd,OACC,OACA,OACA,SAC0C;AAC1C,YAAM,SAAS,MAAM,QAAQ,OAAO,OAAO,OAAO,IAAI;AACtD,UAAI,OAAO,GAAI,YAAW;AAC1B,aAAO;AAAA,IACR;AAAA,IACA,CAAC,SAAS,UAAU;AAAA,EACrB;AAEA,QAAM,SAASA;AAAA,IACd,OAAO,OAAe,UAAwD;AAC7E,YAAM,SAAS,MAAM,QAAQ,OAAO,OAAO,KAAK;AAChD,UAAI,OAAO,GAAI,YAAW;AAC1B,aAAO;AAAA,IACR;AAAA,IACA,CAAC,SAAS,UAAU;AAAA,EACrB;AAEA,SAAO,EAAE,QAAQ,QAAQ,OAAO;AACjC;;;AChEA,SAAS,eAAAC,cAAa,aAAAC,YAAW,UAAAC,SAAQ,YAAAC,iBAAgB;AAsBlD,SAAS,SAAY,KAAa,QAAuC;AAC/E,QAAM,EAAE,QAAQ,IAAI,kBAAkB;AACtC,QAAM,EAAE,YAAY,IAAI,gBAAgB;AACxC,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAc,CAAC,CAAC;AACxC,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAyB,IAAI;AACvD,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,IAAI;AAC/C,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,CAAC;AAGpD,QAAM,YAAY,KAAK,UAAU,UAAU,CAAC,CAAC;AAC7C,QAAM,YAAYC,QAAO,MAAM;AAC/B,YAAU,UAAU;AAEpB,QAAM,UAAUC,aAAY,MAAM;AACjC,qBAAiB,CAAC,MAAM,IAAI,CAAC;AAAA,EAC9B,GAAG,CAAC,CAAC;AAIL,QAAM,UAAU,GAAG,WAAW,IAAI,aAAa,IAAI,SAAS;AAE5D,EAAAC,WAAU,MAAM;AAEf,SAAK;AACL,QAAI,YAAY;AAEhB,UAAM,MAAM,YAAY;AACvB,YAAM,SAAS,MAAM,QAAQ,MAAS,KAAK,UAAU,OAAO;AAC5D,UAAI,UAAW;AAEf,UAAI,OAAO,IAAI;AACd,gBAAQ,OAAO,KAAK;AACpB,iBAAS,IAAI;AAAA,MACd,OAAO;AACN,iBAAS,OAAO,KAAK;AAAA,MACtB;AACA,mBAAa,KAAK;AAAA,IACnB;AAEA,QAAI;AAEJ,WAAO,MAAM;AACZ,kBAAY;AAAA,IACb;AAAA,EACD,GAAG,CAAC,SAAS,KAAK,OAAO,CAAC;AAE1B,SAAO,EAAE,MAAM,OAAO,WAAW,QAAQ;AAC1C;;;ACtEA,SAAS,eAAAC,cAAa,aAAAC,YAAW,YAAAC,iBAAgB;AAkB1C,SAAS,gBAAqC;AACpD,QAAM,EAAE,YAAY,IAAI,kBAAkB;AAC1C,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAA8B;AAAA,IACzD,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,EACR,CAAC;AAED,QAAM,gBAAgBC,aAAY,YAAY;AAC7C,UAAM,QAAQ,YAAY;AAC1B,UAAM,QAAQ,MAAM,YAAY,WAAW;AAC3C,cAAU,CAAC,UAAU;AAAA,MACpB,WAAW,MAAM;AAAA,MACjB,cAAc,MAAM;AAAA,MACpB,YAAY;AAAA,MACZ,OAAO,KAAK;AAAA,IACb,EAAE;AAAA,EACH,GAAG,CAAC,WAAW,CAAC;AAEhB,EAAAC,WAAU,MAAM;AACf,UAAM,kBAAkB,MAAM;AAC7B,gBAAU,CAAC,UAAU,EAAE,GAAG,MAAM,WAAW,KAAK,EAAE;AAAA,IACnD;AAEA,UAAM,qBAAqB,MAAM;AAChC,YAAM,QAAQ,YAAY;AAC1B,gBAAU,CAAC,UAAU;AAAA,QACpB,GAAG;AAAA,QACH,WAAW;AAAA,QACX,cAAc,MAAM;AAAA,QACpB,OAAO;AAAA,MACR,EAAE;AACF,oBAAc;AAAA,IACf;AAEA,UAAM,cAAc,CAAC,QAAe;AACnC,gBAAU,CAAC,UAAU;AAAA,QACpB,GAAG;AAAA,QACH,WAAW;AAAA,QACX,OAAO;AAAA,MACR,EAAE;AAAA,IACH;AAEA,UAAM,eAAe,MAAM;AAC1B,oBAAc;AAAA,IACf;AAEA,gBAAY,GAAG,eAAe,eAAe;AAC7C,gBAAY,GAAG,kBAAkB,kBAAkB;AACnD,gBAAY,GAAG,WAAW,WAAW;AACrC,gBAAY,GAAG,YAAY,YAAY;AAGvC,kBAAc;AAEd,WAAO,MAAM;AACZ,kBAAY,IAAI,eAAe,eAAe;AAC9C,kBAAY,IAAI,kBAAkB,kBAAkB;AACpD,kBAAY,IAAI,WAAW,WAAW;AACtC,kBAAY,IAAI,YAAY,YAAY;AAAA,IACzC;AAAA,EACD,GAAG,CAAC,aAAa,aAAa,CAAC;AAE/B,SAAO;AACR;","names":["useCallback","useEffect","useState","useState","useEffect","useCallback","useCallback","useEffect","useState","useState","useCallback","useEffect","useCallback","useCallback","useCallback","useEffect","useRef","useState","useState","useRef","useCallback","useEffect","useCallback","useEffect","useState","useState","useCallback","useEffect"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { T as TableSchema } from './types-
|
|
2
|
-
import { d as ConnectorType } from './types-
|
|
1
|
+
import { T as TableSchema } from './types-BdGBv2ba.js';
|
|
2
|
+
import { d as ConnectorType } from './types-BrcD1oJg.js';
|
|
3
3
|
|
|
4
4
|
/** Connector category — determines the ingest model. */
|
|
5
5
|
type ConnectorCategory = "database" | "api";
|
|
@@ -25,8 +25,23 @@ interface ConnectorDescriptor {
|
|
|
25
25
|
/** Output table schemas for API connectors. Null for database connectors. */
|
|
26
26
|
outputTables: ReadonlyArray<TableSchema> | null;
|
|
27
27
|
}
|
|
28
|
+
/** Immutable registry of connector descriptors. */
|
|
29
|
+
interface ConnectorRegistry {
|
|
30
|
+
/** Look up a single descriptor by type. */
|
|
31
|
+
get(type: string): ConnectorDescriptor | undefined;
|
|
32
|
+
/** List all descriptors, sorted alphabetically by type. */
|
|
33
|
+
list(): ConnectorDescriptor[];
|
|
34
|
+
/** Create a new registry with an additional or replaced descriptor. */
|
|
35
|
+
with(descriptor: ConnectorDescriptor): ConnectorRegistry;
|
|
36
|
+
/** Create a new registry with output schemas attached to a type. */
|
|
37
|
+
withOutputSchemas(type: string, schemas: ReadonlyArray<TableSchema>): ConnectorRegistry;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create an immutable {@link ConnectorRegistry} from a list of descriptors.
|
|
41
|
+
*/
|
|
42
|
+
declare function createConnectorRegistry(descriptors: ConnectorDescriptor[]): ConnectorRegistry;
|
|
28
43
|
/**
|
|
29
|
-
* Register (or replace) a connector descriptor.
|
|
44
|
+
* Register (or replace) a connector descriptor in the global registry.
|
|
30
45
|
*
|
|
31
46
|
* Called at module load time by built-in registration and by connector
|
|
32
47
|
* packages that need to attach output schemas.
|
|
@@ -50,4 +65,4 @@ declare function getConnectorDescriptor(type: string): ConnectorDescriptor | und
|
|
|
50
65
|
*/
|
|
51
66
|
declare function listConnectorDescriptors(): ConnectorDescriptor[];
|
|
52
67
|
|
|
53
|
-
export { type ConnectorCategory as C, type ConnectorDescriptor as a,
|
|
68
|
+
export { type ConnectorCategory as C, type ConnectorDescriptor as a, type ConnectorRegistry as b, createConnectorRegistry as c, registerOutputSchemas as d, getConnectorDescriptor as g, listConnectorDescriptors as l, registerConnectorDescriptor as r };
|
|
@@ -1,22 +1,33 @@
|
|
|
1
|
-
import { g as ActionHandler, i as ActionPush, l as AuthContext, j as ActionResponse, a as ActionValidationError, d as ActionDiscovery, b as SyncRulesContext } from './types-Bs-QyOe-.js';
|
|
2
1
|
import { H as HLCTimestamp, R as Result, S as SchemaError, b as ClockDriftError, B as BackpressureError, a as AdapterNotFoundError, A as AdapterError, F as FlushError } from './result-CojzlFE2.js';
|
|
3
|
-
import {
|
|
4
|
-
import { R as RowDelta,
|
|
5
|
-
import {
|
|
2
|
+
import { g as ActionHandler, i as ActionPush, l as AuthContext, j as ActionResponse, a as ActionValidationError, d as ActionDiscovery, S as SyncRulesConfig, b as SyncRulesContext, R as ResolvedClaims } from './types-Bs-QyOe-.js';
|
|
3
|
+
import { R as RowDelta, d as RowKey, T as TableSchema, S as SyncPush, e as SyncPull, f as SyncResponse } from './types-BdGBv2ba.js';
|
|
4
|
+
import { C as ConnectorConfig } from './types-BrcD1oJg.js';
|
|
5
|
+
import { I as IngestTarget } from './base-poller-Bj9kX9dv.js';
|
|
6
|
+
import { D as DatabaseAdapter } from './db-types-CfLMUBfW.js';
|
|
6
7
|
import { L as LakeAdapter } from './types-DSC_EiwR.js';
|
|
7
8
|
import { N as NessieCatalogueClient } from './nessie-client-DrNikVXy.js';
|
|
8
9
|
|
|
10
|
+
/** Configuration for ActionDispatcher caches. */
|
|
11
|
+
interface ActionCacheConfig {
|
|
12
|
+
/** Maximum number of entries in the executed actions set and idempotency map. */
|
|
13
|
+
maxSize?: number;
|
|
14
|
+
/** Time-to-live for idempotency entries in milliseconds. */
|
|
15
|
+
ttlMs?: number;
|
|
16
|
+
}
|
|
9
17
|
/**
|
|
10
18
|
* Dispatches imperative actions to registered handlers.
|
|
11
19
|
*
|
|
12
20
|
* Manages idempotency via actionId deduplication and idempotencyKey mapping.
|
|
21
|
+
* Caches are bounded by max size and TTL to prevent unbounded growth.
|
|
13
22
|
* Completely decoupled from the HLC clock — takes a callback for timestamp generation.
|
|
14
23
|
*/
|
|
15
24
|
declare class ActionDispatcher {
|
|
16
25
|
private actionHandlers;
|
|
17
26
|
private executedActions;
|
|
18
27
|
private idempotencyMap;
|
|
19
|
-
|
|
28
|
+
private readonly maxCacheSize;
|
|
29
|
+
private readonly cacheTtlMs;
|
|
30
|
+
constructor(handlers?: Record<string, ActionHandler>, cacheConfig?: ActionCacheConfig);
|
|
20
31
|
/**
|
|
21
32
|
* Dispatch an action push to registered handlers.
|
|
22
33
|
*
|
|
@@ -60,6 +71,10 @@ declare class ActionDispatcher {
|
|
|
60
71
|
describe(): ActionDiscovery;
|
|
61
72
|
/** Cache an action result for idempotency deduplication. */
|
|
62
73
|
private cacheActionResult;
|
|
74
|
+
/** Get a cached result if it exists and hasn't expired. */
|
|
75
|
+
private getCachedResult;
|
|
76
|
+
/** Evict expired entries and trim to max size. */
|
|
77
|
+
private evictStaleEntries;
|
|
63
78
|
}
|
|
64
79
|
|
|
65
80
|
/**
|
|
@@ -100,6 +115,19 @@ declare class DeltaBuffer {
|
|
|
100
115
|
}>;
|
|
101
116
|
/** Drain only the specified table's deltas, leaving other tables intact. */
|
|
102
117
|
drainTable(table: string): RowDelta[];
|
|
118
|
+
/**
|
|
119
|
+
* Snapshot the current buffer state without clearing it.
|
|
120
|
+
*
|
|
121
|
+
* Useful for inspecting the buffer contents without draining.
|
|
122
|
+
* Use {@link clear} separately after a successful flush for
|
|
123
|
+
* transactional semantics.
|
|
124
|
+
*/
|
|
125
|
+
snapshot(): {
|
|
126
|
+
entries: RowDelta[];
|
|
127
|
+
byteSize: number;
|
|
128
|
+
};
|
|
129
|
+
/** Clear all buffer state. */
|
|
130
|
+
clear(): void;
|
|
103
131
|
/** Drain the log for flush. Returns log entries and clears both structures. */
|
|
104
132
|
drain(): RowDelta[];
|
|
105
133
|
/** Number of log entries */
|
|
@@ -112,6 +140,36 @@ declare class DeltaBuffer {
|
|
|
112
140
|
get averageDeltaBytes(): number;
|
|
113
141
|
}
|
|
114
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Platform-agnostic configuration storage interface.
|
|
145
|
+
*
|
|
146
|
+
* Implemented by MemoryConfigStore (tests, gateway-server) and
|
|
147
|
+
* DurableStorageConfigStore (gateway-worker).
|
|
148
|
+
*/
|
|
149
|
+
interface ConfigStore {
|
|
150
|
+
getSchema(gatewayId: string): Promise<TableSchema | undefined>;
|
|
151
|
+
setSchema(gatewayId: string, schema: TableSchema): Promise<void>;
|
|
152
|
+
getSyncRules(gatewayId: string): Promise<SyncRulesConfig | undefined>;
|
|
153
|
+
setSyncRules(gatewayId: string, rules: SyncRulesConfig): Promise<void>;
|
|
154
|
+
getConnectors(): Promise<Record<string, ConnectorConfig>>;
|
|
155
|
+
setConnectors(connectors: Record<string, ConnectorConfig>): Promise<void>;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* In-memory implementation of ConfigStore.
|
|
159
|
+
* Used by tests and gateway-server.
|
|
160
|
+
*/
|
|
161
|
+
declare class MemoryConfigStore implements ConfigStore {
|
|
162
|
+
private schemas;
|
|
163
|
+
private syncRules;
|
|
164
|
+
private connectors;
|
|
165
|
+
getSchema(gatewayId: string): Promise<TableSchema | undefined>;
|
|
166
|
+
setSchema(gatewayId: string, schema: TableSchema): Promise<void>;
|
|
167
|
+
getSyncRules(gatewayId: string): Promise<SyncRulesConfig | undefined>;
|
|
168
|
+
setSyncRules(gatewayId: string, rules: SyncRulesConfig): Promise<void>;
|
|
169
|
+
getConnectors(): Promise<Record<string, ConnectorConfig>>;
|
|
170
|
+
setConnectors(connectors: Record<string, ConnectorConfig>): Promise<void>;
|
|
171
|
+
}
|
|
172
|
+
|
|
115
173
|
/**
|
|
116
174
|
* Manages schema versioning and validation for the gateway.
|
|
117
175
|
*
|
|
@@ -225,7 +283,8 @@ interface FlushEnvelope {
|
|
|
225
283
|
/**
|
|
226
284
|
* Sync gateway -- coordinates delta ingestion, conflict resolution, and flush.
|
|
227
285
|
*
|
|
228
|
-
* Thin facade composing ActionDispatcher,
|
|
286
|
+
* Thin facade composing DeltaBuffer, ActionDispatcher, SourceRegistry,
|
|
287
|
+
* and FlushCoordinator. Public methods delegate to composed modules.
|
|
229
288
|
*/
|
|
230
289
|
declare class SyncGateway implements IngestTarget {
|
|
231
290
|
private hlc;
|
|
@@ -233,10 +292,9 @@ declare class SyncGateway implements IngestTarget {
|
|
|
233
292
|
readonly actions: ActionDispatcher;
|
|
234
293
|
private config;
|
|
235
294
|
private adapter;
|
|
236
|
-
private
|
|
295
|
+
private readonly sources;
|
|
296
|
+
private readonly flushCoordinator;
|
|
237
297
|
constructor(config: GatewayConfig, adapter?: LakeAdapter | DatabaseAdapter);
|
|
238
|
-
/** Restore drained entries back to the buffer for retry. */
|
|
239
|
-
private restoreEntries;
|
|
240
298
|
/**
|
|
241
299
|
* Handle an incoming push from a client.
|
|
242
300
|
*
|
|
@@ -247,6 +305,8 @@ declare class SyncGateway implements IngestTarget {
|
|
|
247
305
|
* or a `ClockDriftError` if the client clock is too far ahead.
|
|
248
306
|
*/
|
|
249
307
|
handlePush(msg: SyncPush): Result<HandlePushResult, ClockDriftError | SchemaError | BackpressureError>;
|
|
308
|
+
/** Check buffer backpressure. */
|
|
309
|
+
private checkBackpressure;
|
|
250
310
|
/**
|
|
251
311
|
* Handle a pull request from a client.
|
|
252
312
|
*
|
|
@@ -336,4 +396,73 @@ declare class SyncGateway implements IngestTarget {
|
|
|
336
396
|
};
|
|
337
397
|
}
|
|
338
398
|
|
|
339
|
-
|
|
399
|
+
/** Result from a request handler, ready for platform-specific serialisation. */
|
|
400
|
+
interface HandlerResult {
|
|
401
|
+
status: number;
|
|
402
|
+
body: unknown;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Handle a push request.
|
|
406
|
+
*
|
|
407
|
+
* @param gateway - The SyncGateway instance.
|
|
408
|
+
* @param raw - The raw request body string.
|
|
409
|
+
* @param headerClientId - Client ID from auth header (for mismatch check).
|
|
410
|
+
* @param opts - Optional callbacks for persistence and broadcast.
|
|
411
|
+
*/
|
|
412
|
+
declare function handlePushRequest(gateway: SyncGateway, raw: string, headerClientId?: string | null, opts?: {
|
|
413
|
+
/** Persist deltas before processing (WAL-style). */
|
|
414
|
+
persistBatch?: (deltas: RowDelta[]) => void;
|
|
415
|
+
/** Clear persisted deltas after successful push. */
|
|
416
|
+
clearPersistence?: () => void;
|
|
417
|
+
/** Broadcast deltas to connected clients. */
|
|
418
|
+
broadcastFn?: (deltas: RowDelta[], serverHlc: HLCTimestamp, excludeClientId: string) => void | Promise<void>;
|
|
419
|
+
}): HandlerResult;
|
|
420
|
+
/**
|
|
421
|
+
* Handle a pull request.
|
|
422
|
+
*/
|
|
423
|
+
declare function handlePullRequest(gateway: SyncGateway, params: {
|
|
424
|
+
since: string | null;
|
|
425
|
+
clientId: string | null;
|
|
426
|
+
limit: string | null;
|
|
427
|
+
source: string | null;
|
|
428
|
+
}, claims?: ResolvedClaims, syncRules?: SyncRulesConfig): Promise<HandlerResult>;
|
|
429
|
+
/**
|
|
430
|
+
* Handle an action request.
|
|
431
|
+
*/
|
|
432
|
+
declare function handleActionRequest(gateway: SyncGateway, raw: string, headerClientId?: string | null, claims?: ResolvedClaims): Promise<HandlerResult>;
|
|
433
|
+
/**
|
|
434
|
+
* Handle a flush request.
|
|
435
|
+
*/
|
|
436
|
+
declare function handleFlushRequest(gateway: SyncGateway, opts?: {
|
|
437
|
+
clearPersistence?: () => void;
|
|
438
|
+
}): Promise<HandlerResult>;
|
|
439
|
+
/**
|
|
440
|
+
* Handle saving a table schema.
|
|
441
|
+
*/
|
|
442
|
+
declare function handleSaveSchema(raw: string, store: ConfigStore, gatewayId: string): Promise<HandlerResult>;
|
|
443
|
+
/**
|
|
444
|
+
* Handle saving sync rules.
|
|
445
|
+
*/
|
|
446
|
+
declare function handleSaveSyncRules(raw: string, store: ConfigStore, gatewayId: string): Promise<HandlerResult>;
|
|
447
|
+
/**
|
|
448
|
+
* Handle registering a connector.
|
|
449
|
+
*/
|
|
450
|
+
declare function handleRegisterConnector(raw: string, store: ConfigStore): Promise<HandlerResult>;
|
|
451
|
+
/**
|
|
452
|
+
* Handle unregistering a connector.
|
|
453
|
+
*/
|
|
454
|
+
declare function handleUnregisterConnector(name: string, store: ConfigStore): Promise<HandlerResult>;
|
|
455
|
+
/**
|
|
456
|
+
* Handle listing connectors.
|
|
457
|
+
*/
|
|
458
|
+
declare function handleListConnectors(store: ConfigStore): Promise<HandlerResult>;
|
|
459
|
+
/**
|
|
460
|
+
* Handle listing available connector types (static metadata).
|
|
461
|
+
*/
|
|
462
|
+
declare function handleListConnectorTypes(): HandlerResult;
|
|
463
|
+
/**
|
|
464
|
+
* Handle metrics request.
|
|
465
|
+
*/
|
|
466
|
+
declare function handleMetrics(gateway: SyncGateway, extra?: Record<string, unknown>): HandlerResult;
|
|
467
|
+
|
|
468
|
+
export { type ActionCacheConfig as A, type BufferConfig as B, type ConfigStore as C, DeltaBuffer as D, type FlushEnvelope as F, type GatewayConfig as G, type HandlePushResult as H, MemoryConfigStore as M, SchemaManager as S, ActionDispatcher as a, type GatewayState as b, type HandlerResult as c, SyncGateway as d, handleFlushRequest as e, handleListConnectorTypes as f, handleListConnectors as g, handleActionRequest as h, handleMetrics as i, handlePullRequest as j, handlePushRequest as k, handleRegisterConnector as l, handleSaveSchema as m, handleSaveSyncRules as n, handleUnregisterConnector as o };
|
|
@@ -9,9 +9,9 @@ import {
|
|
|
9
9
|
mapLead,
|
|
10
10
|
mapOpportunity,
|
|
11
11
|
testConnection
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-QNITY4F6.js";
|
|
13
|
+
import "./chunk-LDFFCG2K.js";
|
|
14
|
+
import "./chunk-DGUM43GV.js";
|
|
15
15
|
export {
|
|
16
16
|
SALESFORCE_TABLE_SCHEMAS,
|
|
17
17
|
SalesforceApiError,
|
|
@@ -24,4 +24,4 @@ export {
|
|
|
24
24
|
mapOpportunity,
|
|
25
25
|
testConnection
|
|
26
26
|
};
|
|
27
|
-
//# sourceMappingURL=src-
|
|
27
|
+
//# sourceMappingURL=src-B6NLV3FP.js.map
|