@prabhask5/stellar-engine 1.1.6 → 1.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/README.md +68 -25
- package/dist/actions/remoteChange.d.ts +143 -18
- package/dist/actions/remoteChange.d.ts.map +1 -1
- package/dist/actions/remoteChange.js +182 -58
- package/dist/actions/remoteChange.js.map +1 -1
- package/dist/actions/truncateTooltip.d.ts +56 -0
- package/dist/actions/truncateTooltip.d.ts.map +1 -0
- package/dist/actions/truncateTooltip.js +312 -0
- package/dist/actions/truncateTooltip.js.map +1 -0
- package/dist/auth/admin.d.ts +40 -3
- package/dist/auth/admin.d.ts.map +1 -1
- package/dist/auth/admin.js +45 -5
- package/dist/auth/admin.js.map +1 -1
- package/dist/auth/crypto.d.ts +55 -5
- package/dist/auth/crypto.d.ts.map +1 -1
- package/dist/auth/crypto.js +58 -5
- package/dist/auth/crypto.js.map +1 -1
- package/dist/auth/deviceVerification.d.ts +236 -20
- package/dist/auth/deviceVerification.d.ts.map +1 -1
- package/dist/auth/deviceVerification.js +293 -40
- package/dist/auth/deviceVerification.js.map +1 -1
- package/dist/auth/displayUtils.d.ts +98 -0
- package/dist/auth/displayUtils.d.ts.map +1 -0
- package/dist/auth/displayUtils.js +133 -0
- package/dist/auth/displayUtils.js.map +1 -0
- package/dist/auth/loginGuard.d.ts +108 -14
- package/dist/auth/loginGuard.d.ts.map +1 -1
- package/dist/auth/loginGuard.js +153 -31
- package/dist/auth/loginGuard.js.map +1 -1
- package/dist/auth/offlineCredentials.d.ts +132 -15
- package/dist/auth/offlineCredentials.d.ts.map +1 -1
- package/dist/auth/offlineCredentials.js +167 -23
- package/dist/auth/offlineCredentials.js.map +1 -1
- package/dist/auth/offlineLogin.d.ts +96 -10
- package/dist/auth/offlineLogin.d.ts.map +1 -1
- package/dist/auth/offlineLogin.js +82 -15
- package/dist/auth/offlineLogin.js.map +1 -1
- package/dist/auth/offlineSession.d.ts +83 -9
- package/dist/auth/offlineSession.d.ts.map +1 -1
- package/dist/auth/offlineSession.js +104 -13
- package/dist/auth/offlineSession.js.map +1 -1
- package/dist/auth/resolveAuthState.d.ts +70 -8
- package/dist/auth/resolveAuthState.d.ts.map +1 -1
- package/dist/auth/resolveAuthState.js +142 -46
- package/dist/auth/resolveAuthState.js.map +1 -1
- package/dist/auth/singleUser.d.ts +390 -37
- package/dist/auth/singleUser.d.ts.map +1 -1
- package/dist/auth/singleUser.js +505 -133
- package/dist/auth/singleUser.js.map +1 -1
- package/dist/bin/install-pwa.d.ts +25 -0
- package/dist/bin/install-pwa.d.ts.map +1 -0
- package/dist/bin/install-pwa.js +2197 -0
- package/dist/bin/install-pwa.js.map +1 -0
- package/dist/config.d.ts +132 -12
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +87 -9
- package/dist/config.js.map +1 -1
- package/dist/conflicts.d.ts +246 -23
- package/dist/conflicts.d.ts.map +1 -1
- package/dist/conflicts.js +495 -46
- package/dist/conflicts.js.map +1 -1
- package/dist/data.d.ts +338 -18
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +385 -34
- package/dist/data.js.map +1 -1
- package/dist/database.d.ts +72 -14
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +120 -29
- package/dist/database.js.map +1 -1
- package/dist/debug.d.ts +77 -1
- package/dist/debug.d.ts.map +1 -1
- package/dist/debug.js +88 -1
- package/dist/debug.js.map +1 -1
- package/dist/deviceId.d.ts +38 -7
- package/dist/deviceId.d.ts.map +1 -1
- package/dist/deviceId.js +68 -10
- package/dist/deviceId.js.map +1 -1
- package/dist/engine.d.ts +175 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +831 -110
- package/dist/engine.js.map +1 -1
- package/dist/entries/actions.d.ts +14 -0
- package/dist/entries/actions.d.ts.map +1 -1
- package/dist/entries/actions.js +27 -1
- package/dist/entries/actions.js.map +1 -1
- package/dist/entries/auth.d.ts +16 -0
- package/dist/entries/auth.d.ts.map +1 -1
- package/dist/entries/auth.js +73 -1
- package/dist/entries/auth.js.map +1 -1
- package/dist/entries/config.d.ts +12 -0
- package/dist/entries/config.d.ts.map +1 -1
- package/dist/entries/config.js +18 -1
- package/dist/entries/config.js.map +1 -1
- package/dist/entries/kit.d.ts +21 -9
- package/dist/entries/kit.d.ts.map +1 -1
- package/dist/entries/kit.js +57 -8
- package/dist/entries/kit.js.map +1 -1
- package/dist/entries/stores.d.ts +11 -0
- package/dist/entries/stores.d.ts.map +1 -1
- package/dist/entries/stores.js +43 -2
- package/dist/entries/stores.js.map +1 -1
- package/dist/entries/types.d.ts +11 -1
- package/dist/entries/types.d.ts.map +1 -1
- package/dist/entries/types.js +10 -0
- package/dist/entries/types.js.map +1 -1
- package/dist/entries/utils.d.ts +7 -1
- package/dist/entries/utils.d.ts.map +1 -1
- package/dist/entries/utils.js +23 -2
- package/dist/entries/utils.js.map +1 -1
- package/dist/entries/vite.d.ts +20 -0
- package/dist/entries/vite.d.ts.map +1 -0
- package/dist/entries/vite.js +26 -0
- package/dist/entries/vite.js.map +1 -0
- package/dist/index.d.ts +33 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +176 -21
- package/dist/index.js.map +1 -1
- package/dist/kit/auth.d.ts +80 -0
- package/dist/kit/auth.d.ts.map +1 -0
- package/dist/kit/auth.js +72 -0
- package/dist/kit/auth.js.map +1 -0
- package/dist/kit/confirm.d.ts +111 -0
- package/dist/kit/confirm.d.ts.map +1 -0
- package/dist/kit/confirm.js +169 -0
- package/dist/kit/confirm.js.map +1 -0
- package/dist/kit/loads.d.ts +189 -0
- package/dist/kit/loads.d.ts.map +1 -0
- package/dist/kit/loads.js +205 -0
- package/dist/kit/loads.js.map +1 -0
- package/dist/kit/server.d.ts +175 -0
- package/dist/kit/server.d.ts.map +1 -0
- package/dist/kit/server.js +297 -0
- package/dist/kit/server.js.map +1 -0
- package/dist/kit/sw.d.ts +176 -0
- package/dist/kit/sw.d.ts.map +1 -0
- package/dist/kit/sw.js +320 -0
- package/dist/kit/sw.js.map +1 -0
- package/dist/queue.d.ts +274 -0
- package/dist/queue.d.ts.map +1 -1
- package/dist/queue.js +556 -38
- package/dist/queue.js.map +1 -1
- package/dist/realtime.d.ts +241 -27
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +633 -109
- package/dist/realtime.js.map +1 -1
- package/dist/runtime/runtimeConfig.d.ts +91 -16
- package/dist/runtime/runtimeConfig.d.ts.map +1 -1
- package/dist/runtime/runtimeConfig.js +146 -19
- package/dist/runtime/runtimeConfig.js.map +1 -1
- package/dist/stores/authState.d.ts +150 -11
- package/dist/stores/authState.d.ts.map +1 -1
- package/dist/stores/authState.js +169 -17
- package/dist/stores/authState.js.map +1 -1
- package/dist/stores/network.d.ts +39 -0
- package/dist/stores/network.d.ts.map +1 -1
- package/dist/stores/network.js +169 -16
- package/dist/stores/network.js.map +1 -1
- package/dist/stores/remoteChanges.d.ts +327 -52
- package/dist/stores/remoteChanges.d.ts.map +1 -1
- package/dist/stores/remoteChanges.js +337 -75
- package/dist/stores/remoteChanges.js.map +1 -1
- package/dist/stores/sync.d.ts +130 -0
- package/dist/stores/sync.d.ts.map +1 -1
- package/dist/stores/sync.js +167 -7
- package/dist/stores/sync.js.map +1 -1
- package/dist/supabase/auth.d.ts +326 -19
- package/dist/supabase/auth.d.ts.map +1 -1
- package/dist/supabase/auth.js +374 -26
- package/dist/supabase/auth.js.map +1 -1
- package/dist/supabase/client.d.ts +79 -6
- package/dist/supabase/client.d.ts.map +1 -1
- package/dist/supabase/client.js +158 -15
- package/dist/supabase/client.js.map +1 -1
- package/dist/supabase/validate.d.ts +101 -7
- package/dist/supabase/validate.d.ts.map +1 -1
- package/dist/supabase/validate.js +117 -8
- package/dist/supabase/validate.js.map +1 -1
- package/dist/sw/build/vite-plugin.d.ts +74 -0
- package/dist/sw/build/vite-plugin.d.ts.map +1 -0
- package/dist/sw/build/vite-plugin.js +183 -0
- package/dist/sw/build/vite-plugin.js.map +1 -0
- package/dist/sw/sw.js +669 -0
- package/dist/types.d.ts +150 -45
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +12 -10
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +55 -13
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +83 -22
- package/dist/utils.js.map +1 -1
- package/package.json +20 -22
- package/src/components/DeferredChangesBanner.svelte +477 -0
- package/src/components/SyncStatus.svelte +1732 -0
- package/dist/crdt/awareness.d.ts +0 -54
- package/dist/crdt/awareness.d.ts.map +0 -1
- package/dist/crdt/awareness.js +0 -219
- package/dist/crdt/awareness.js.map +0 -1
- package/dist/crdt/doc.d.ts +0 -56
- package/dist/crdt/doc.d.ts.map +0 -1
- package/dist/crdt/doc.js +0 -130
- package/dist/crdt/doc.js.map +0 -1
- package/dist/crdt/index.d.ts +0 -15
- package/dist/crdt/index.d.ts.map +0 -1
- package/dist/crdt/index.js +0 -20
- package/dist/crdt/index.js.map +0 -1
- package/dist/crdt/offline.d.ts +0 -91
- package/dist/crdt/offline.d.ts.map +0 -1
- package/dist/crdt/offline.js +0 -353
- package/dist/crdt/offline.js.map +0 -1
- package/dist/crdt/sync.d.ts +0 -58
- package/dist/crdt/sync.d.ts.map +0 -1
- package/dist/crdt/sync.js +0 -399
- package/dist/crdt/sync.js.map +0 -1
- package/dist/crdt/types.d.ts +0 -62
- package/dist/crdt/types.d.ts.map +0 -1
- package/dist/crdt/types.js +0 -7
- package/dist/crdt/types.js.map +0 -1
- package/dist/email/sendEmail.d.ts +0 -31
- package/dist/email/sendEmail.d.ts.map +0 -1
- package/dist/email/sendEmail.js +0 -39
- package/dist/email/sendEmail.js.map +0 -1
- package/dist/email/validateSmtp.d.ts +0 -18
- package/dist/email/validateSmtp.d.ts.map +0 -1
- package/dist/email/validateSmtp.js +0 -33
- package/dist/email/validateSmtp.js.map +0 -1
- package/dist/entries/crdt.d.ts +0 -3
- package/dist/entries/crdt.d.ts.map +0 -1
- package/dist/entries/crdt.js +0 -13
- package/dist/entries/crdt.js.map +0 -1
- package/dist/entries/email.d.ts +0 -4
- package/dist/entries/email.d.ts.map +0 -1
- package/dist/entries/email.js +0 -4
- package/dist/entries/email.js.map +0 -1
- package/dist/kit/authPresets.d.ts +0 -28
- package/dist/kit/authPresets.d.ts.map +0 -1
- package/dist/kit/authPresets.js +0 -23
- package/dist/kit/authPresets.js.map +0 -1
- package/dist/kit/configEndpoint.d.ts +0 -18
- package/dist/kit/configEndpoint.d.ts.map +0 -1
- package/dist/kit/configEndpoint.js +0 -27
- package/dist/kit/configEndpoint.js.map +0 -1
- package/dist/kit/deployEndpoint.d.ts +0 -22
- package/dist/kit/deployEndpoint.d.ts.map +0 -1
- package/dist/kit/deployEndpoint.js +0 -79
- package/dist/kit/deployEndpoint.js.map +0 -1
- package/dist/kit/layoutLoad.d.ts +0 -23
- package/dist/kit/layoutLoad.d.ts.map +0 -1
- package/dist/kit/layoutLoad.js +0 -41
- package/dist/kit/layoutLoad.js.map +0 -1
- package/dist/kit/protectedLoad.d.ts +0 -16
- package/dist/kit/protectedLoad.d.ts.map +0 -1
- package/dist/kit/protectedLoad.js +0 -28
- package/dist/kit/protectedLoad.js.map +0 -1
- package/dist/kit/setupLoad.d.ts +0 -11
- package/dist/kit/setupLoad.d.ts.map +0 -1
- package/dist/kit/setupLoad.js +0 -28
- package/dist/kit/setupLoad.js.map +0 -1
- package/dist/kit/validateEndpoint.d.ts +0 -9
- package/dist/kit/validateEndpoint.d.ts.map +0 -1
- package/dist/kit/validateEndpoint.js +0 -25
- package/dist/kit/validateEndpoint.js.map +0 -1
- package/dist/kit/vercelApi.d.ts +0 -6
- package/dist/kit/vercelApi.d.ts.map +0 -1
- package/dist/kit/vercelApi.js +0 -48
- package/dist/kit/vercelApi.js.map +0 -1
package/dist/crdt/offline.js
DELETED
|
@@ -1,353 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CRDT Offline Cache Management
|
|
3
|
-
*
|
|
4
|
-
* Manages selective offline caching of Yjs document state.
|
|
5
|
-
* Uses a dedicated IndexedDB store separate from y-indexeddb persistence.
|
|
6
|
-
*
|
|
7
|
-
* The active y-indexeddb persistence (from doc.ts) handles documents that are
|
|
8
|
-
* currently open. This module handles explicit offline download/caching for
|
|
9
|
-
* documents the user wants available offline even when not actively editing.
|
|
10
|
-
*/
|
|
11
|
-
import * as Y from 'yjs';
|
|
12
|
-
import { debugLog, debugWarn, debugError } from '../debug';
|
|
13
|
-
import { getEngineConfig } from '../config';
|
|
14
|
-
import { getCrdtDoc } from './doc';
|
|
15
|
-
import { supabase } from '../supabase/client';
|
|
16
|
-
function getOfflineDbName() {
|
|
17
|
-
return `${getEngineConfig().prefix}_offline_crdt`;
|
|
18
|
-
}
|
|
19
|
-
function getObjectStoreName() {
|
|
20
|
-
return 'cached_docs';
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Open the offline cache IndexedDB database.
|
|
24
|
-
* Creates the object store if it doesn't exist.
|
|
25
|
-
*/
|
|
26
|
-
function openOfflineDb() {
|
|
27
|
-
return new Promise((resolve, reject) => {
|
|
28
|
-
const request = indexedDB.open(getOfflineDbName(), 1);
|
|
29
|
-
request.onupgradeneeded = () => {
|
|
30
|
-
const db = request.result;
|
|
31
|
-
if (!db.objectStoreNames.contains(getObjectStoreName())) {
|
|
32
|
-
db.createObjectStore(getObjectStoreName(), { keyPath: 'id' });
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
request.onsuccess = () => resolve(request.result);
|
|
36
|
-
request.onerror = () => reject(request.error);
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Cache a CRDT document for offline access.
|
|
41
|
-
*
|
|
42
|
-
* Serializes the current Yjs state and stores it in IndexedDB.
|
|
43
|
-
* If the document is currently active, uses its live state.
|
|
44
|
-
* Otherwise, fetches the state from Supabase.
|
|
45
|
-
*
|
|
46
|
-
* @param docId - Document/note ID
|
|
47
|
-
*/
|
|
48
|
-
export async function cacheCrdtForOffline(docId) {
|
|
49
|
-
try {
|
|
50
|
-
debugLog('[CRDT Offline] Caching for offline:', docId);
|
|
51
|
-
let state;
|
|
52
|
-
// Prefer live doc state if available
|
|
53
|
-
const doc = getCrdtDoc(docId);
|
|
54
|
-
if (doc) {
|
|
55
|
-
state = Y.encodeStateAsUpdate(doc);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
// Fetch from Supabase
|
|
59
|
-
const { data, error } = await supabase
|
|
60
|
-
.from('note_content')
|
|
61
|
-
.select('yjs_state')
|
|
62
|
-
.eq('note_id', docId)
|
|
63
|
-
.eq('deleted', false)
|
|
64
|
-
.maybeSingle();
|
|
65
|
-
if (error) {
|
|
66
|
-
debugError('[CRDT Offline] Failed to fetch state:', error);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
if (!data?.yjs_state) {
|
|
70
|
-
debugLog('[CRDT Offline] No state to cache for:', docId);
|
|
71
|
-
// Store an empty doc state
|
|
72
|
-
const emptyDoc = new Y.Doc();
|
|
73
|
-
state = Y.encodeStateAsUpdate(emptyDoc);
|
|
74
|
-
emptyDoc.destroy();
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
// Decode base64
|
|
78
|
-
const binary = atob(data.yjs_state);
|
|
79
|
-
state = new Uint8Array(binary.length);
|
|
80
|
-
for (let i = 0; i < binary.length; i++) {
|
|
81
|
-
state[i] = binary.charCodeAt(i);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Store in offline cache
|
|
86
|
-
const db = await openOfflineDb();
|
|
87
|
-
const tx = db.transaction(getObjectStoreName(), 'readwrite');
|
|
88
|
-
const store = tx.objectStore(getObjectStoreName());
|
|
89
|
-
store.put({
|
|
90
|
-
id: docId,
|
|
91
|
-
yjs_state: Array.from(state), // Store as regular array for IndexedDB compatibility
|
|
92
|
-
cached_at: new Date().toISOString()
|
|
93
|
-
});
|
|
94
|
-
await new Promise((resolve, reject) => {
|
|
95
|
-
tx.oncomplete = () => resolve();
|
|
96
|
-
tx.onerror = () => reject(tx.error);
|
|
97
|
-
});
|
|
98
|
-
db.close();
|
|
99
|
-
debugLog('[CRDT Offline] Cached for offline:', docId, `(${state.length} bytes)`);
|
|
100
|
-
}
|
|
101
|
-
catch (e) {
|
|
102
|
-
debugError('[CRDT Offline] Cache error:', e);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Remove a document from the offline cache.
|
|
107
|
-
*
|
|
108
|
-
* @param docId - Document/note ID
|
|
109
|
-
*/
|
|
110
|
-
export async function removeCrdtOfflineCache(docId) {
|
|
111
|
-
try {
|
|
112
|
-
debugLog('[CRDT Offline] Removing cache for:', docId);
|
|
113
|
-
const db = await openOfflineDb();
|
|
114
|
-
const tx = db.transaction(getObjectStoreName(), 'readwrite');
|
|
115
|
-
const store = tx.objectStore(getObjectStoreName());
|
|
116
|
-
store.delete(docId);
|
|
117
|
-
await new Promise((resolve, reject) => {
|
|
118
|
-
tx.oncomplete = () => resolve();
|
|
119
|
-
tx.onerror = () => reject(tx.error);
|
|
120
|
-
});
|
|
121
|
-
db.close();
|
|
122
|
-
}
|
|
123
|
-
catch (e) {
|
|
124
|
-
debugError('[CRDT Offline] Remove cache error:', e);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Check if a document is cached for offline access.
|
|
129
|
-
*
|
|
130
|
-
* @param docId - Document/note ID
|
|
131
|
-
* @returns true if the document is cached
|
|
132
|
-
*/
|
|
133
|
-
export async function isCrdtCachedOffline(docId) {
|
|
134
|
-
try {
|
|
135
|
-
const db = await openOfflineDb();
|
|
136
|
-
const tx = db.transaction(getObjectStoreName(), 'readonly');
|
|
137
|
-
const store = tx.objectStore(getObjectStoreName());
|
|
138
|
-
const result = await new Promise((resolve, reject) => {
|
|
139
|
-
const request = store.get(docId);
|
|
140
|
-
request.onsuccess = () => resolve(request.result);
|
|
141
|
-
request.onerror = () => reject(request.error);
|
|
142
|
-
});
|
|
143
|
-
db.close();
|
|
144
|
-
return !!result;
|
|
145
|
-
}
|
|
146
|
-
catch (e) {
|
|
147
|
-
debugWarn('[CRDT Offline] Check cache error:', e);
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Load a cached CRDT document state from offline storage.
|
|
153
|
-
*
|
|
154
|
-
* Creates a new Y.Doc and applies the cached state to it.
|
|
155
|
-
* The caller is responsible for destroying the returned doc.
|
|
156
|
-
*
|
|
157
|
-
* @param docId - Document/note ID
|
|
158
|
-
* @returns A Y.Doc with the cached state, or null if not cached
|
|
159
|
-
*/
|
|
160
|
-
/**
|
|
161
|
-
* Bridge offline cache to active CRDT doc.
|
|
162
|
-
* If the active doc is empty but we have cached data, apply the cached state.
|
|
163
|
-
*/
|
|
164
|
-
export async function ensureCrdtOfflineData(docId) {
|
|
165
|
-
const doc = getCrdtDoc(docId);
|
|
166
|
-
if (!doc)
|
|
167
|
-
return false;
|
|
168
|
-
const sv = Y.encodeStateVector(doc);
|
|
169
|
-
if (sv.length > 1)
|
|
170
|
-
return false; // Doc already has content
|
|
171
|
-
const cachedDoc = await loadCrdtFromOfflineCache(docId);
|
|
172
|
-
if (!cachedDoc)
|
|
173
|
-
return false;
|
|
174
|
-
Y.applyUpdate(doc, Y.encodeStateAsUpdate(cachedDoc), 'offline-cache');
|
|
175
|
-
cachedDoc.destroy();
|
|
176
|
-
debugLog('[CRDT Offline] Bridged offline cache to active doc:', docId);
|
|
177
|
-
return true;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Get the byte size of a single cached note's CRDT data. Returns 0 if not cached.
|
|
181
|
-
*/
|
|
182
|
-
export async function getCrdtOfflineCacheSize(docId) {
|
|
183
|
-
try {
|
|
184
|
-
const db = await openOfflineDb();
|
|
185
|
-
const tx = db.transaction(getObjectStoreName(), 'readonly');
|
|
186
|
-
const store = tx.objectStore(getObjectStoreName());
|
|
187
|
-
const result = await new Promise((resolve, reject) => {
|
|
188
|
-
const request = store.get(docId);
|
|
189
|
-
request.onsuccess = () => resolve(request.result);
|
|
190
|
-
request.onerror = () => reject(request.error);
|
|
191
|
-
});
|
|
192
|
-
db.close();
|
|
193
|
-
return result?.yjs_state?.length ?? 0;
|
|
194
|
-
}
|
|
195
|
-
catch {
|
|
196
|
-
return 0;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Get the byte size of the CRDT doc currently active (for the note the user is viewing).
|
|
201
|
-
*/
|
|
202
|
-
export function getActiveCrdtDocSize(docId) {
|
|
203
|
-
const doc = getCrdtDoc(docId);
|
|
204
|
-
if (!doc)
|
|
205
|
-
return 0;
|
|
206
|
-
return Y.encodeStateAsUpdate(doc).length;
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Get all cached documents with their sizes.
|
|
210
|
-
*/
|
|
211
|
-
export async function getOfflineCacheStats() {
|
|
212
|
-
try {
|
|
213
|
-
const db = await openOfflineDb();
|
|
214
|
-
const tx = db.transaction(getObjectStoreName(), 'readonly');
|
|
215
|
-
const store = tx.objectStore(getObjectStoreName());
|
|
216
|
-
const entries = [];
|
|
217
|
-
let totalBytes = 0;
|
|
218
|
-
await new Promise((resolve, reject) => {
|
|
219
|
-
const request = store.openCursor();
|
|
220
|
-
request.onsuccess = () => {
|
|
221
|
-
const cursor = request.result;
|
|
222
|
-
if (cursor) {
|
|
223
|
-
const value = cursor.value;
|
|
224
|
-
const sizeBytes = value.yjs_state?.length ?? 0;
|
|
225
|
-
entries.push({ id: value.id, sizeBytes, cachedAt: value.cached_at });
|
|
226
|
-
totalBytes += sizeBytes;
|
|
227
|
-
cursor.continue();
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
resolve();
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
request.onerror = () => reject(request.error);
|
|
234
|
-
});
|
|
235
|
-
db.close();
|
|
236
|
-
return { entries, totalBytes };
|
|
237
|
-
}
|
|
238
|
-
catch {
|
|
239
|
-
return { entries: [], totalBytes: 0 };
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Get device storage estimate (IndexedDB quota and usage).
|
|
244
|
-
*/
|
|
245
|
-
export async function getStorageEstimate() {
|
|
246
|
-
if (!navigator.storage?.estimate)
|
|
247
|
-
return null;
|
|
248
|
-
const est = await navigator.storage.estimate();
|
|
249
|
-
return {
|
|
250
|
-
usage: est.usage ?? 0,
|
|
251
|
-
quota: est.quota ?? 0,
|
|
252
|
-
percentUsed: est.quota ? ((est.usage ?? 0) / est.quota) * 100 : 0
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Format byte count to human-readable string.
|
|
257
|
-
*/
|
|
258
|
-
export function formatBytes(bytes) {
|
|
259
|
-
if (bytes < 1024)
|
|
260
|
-
return `${bytes} B`;
|
|
261
|
-
if (bytes < 1024 * 1024)
|
|
262
|
-
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
263
|
-
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
264
|
-
}
|
|
265
|
-
export async function loadCrdtFromOfflineCache(docId) {
|
|
266
|
-
try {
|
|
267
|
-
const db = await openOfflineDb();
|
|
268
|
-
const tx = db.transaction(getObjectStoreName(), 'readonly');
|
|
269
|
-
const store = tx.objectStore(getObjectStoreName());
|
|
270
|
-
const result = await new Promise((resolve, reject) => {
|
|
271
|
-
const request = store.get(docId);
|
|
272
|
-
request.onsuccess = () => resolve(request.result);
|
|
273
|
-
request.onerror = () => reject(request.error);
|
|
274
|
-
});
|
|
275
|
-
db.close();
|
|
276
|
-
if (!result) {
|
|
277
|
-
debugLog('[CRDT Offline] No cached state found for:', docId);
|
|
278
|
-
return null;
|
|
279
|
-
}
|
|
280
|
-
const doc = new Y.Doc();
|
|
281
|
-
const state = new Uint8Array(result.yjs_state);
|
|
282
|
-
Y.applyUpdate(doc, state, 'offline-cache');
|
|
283
|
-
debugLog('[CRDT Offline] Loaded from cache:', docId, `(cached at ${result.cached_at})`);
|
|
284
|
-
return doc;
|
|
285
|
-
}
|
|
286
|
-
catch (e) {
|
|
287
|
-
debugError('[CRDT Offline] Load cache error:', e);
|
|
288
|
-
return null;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Extract plain text from a note's CRDT blocks.
|
|
293
|
-
*
|
|
294
|
-
* Reads block content from the active doc, offline cache, or Supabase remote.
|
|
295
|
-
* Returns concatenated text content with HTML tags stripped.
|
|
296
|
-
*
|
|
297
|
-
* @param docId - Document/note ID
|
|
298
|
-
* @returns Plain text content of all blocks, or empty string
|
|
299
|
-
*/
|
|
300
|
-
export async function extractCrdtText(docId) {
|
|
301
|
-
let doc = getCrdtDoc(docId);
|
|
302
|
-
let shouldDestroy = false;
|
|
303
|
-
// Try active doc first, then offline cache, then remote
|
|
304
|
-
if (!doc) {
|
|
305
|
-
const cached = await loadCrdtFromOfflineCache(docId);
|
|
306
|
-
if (cached) {
|
|
307
|
-
doc = cached;
|
|
308
|
-
shouldDestroy = true;
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
// Fetch from Supabase
|
|
312
|
-
try {
|
|
313
|
-
const { data, error } = await supabase
|
|
314
|
-
.from('note_content')
|
|
315
|
-
.select('yjs_state')
|
|
316
|
-
.eq('note_id', docId)
|
|
317
|
-
.eq('deleted', false)
|
|
318
|
-
.maybeSingle();
|
|
319
|
-
if (error || !data?.yjs_state)
|
|
320
|
-
return '';
|
|
321
|
-
const binary = atob(data.yjs_state);
|
|
322
|
-
const state = new Uint8Array(binary.length);
|
|
323
|
-
for (let i = 0; i < binary.length; i++) {
|
|
324
|
-
state[i] = binary.charCodeAt(i);
|
|
325
|
-
}
|
|
326
|
-
doc = new Y.Doc();
|
|
327
|
-
Y.applyUpdate(doc, state, 'search-extract');
|
|
328
|
-
shouldDestroy = true;
|
|
329
|
-
}
|
|
330
|
-
catch {
|
|
331
|
-
return '';
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
try {
|
|
336
|
-
const blocksArray = doc.getArray('blocks');
|
|
337
|
-
const texts = [];
|
|
338
|
-
for (const yMap of blocksArray.toArray()) {
|
|
339
|
-
const content = yMap.get('content');
|
|
340
|
-
if (content) {
|
|
341
|
-
// Strip HTML tags to get plain text
|
|
342
|
-
texts.push(content.replace(/<[^>]*>/g, ''));
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
return texts.join(' ');
|
|
346
|
-
}
|
|
347
|
-
finally {
|
|
348
|
-
if (shouldDestroy) {
|
|
349
|
-
doc.destroy();
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
//# sourceMappingURL=offline.js.map
|
package/dist/crdt/offline.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"offline.js","sourceRoot":"","sources":["../../src/crdt/offline.ts"],"names":[],"mappings":"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"}
|
package/dist/crdt/sync.d.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CRDT Realtime Sync via Supabase Broadcast
|
|
3
|
-
*
|
|
4
|
-
* Manages Supabase Realtime broadcast channels for syncing Yjs document updates.
|
|
5
|
-
* Handles:
|
|
6
|
-
* - Broadcasting local Yjs updates to other clients
|
|
7
|
-
* - Receiving and applying remote Yjs updates
|
|
8
|
-
* - Echo suppression via device_id
|
|
9
|
-
* - Checkpoint persistence (full state → note_content table)
|
|
10
|
-
* - Reconnection with state vector diff sync
|
|
11
|
-
* - Debounced checkpoint saves
|
|
12
|
-
*/
|
|
13
|
-
import type { CrdtSyncState } from './types';
|
|
14
|
-
/**
|
|
15
|
-
* Save a checkpoint of the full Yjs state to the note_content table.
|
|
16
|
-
* Uses direct Supabase client calls (bypasses normal engine data path since yjs_state is binary).
|
|
17
|
-
*
|
|
18
|
-
* @param docId - Document/note ID
|
|
19
|
-
*/
|
|
20
|
-
export declare function saveCrdtCheckpoint(docId: string): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Load initial CRDT state from the remote note_content table.
|
|
23
|
-
* Fetches yjs_state and applies it to the local Y.Doc.
|
|
24
|
-
*
|
|
25
|
-
* @param docId - Document/note ID
|
|
26
|
-
*/
|
|
27
|
-
export declare function loadCrdtFromRemote(docId: string): Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* Connect a CRDT document to Supabase Realtime for live sync.
|
|
30
|
-
*
|
|
31
|
-
* Opens a broadcast channel, attaches update listeners, and handles
|
|
32
|
-
* incoming remote updates with echo suppression.
|
|
33
|
-
*
|
|
34
|
-
* @param docId - Document/note ID
|
|
35
|
-
*/
|
|
36
|
-
export declare function connectCrdtRealtime(docId: string): void;
|
|
37
|
-
/**
|
|
38
|
-
* Disconnect a CRDT document from Supabase Realtime.
|
|
39
|
-
*
|
|
40
|
-
* Saves a final checkpoint, removes listeners, and closes the channel.
|
|
41
|
-
*
|
|
42
|
-
* @param docId - Document/note ID
|
|
43
|
-
*/
|
|
44
|
-
export declare function disconnectCrdtRealtime(docId: string): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* Get the sync state for a connected document.
|
|
47
|
-
*
|
|
48
|
-
* @param docId - Document/note ID
|
|
49
|
-
* @returns The sync state if connected, undefined otherwise
|
|
50
|
-
*/
|
|
51
|
-
export declare function getCrdtSyncState(docId: string): CrdtSyncState | undefined;
|
|
52
|
-
/**
|
|
53
|
-
* Check if a document is connected to realtime.
|
|
54
|
-
*
|
|
55
|
-
* @param docId - Document/note ID
|
|
56
|
-
*/
|
|
57
|
-
export declare function isCrdtRealtimeConnected(docId: string): boolean;
|
|
58
|
-
//# sourceMappingURL=sync.d.ts.map
|
package/dist/crdt/sync.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/crdt/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,OAAO,KAAK,EAAwB,aAAa,EAAE,MAAM,SAAS,CAAC;AA4CnE;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDrE;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCrE;AAsBD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CA8MvD;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCzE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9D"}
|