@todu/engine 0.1.1 → 0.2.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/automerge-init.d.ts +9 -0
- package/dist/automerge-init.d.ts.map +1 -0
- package/dist/automerge-init.js +38 -0
- package/dist/automerge-init.js.map +1 -0
- package/dist/habits.d.ts +1 -1
- package/dist/habits.d.ts.map +1 -1
- package/dist/habits.js +1 -1
- package/dist/habits.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +157 -20
- package/dist/index.js.map +1 -1
- package/dist/notes.d.ts.map +1 -1
- package/dist/notes.js +248 -49
- package/dist/notes.js.map +1 -1
- package/dist/scheduling.d.ts +6 -10
- package/dist/scheduling.d.ts.map +1 -1
- package/dist/scheduling.js +8 -10
- package/dist/scheduling.js.map +1 -1
- package/dist/storage.d.ts +43 -5
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +174 -27
- package/dist/storage.js.map +1 -1
- package/dist/sync-client.d.ts +14 -0
- package/dist/sync-client.d.ts.map +1 -1
- package/dist/sync-client.js +74 -0
- package/dist/sync-client.js.map +1 -1
- package/dist/todu.d.ts +33 -1
- package/dist/todu.d.ts.map +1 -1
- package/dist/todu.js +2 -0
- package/dist/todu.js.map +1 -1
- package/package.json +1 -1
package/dist/storage.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { Repo } from "@automerge/automerge-repo";
|
|
3
|
+
import { Repo } from "@automerge/automerge-repo/slim";
|
|
4
4
|
import { NodeFSStorageAdapter } from "@automerge/automerge-repo-storage-nodefs";
|
|
5
5
|
import { CATALOG_DOC_KEY, createEmptyCatalog, SCHEMA_VERSION, } from "@todu/core";
|
|
6
|
+
import { ensureAutomergeWasmInitialized } from "./automerge-init.js";
|
|
6
7
|
// ============================================================================
|
|
7
8
|
// Storage layer — Automerge repo + document management
|
|
8
9
|
// ============================================================================
|
|
@@ -10,6 +11,8 @@ import { CATALOG_DOC_KEY, createEmptyCatalog, SCHEMA_VERSION, } from "@todu/core
|
|
|
10
11
|
const SYNC_THROTTLE_MS = 100;
|
|
11
12
|
/** Extra time after sync message generation for WebSocket delivery */
|
|
12
13
|
const SYNC_DELIVERY_MS = 20;
|
|
14
|
+
/** Catalog load timeout for startup and join checks */
|
|
15
|
+
const CATALOG_LOAD_TIMEOUT_MS = 10_000;
|
|
13
16
|
/**
|
|
14
17
|
* Wait for pending sync messages to be generated and delivered.
|
|
15
18
|
*
|
|
@@ -36,29 +39,101 @@ async function waitForSyncFlush(repo, documentId) {
|
|
|
36
39
|
repo.on("doc-metrics", onMetrics);
|
|
37
40
|
});
|
|
38
41
|
}
|
|
42
|
+
function getCatalogMarkerPath(storagePath) {
|
|
43
|
+
return path.join(storagePath, `${CATALOG_DOC_KEY}.id`);
|
|
44
|
+
}
|
|
39
45
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
46
|
+
* Begin a catalog marker switch for join flows.
|
|
47
|
+
*
|
|
48
|
+
* This is the storage-layer entrypoint that explicit join workflows use.
|
|
49
|
+
* The caller should:
|
|
50
|
+
* 1) validate target catalog reachability,
|
|
51
|
+
* 2) perform switch-dependent work,
|
|
52
|
+
* 3) call commit() on success or rollback() on failure.
|
|
42
53
|
*/
|
|
43
|
-
export
|
|
44
|
-
|
|
45
|
-
fs.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
});
|
|
50
|
-
// Load or create catalog document
|
|
51
|
-
const catalog = await loadOrCreateCatalog(repo, storagePath);
|
|
54
|
+
export function beginCatalogJoinSwitch(storagePath, targetCatalogId) {
|
|
55
|
+
const markerPath = getCatalogMarkerPath(storagePath);
|
|
56
|
+
const previousCatalogId = fs.existsSync(markerPath)
|
|
57
|
+
? fs.readFileSync(markerPath, "utf-8").trim()
|
|
58
|
+
: null;
|
|
59
|
+
fs.writeFileSync(markerPath, targetCatalogId, "utf-8");
|
|
52
60
|
return {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
previousCatalogId,
|
|
62
|
+
targetCatalogId,
|
|
63
|
+
commit() {
|
|
64
|
+
// Marker already points at target; nothing else needed yet.
|
|
65
|
+
},
|
|
66
|
+
rollback() {
|
|
67
|
+
if (previousCatalogId) {
|
|
68
|
+
fs.writeFileSync(markerPath, previousCatalogId, "utf-8");
|
|
69
|
+
}
|
|
70
|
+
else if (fs.existsSync(markerPath)) {
|
|
71
|
+
fs.unlinkSync(markerPath);
|
|
72
|
+
}
|
|
59
73
|
},
|
|
60
74
|
};
|
|
61
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Initialize persistent storage for bootstrap flows.
|
|
78
|
+
*
|
|
79
|
+
* Bootstrap behavior:
|
|
80
|
+
* - No marker: create initial catalog
|
|
81
|
+
* - Existing marker: load that catalog
|
|
82
|
+
* - Existing but unreachable marker: fail (do not implicitly create a new catalog)
|
|
83
|
+
*/
|
|
84
|
+
export async function initBootstrapStorage(storagePath, repo) {
|
|
85
|
+
await ensureAutomergeWasmInitialized();
|
|
86
|
+
fs.mkdirSync(storagePath, { recursive: true });
|
|
87
|
+
const ownsRepo = repo === undefined;
|
|
88
|
+
const actualRepo = repo ??
|
|
89
|
+
new Repo({
|
|
90
|
+
storage: new NodeFSStorageAdapter(storagePath),
|
|
91
|
+
});
|
|
92
|
+
try {
|
|
93
|
+
const catalog = await loadOrBootstrapCatalog(actualRepo, storagePath);
|
|
94
|
+
return createPersistentStorage(actualRepo, catalog);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (ownsRepo) {
|
|
98
|
+
await shutdownRepoQuietly(actualRepo);
|
|
99
|
+
}
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Initialize persistent storage for explicit join flows.
|
|
105
|
+
*
|
|
106
|
+
* Join behavior:
|
|
107
|
+
* - Requires the target catalog to be reachable
|
|
108
|
+
* - Never creates a fresh catalog implicitly
|
|
109
|
+
*/
|
|
110
|
+
export async function initJoinStorage(storagePath, targetCatalogId, repo) {
|
|
111
|
+
await ensureAutomergeWasmInitialized();
|
|
112
|
+
fs.mkdirSync(storagePath, { recursive: true });
|
|
113
|
+
const ownsRepo = repo === undefined;
|
|
114
|
+
const actualRepo = repo ??
|
|
115
|
+
new Repo({
|
|
116
|
+
storage: new NodeFSStorageAdapter(storagePath),
|
|
117
|
+
});
|
|
118
|
+
try {
|
|
119
|
+
const catalog = await loadCatalogById(actualRepo, targetCatalogId, "join");
|
|
120
|
+
return createPersistentStorage(actualRepo, catalog);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (ownsRepo) {
|
|
124
|
+
await shutdownRepoQuietly(actualRepo);
|
|
125
|
+
}
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Backward-compatible storage initialization entrypoint.
|
|
131
|
+
*
|
|
132
|
+
* Defaults to bootstrap semantics.
|
|
133
|
+
*/
|
|
134
|
+
export async function initStorage(storagePath, repo) {
|
|
135
|
+
return initBootstrapStorage(storagePath, repo);
|
|
136
|
+
}
|
|
62
137
|
/**
|
|
63
138
|
* Initialize ephemeral storage with no filesystem persistence.
|
|
64
139
|
* Used by CLI when syncing with a running Electron instance.
|
|
@@ -71,8 +146,9 @@ export async function initStorage(storagePath) {
|
|
|
71
146
|
* needs a sync peer to provide the document contents.
|
|
72
147
|
*/
|
|
73
148
|
export async function initEphemeralStorage(storagePath) {
|
|
149
|
+
await ensureAutomergeWasmInitialized();
|
|
74
150
|
// Read the catalog document ID from the marker file
|
|
75
|
-
const markerPath =
|
|
151
|
+
const markerPath = getCatalogMarkerPath(storagePath);
|
|
76
152
|
if (!fs.existsSync(markerPath)) {
|
|
77
153
|
throw new Error("No catalog marker found. Run the Electron app or CLI standalone first to create data.");
|
|
78
154
|
}
|
|
@@ -122,20 +198,82 @@ export async function initEphemeralStorage(storagePath) {
|
|
|
122
198
|
},
|
|
123
199
|
};
|
|
124
200
|
}
|
|
201
|
+
async function shutdownRepoQuietly(repo) {
|
|
202
|
+
try {
|
|
203
|
+
await repo.flush();
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// Safe to ignore — requesting docs have no content to save
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
209
|
+
await repo.shutdown();
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// Safe to ignore — shutdown may race with pending requesting docs
|
|
213
|
+
}
|
|
214
|
+
// Allow queued storage adapter writes to settle before callers clean up
|
|
215
|
+
// temporary directories. A full sync-throttle window avoids ENOENT races
|
|
216
|
+
// observed in repeated failure-path teardown tests.
|
|
217
|
+
await new Promise((resolve) => setTimeout(resolve, SYNC_THROTTLE_MS + SYNC_DELIVERY_MS));
|
|
218
|
+
}
|
|
219
|
+
function createPersistentStorage(repo, catalog) {
|
|
220
|
+
return {
|
|
221
|
+
repo,
|
|
222
|
+
catalog,
|
|
223
|
+
ephemeral: false,
|
|
224
|
+
async close() {
|
|
225
|
+
// Both flush() and shutdown() (which calls flush internally) can throw
|
|
226
|
+
// "DocHandle is not ready" when a document is in "requesting" state —
|
|
227
|
+
// this happens when a connected remote peer is mid-sync during close.
|
|
228
|
+
// Requesting documents have no local content to persist, so ignoring
|
|
229
|
+
// the error is safe and correct.
|
|
230
|
+
try {
|
|
231
|
+
await repo.flush();
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// Safe to ignore — requesting docs have no content to save
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
await repo.shutdown();
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// shutdown() calls flush() internally — same safe-to-ignore error
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
125
245
|
/**
|
|
126
|
-
* Load existing catalog document
|
|
127
|
-
*
|
|
246
|
+
* Load existing catalog document from marker if present.
|
|
247
|
+
* If no marker exists, bootstrap a new catalog.
|
|
128
248
|
*/
|
|
129
|
-
async function
|
|
130
|
-
const markerPath =
|
|
131
|
-
// Try to load existing catalog
|
|
249
|
+
async function loadOrBootstrapCatalog(repo, storagePath) {
|
|
250
|
+
const markerPath = getCatalogMarkerPath(storagePath);
|
|
132
251
|
if (fs.existsSync(markerPath)) {
|
|
133
252
|
const docId = fs.readFileSync(markerPath, "utf-8").trim();
|
|
134
|
-
|
|
253
|
+
return loadCatalogById(repo, docId, "bootstrap");
|
|
254
|
+
}
|
|
255
|
+
return createBootstrapCatalog(repo, markerPath);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Load an existing catalog by ID and run schema migration if needed.
|
|
259
|
+
* Does not create a replacement catalog on failure.
|
|
260
|
+
*/
|
|
261
|
+
async function loadCatalogById(repo, docId, mode) {
|
|
262
|
+
try {
|
|
263
|
+
const handle = await repo.find(docId, {
|
|
264
|
+
signal: AbortSignal.timeout(CATALOG_LOAD_TIMEOUT_MS),
|
|
265
|
+
});
|
|
135
266
|
migrateCatalog(handle);
|
|
136
267
|
return handle;
|
|
137
268
|
}
|
|
138
|
-
|
|
269
|
+
catch {
|
|
270
|
+
throw new Error(`[storage] ${mode} catalog ${docId} not reachable within ${CATALOG_LOAD_TIMEOUT_MS}ms`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Create a new catalog and persist its marker.
|
|
275
|
+
*/
|
|
276
|
+
function createBootstrapCatalog(repo, markerPath) {
|
|
139
277
|
const handle = repo.create();
|
|
140
278
|
handle.change((doc) => {
|
|
141
279
|
const empty = createEmptyCatalog();
|
|
@@ -146,9 +284,10 @@ async function loadOrCreateCatalog(repo, storagePath) {
|
|
|
146
284
|
doc.habits = empty.habits;
|
|
147
285
|
doc.habitLogDocIds = empty.habitLogDocIds;
|
|
148
286
|
doc.taskListDocIds = empty.taskListDocIds;
|
|
287
|
+
doc.notesBucketDocIds = empty.notesBucketDocIds;
|
|
288
|
+
doc.noteBucketByNoteId = empty.noteBucketByNoteId;
|
|
149
289
|
doc.settings = empty.settings;
|
|
150
290
|
});
|
|
151
|
-
// Save document ID for next session
|
|
152
291
|
fs.writeFileSync(markerPath, handle.documentId, "utf-8");
|
|
153
292
|
return handle;
|
|
154
293
|
}
|
|
@@ -176,6 +315,10 @@ function migrateCatalog(handle) {
|
|
|
176
315
|
needsMigration = true;
|
|
177
316
|
if (doc.habitLogDocIds === undefined || doc.habitLogDocIds === null)
|
|
178
317
|
needsMigration = true;
|
|
318
|
+
if (doc.notesBucketDocIds === undefined || doc.notesBucketDocIds === null)
|
|
319
|
+
needsMigration = true;
|
|
320
|
+
if (doc.noteBucketByNoteId === undefined || doc.noteBucketByNoteId === null)
|
|
321
|
+
needsMigration = true;
|
|
179
322
|
if (doc.settings === undefined || doc.settings === null)
|
|
180
323
|
needsMigration = true;
|
|
181
324
|
if (doc.version === undefined || doc.version === null)
|
|
@@ -195,6 +338,10 @@ function migrateCatalog(handle) {
|
|
|
195
338
|
d.taskListDocIds = defaults.taskListDocIds;
|
|
196
339
|
if (d.habitLogDocIds === undefined || d.habitLogDocIds === null)
|
|
197
340
|
d.habitLogDocIds = defaults.habitLogDocIds;
|
|
341
|
+
if (d.notesBucketDocIds === undefined || d.notesBucketDocIds === null)
|
|
342
|
+
d.notesBucketDocIds = defaults.notesBucketDocIds;
|
|
343
|
+
if (d.noteBucketByNoteId === undefined || d.noteBucketByNoteId === null)
|
|
344
|
+
d.noteBucketByNoteId = defaults.noteBucketByNoteId;
|
|
198
345
|
if (d.settings === undefined || d.settings === null)
|
|
199
346
|
d.settings = defaults.settings;
|
|
200
347
|
if (d.version === undefined || d.version === null)
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/sync-client.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Repo } from "@automerge/automerge-repo";
|
|
2
|
+
import { WebSocketClientAdapter } from "@automerge/automerge-repo-network-websocket";
|
|
2
3
|
export declare const DEFAULT_SYNC_URL = "ws://127.0.0.1:24377";
|
|
3
4
|
/**
|
|
4
5
|
* Add a sync client adapter to a Repo, connecting to a remote sync server.
|
|
@@ -8,6 +9,19 @@ export declare const DEFAULT_SYNC_URL = "ws://127.0.0.1:24377";
|
|
|
8
9
|
* @param retryInterval - Retry interval in ms if connection fails (default: 500ms for local)
|
|
9
10
|
*/
|
|
10
11
|
export declare function connectSyncClient(repo: Repo, url?: string, retryInterval?: number): Promise<() => void>;
|
|
12
|
+
/**
|
|
13
|
+
* Add a remote sync adapter to a Repo without blocking.
|
|
14
|
+
*
|
|
15
|
+
* Unlike connectSyncClient(), this does NOT await the connection — the remote
|
|
16
|
+
* server may be temporarily unreachable. The adapter reconnects automatically
|
|
17
|
+
* at the given retryInterval.
|
|
18
|
+
*
|
|
19
|
+
* Returns the adapter so callers can listen for connection events and remove it.
|
|
20
|
+
*
|
|
21
|
+
* @param retryInterval - Retry interval in ms on disconnect (default: 30s for remote)
|
|
22
|
+
*/
|
|
23
|
+
export declare function addRemoteSyncAdapter(repo: Repo, url: string, retryInterval?: number): WebSocketClientAdapter;
|
|
24
|
+
export declare function hardenWebSocketClientAdapterErrors(adapter: WebSocketClientAdapter): void;
|
|
11
25
|
/**
|
|
12
26
|
* Check if a sync server is reachable at the given URL.
|
|
13
27
|
* Returns true if the connection succeeds within the timeout.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAErF,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AAqBvD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,GAAG,GAAE,MAAyB,EAC9B,aAAa,SAAM,GAClB,OAAO,CAAC,MAAM,IAAI,CAAC,CAerB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,EACX,aAAa,SAAQ,GACpB,sBAAsB,CAKxB;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAexF;AAmCD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,GAAE,MAAyB,EAC9B,SAAS,SAAM,GACd,OAAO,CAAC,OAAO,CAAC,CA2BlB"}
|
package/dist/sync-client.js
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import { WebSocketClientAdapter } from "@automerge/automerge-repo-network-websocket";
|
|
2
2
|
export const DEFAULT_SYNC_URL = "ws://127.0.0.1:24377";
|
|
3
|
+
const TRANSIENT_SOCKET_ERROR_CODES = new Set([
|
|
4
|
+
"ECONNREFUSED",
|
|
5
|
+
"ECONNRESET",
|
|
6
|
+
"EPIPE",
|
|
7
|
+
"ETIMEDOUT",
|
|
8
|
+
"EHOSTUNREACH",
|
|
9
|
+
"ENETUNREACH",
|
|
10
|
+
"ENOTFOUND",
|
|
11
|
+
"EAI_AGAIN",
|
|
12
|
+
]);
|
|
13
|
+
const TRANSIENT_SOCKET_ERROR_MESSAGE_PATTERNS = [
|
|
14
|
+
/failed to connect/i,
|
|
15
|
+
/connection failed/i,
|
|
16
|
+
/connect ECONNREFUSED/i,
|
|
17
|
+
/read ECONNRESET/i,
|
|
18
|
+
/socket hang up/i,
|
|
19
|
+
];
|
|
3
20
|
/**
|
|
4
21
|
* Add a sync client adapter to a Repo, connecting to a remote sync server.
|
|
5
22
|
* Waits for the adapter to be ready before returning.
|
|
@@ -9,6 +26,7 @@ export const DEFAULT_SYNC_URL = "ws://127.0.0.1:24377";
|
|
|
9
26
|
*/
|
|
10
27
|
export async function connectSyncClient(repo, url = DEFAULT_SYNC_URL, retryInterval = 500) {
|
|
11
28
|
const adapter = new WebSocketClientAdapter(url, retryInterval);
|
|
29
|
+
hardenWebSocketClientAdapterErrors(adapter);
|
|
12
30
|
repo.networkSubsystem.addNetworkAdapter(adapter);
|
|
13
31
|
// Wait for the WebSocket connection to establish
|
|
14
32
|
await adapter.whenReady();
|
|
@@ -21,6 +39,62 @@ export async function connectSyncClient(repo, url = DEFAULT_SYNC_URL, retryInter
|
|
|
21
39
|
}
|
|
22
40
|
};
|
|
23
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Add a remote sync adapter to a Repo without blocking.
|
|
44
|
+
*
|
|
45
|
+
* Unlike connectSyncClient(), this does NOT await the connection — the remote
|
|
46
|
+
* server may be temporarily unreachable. The adapter reconnects automatically
|
|
47
|
+
* at the given retryInterval.
|
|
48
|
+
*
|
|
49
|
+
* Returns the adapter so callers can listen for connection events and remove it.
|
|
50
|
+
*
|
|
51
|
+
* @param retryInterval - Retry interval in ms on disconnect (default: 30s for remote)
|
|
52
|
+
*/
|
|
53
|
+
export function addRemoteSyncAdapter(repo, url, retryInterval = 30000) {
|
|
54
|
+
const adapter = new WebSocketClientAdapter(url, retryInterval);
|
|
55
|
+
hardenWebSocketClientAdapterErrors(adapter);
|
|
56
|
+
repo.networkSubsystem.addNetworkAdapter(adapter);
|
|
57
|
+
return adapter;
|
|
58
|
+
}
|
|
59
|
+
export function hardenWebSocketClientAdapterErrors(adapter) {
|
|
60
|
+
const originalOnError = adapter.onError;
|
|
61
|
+
adapter.onError = (event) => {
|
|
62
|
+
try {
|
|
63
|
+
originalOnError(event);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const eventError = getEventError(event);
|
|
67
|
+
if (isTransientSocketError(error) || isTransientSocketError(eventError)) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function getEventError(event) {
|
|
75
|
+
if (typeof event !== "object" || event === null) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
if (!("error" in event)) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
return event.error;
|
|
82
|
+
}
|
|
83
|
+
function isTransientSocketError(error) {
|
|
84
|
+
if (typeof error !== "object" || error === null) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
const code = error.code;
|
|
88
|
+
if (typeof code === "string" && TRANSIENT_SOCKET_ERROR_CODES.has(code)) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
const message = error.message;
|
|
92
|
+
if (typeof message === "string" &&
|
|
93
|
+
TRANSIENT_SOCKET_ERROR_MESSAGE_PATTERNS.some((pattern) => pattern.test(message))) {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
24
98
|
/**
|
|
25
99
|
* Check if a sync server is reachable at the given URL.
|
|
26
100
|
* Returns true if the connection succeeds within the timeout.
|
package/dist/sync-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-client.js","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAErF,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAU,EACV,GAAG,GAAW,gBAAgB,EAC9B,aAAa,GAAG,GAAG,EACE;IACrB,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC/D,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEjD,iDAAiD;IACjD,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IAE1B,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,CAAC;YACH,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,qDAAmD;QACrD,CAAC;IAAA,CACF,CAAC;AAAA,CACH;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAG,GAAW,gBAAgB,EAC9B,SAAS,GAAG,GAAG,EACG;IAClB,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,CAAC;QAAA,CAChB,EAAE,SAAS,CAAC,CAAC;QAEd,IAAI,CAAC;YACH,2CAA2C;YAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;gBAC5C,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;gBAE9B,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,CAAC;gBAAA,CACf,CAAC;gBAEF,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;oBACjB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,CAAC;gBAAA,CAChB,CAAC;YAAA,CACH,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IAAA,CACF,CAAC,CAAC;AAAA,CACJ"}
|
|
1
|
+
{"version":3,"file":"sync-client.js","sourceRoot":"","sources":["../src/sync-client.ts"],"names":[],"mappings":"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"}
|
package/dist/todu.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CreateHabitInput, CreateLabelInput, CreateNoteInput, CreateProjectInput, CreateRecurringInput, CreateTaskInput, Habit, HabitEntry, HabitFilter, HabitHistoryEntry, HabitId, HabitStreak, Label, LabelId, Note, NoteFilter, NoteId, Project, ProjectFilter, ProjectId, RecurringFilter, RecurringId, RecurringTemplate, Result, Task, TaskFilter, TaskId, TaskSortOptions, TaskWithDetail, UpdateHabitInput, UpdateLabelInput, UpdateNoteInput, UpdateProjectInput, UpdateRecurringInput, UpdateTaskInput } from "@todu/core";
|
|
1
|
+
import type { CreateHabitInput, CreateLabelInput, CreateNoteInput, CreateProjectInput, CreateRecurringInput, CreateTaskInput, Habit, HabitEntry, HabitFilter, HabitHistoryEntry, HabitId, HabitStreak, Label, LabelId, Note, NoteFilter, NoteId, Project, ProjectFilter, ProjectId, RecurringFilter, RecurringId, RecurringTemplate, RemoteSyncConfig, Result, Task, TaskFilter, TaskId, TaskSortOptions, TaskWithDetail, UpdateHabitInput, UpdateLabelInput, UpdateNoteInput, UpdateProjectInput, UpdateRecurringInput, UpdateTaskInput } from "@todu/core";
|
|
2
2
|
import type { UpcomingOccurrence } from "./recurring.js";
|
|
3
3
|
export interface ToduConfig {
|
|
4
4
|
/** Path to data storage directory */
|
|
@@ -9,6 +9,27 @@ export interface ToduConfig {
|
|
|
9
9
|
syncPort?: number;
|
|
10
10
|
/** Try to connect to a running sync server (used by CLI) */
|
|
11
11
|
syncClient?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Startup template processing policy.
|
|
14
|
+
*
|
|
15
|
+
* Processing is disabled by default. Hosts that own automation policy
|
|
16
|
+
* (for example daemon runtime) opt in explicitly.
|
|
17
|
+
*/
|
|
18
|
+
startupTemplateProcessing?: {
|
|
19
|
+
/** Run registered processors during startup when true. */
|
|
20
|
+
enabled?: boolean;
|
|
21
|
+
/** Optional generic exclusions controlled by the host. */
|
|
22
|
+
excludeTypes?: string[];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Remote multi-device sync configuration.
|
|
26
|
+
* When provided, connects a second WebSocketClientAdapter to the remote server.
|
|
27
|
+
* Used by Electron and toduai serve.
|
|
28
|
+
*
|
|
29
|
+
* IMPORTANT: Never use wss://sync.todu.sh in development or tests.
|
|
30
|
+
* Use ws://localhost:3030 via `make dev`.
|
|
31
|
+
*/
|
|
32
|
+
remoteSync?: RemoteSyncConfig;
|
|
12
33
|
}
|
|
13
34
|
export interface ProjectNamespace {
|
|
14
35
|
create(input: CreateProjectInput): Promise<Result<Project>>;
|
|
@@ -91,6 +112,17 @@ export interface SyncNamespace {
|
|
|
91
112
|
stop(): Promise<void>;
|
|
92
113
|
/** Get current sync status (local mode + remote state). */
|
|
93
114
|
status(): SyncStatus;
|
|
115
|
+
/**
|
|
116
|
+
* Register a callback for remote sync state changes.
|
|
117
|
+
* Fires when the remote connection transitions between
|
|
118
|
+
* connected/disconnected. Returns a cleanup function.
|
|
119
|
+
*/
|
|
120
|
+
onStatusChange(callback: (status: SyncStatus) => void): () => void;
|
|
121
|
+
/**
|
|
122
|
+
* Get the catalog document ID for this instance.
|
|
123
|
+
* Used as a join code so other devices can sync with this one.
|
|
124
|
+
*/
|
|
125
|
+
getCatalogId(): string;
|
|
94
126
|
}
|
|
95
127
|
export interface ConfigNamespace {
|
|
96
128
|
get(): ToduConfig;
|
package/dist/todu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todu.d.ts","sourceRoot":"","sources":["../src/todu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,KAAK,EACL,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,KAAK,EACL,OAAO,EACP,IAAI,EACJ,UAAU,EACV,MAAM,EACN,OAAO,EACP,aAAa,EACb,SAAS,EACT,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,IAAI,EACJ,UAAU,EACV,MAAM,EACN,eAAe,EACf,cAAc,EAEd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMzD,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IAEpB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"todu.d.ts","sourceRoot":"","sources":["../src/todu.ts"],"names":[],"mappings":"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"}
|
package/dist/todu.js
CHANGED
package/dist/todu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todu.js","sourceRoot":"","sources":["../src/todu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"todu.js","sourceRoot":"","sources":["../src/todu.ts"],"names":[],"mappings":"AAyNA,+EAA+E;AAC/E,gEAA8D;AAC9D,+EAA+E;AAE/E,SAAS,cAAc,GAAsC;IAC3D,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAAA,CACrD;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAkB,EAAoC;IACzF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;IAEpC,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb;QACD,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;SACb;QACD,KAAK,EAAE;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb;QACD,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb;QACD,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;SACd;QACD,KAAK,EAAE;YACL,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;SACd;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;YAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;YAC7B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,YAA6B,EAAE;gBAC9C,MAAM,EAAE,EAAE,KAAK,EAAE,cAAiC,EAAE;aACrD,CAAC;YACF,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC;YAC9B,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;SACvB;QACD,MAAM,EAAE;YACN,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM;SAClB;KACF,CAAC;AAAA,CACH"}
|