@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.
Files changed (265) hide show
  1. package/README.md +68 -25
  2. package/dist/actions/remoteChange.d.ts +143 -18
  3. package/dist/actions/remoteChange.d.ts.map +1 -1
  4. package/dist/actions/remoteChange.js +182 -58
  5. package/dist/actions/remoteChange.js.map +1 -1
  6. package/dist/actions/truncateTooltip.d.ts +56 -0
  7. package/dist/actions/truncateTooltip.d.ts.map +1 -0
  8. package/dist/actions/truncateTooltip.js +312 -0
  9. package/dist/actions/truncateTooltip.js.map +1 -0
  10. package/dist/auth/admin.d.ts +40 -3
  11. package/dist/auth/admin.d.ts.map +1 -1
  12. package/dist/auth/admin.js +45 -5
  13. package/dist/auth/admin.js.map +1 -1
  14. package/dist/auth/crypto.d.ts +55 -5
  15. package/dist/auth/crypto.d.ts.map +1 -1
  16. package/dist/auth/crypto.js +58 -5
  17. package/dist/auth/crypto.js.map +1 -1
  18. package/dist/auth/deviceVerification.d.ts +236 -20
  19. package/dist/auth/deviceVerification.d.ts.map +1 -1
  20. package/dist/auth/deviceVerification.js +293 -40
  21. package/dist/auth/deviceVerification.js.map +1 -1
  22. package/dist/auth/displayUtils.d.ts +98 -0
  23. package/dist/auth/displayUtils.d.ts.map +1 -0
  24. package/dist/auth/displayUtils.js +133 -0
  25. package/dist/auth/displayUtils.js.map +1 -0
  26. package/dist/auth/loginGuard.d.ts +108 -14
  27. package/dist/auth/loginGuard.d.ts.map +1 -1
  28. package/dist/auth/loginGuard.js +153 -31
  29. package/dist/auth/loginGuard.js.map +1 -1
  30. package/dist/auth/offlineCredentials.d.ts +132 -15
  31. package/dist/auth/offlineCredentials.d.ts.map +1 -1
  32. package/dist/auth/offlineCredentials.js +167 -23
  33. package/dist/auth/offlineCredentials.js.map +1 -1
  34. package/dist/auth/offlineLogin.d.ts +96 -10
  35. package/dist/auth/offlineLogin.d.ts.map +1 -1
  36. package/dist/auth/offlineLogin.js +82 -15
  37. package/dist/auth/offlineLogin.js.map +1 -1
  38. package/dist/auth/offlineSession.d.ts +83 -9
  39. package/dist/auth/offlineSession.d.ts.map +1 -1
  40. package/dist/auth/offlineSession.js +104 -13
  41. package/dist/auth/offlineSession.js.map +1 -1
  42. package/dist/auth/resolveAuthState.d.ts +70 -8
  43. package/dist/auth/resolveAuthState.d.ts.map +1 -1
  44. package/dist/auth/resolveAuthState.js +142 -46
  45. package/dist/auth/resolveAuthState.js.map +1 -1
  46. package/dist/auth/singleUser.d.ts +390 -37
  47. package/dist/auth/singleUser.d.ts.map +1 -1
  48. package/dist/auth/singleUser.js +505 -133
  49. package/dist/auth/singleUser.js.map +1 -1
  50. package/dist/bin/install-pwa.d.ts +25 -0
  51. package/dist/bin/install-pwa.d.ts.map +1 -0
  52. package/dist/bin/install-pwa.js +2197 -0
  53. package/dist/bin/install-pwa.js.map +1 -0
  54. package/dist/config.d.ts +132 -12
  55. package/dist/config.d.ts.map +1 -1
  56. package/dist/config.js +87 -9
  57. package/dist/config.js.map +1 -1
  58. package/dist/conflicts.d.ts +246 -23
  59. package/dist/conflicts.d.ts.map +1 -1
  60. package/dist/conflicts.js +495 -46
  61. package/dist/conflicts.js.map +1 -1
  62. package/dist/data.d.ts +338 -18
  63. package/dist/data.d.ts.map +1 -1
  64. package/dist/data.js +385 -34
  65. package/dist/data.js.map +1 -1
  66. package/dist/database.d.ts +72 -14
  67. package/dist/database.d.ts.map +1 -1
  68. package/dist/database.js +120 -29
  69. package/dist/database.js.map +1 -1
  70. package/dist/debug.d.ts +77 -1
  71. package/dist/debug.d.ts.map +1 -1
  72. package/dist/debug.js +88 -1
  73. package/dist/debug.js.map +1 -1
  74. package/dist/deviceId.d.ts +38 -7
  75. package/dist/deviceId.d.ts.map +1 -1
  76. package/dist/deviceId.js +68 -10
  77. package/dist/deviceId.js.map +1 -1
  78. package/dist/engine.d.ts +175 -3
  79. package/dist/engine.d.ts.map +1 -1
  80. package/dist/engine.js +831 -110
  81. package/dist/engine.js.map +1 -1
  82. package/dist/entries/actions.d.ts +14 -0
  83. package/dist/entries/actions.d.ts.map +1 -1
  84. package/dist/entries/actions.js +27 -1
  85. package/dist/entries/actions.js.map +1 -1
  86. package/dist/entries/auth.d.ts +16 -0
  87. package/dist/entries/auth.d.ts.map +1 -1
  88. package/dist/entries/auth.js +73 -1
  89. package/dist/entries/auth.js.map +1 -1
  90. package/dist/entries/config.d.ts +12 -0
  91. package/dist/entries/config.d.ts.map +1 -1
  92. package/dist/entries/config.js +18 -1
  93. package/dist/entries/config.js.map +1 -1
  94. package/dist/entries/kit.d.ts +21 -9
  95. package/dist/entries/kit.d.ts.map +1 -1
  96. package/dist/entries/kit.js +57 -8
  97. package/dist/entries/kit.js.map +1 -1
  98. package/dist/entries/stores.d.ts +11 -0
  99. package/dist/entries/stores.d.ts.map +1 -1
  100. package/dist/entries/stores.js +43 -2
  101. package/dist/entries/stores.js.map +1 -1
  102. package/dist/entries/types.d.ts +11 -1
  103. package/dist/entries/types.d.ts.map +1 -1
  104. package/dist/entries/types.js +10 -0
  105. package/dist/entries/types.js.map +1 -1
  106. package/dist/entries/utils.d.ts +7 -1
  107. package/dist/entries/utils.d.ts.map +1 -1
  108. package/dist/entries/utils.js +23 -2
  109. package/dist/entries/utils.js.map +1 -1
  110. package/dist/entries/vite.d.ts +20 -0
  111. package/dist/entries/vite.d.ts.map +1 -0
  112. package/dist/entries/vite.js +26 -0
  113. package/dist/entries/vite.js.map +1 -0
  114. package/dist/index.d.ts +33 -2
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +176 -21
  117. package/dist/index.js.map +1 -1
  118. package/dist/kit/auth.d.ts +80 -0
  119. package/dist/kit/auth.d.ts.map +1 -0
  120. package/dist/kit/auth.js +72 -0
  121. package/dist/kit/auth.js.map +1 -0
  122. package/dist/kit/confirm.d.ts +111 -0
  123. package/dist/kit/confirm.d.ts.map +1 -0
  124. package/dist/kit/confirm.js +169 -0
  125. package/dist/kit/confirm.js.map +1 -0
  126. package/dist/kit/loads.d.ts +189 -0
  127. package/dist/kit/loads.d.ts.map +1 -0
  128. package/dist/kit/loads.js +205 -0
  129. package/dist/kit/loads.js.map +1 -0
  130. package/dist/kit/server.d.ts +175 -0
  131. package/dist/kit/server.d.ts.map +1 -0
  132. package/dist/kit/server.js +297 -0
  133. package/dist/kit/server.js.map +1 -0
  134. package/dist/kit/sw.d.ts +176 -0
  135. package/dist/kit/sw.d.ts.map +1 -0
  136. package/dist/kit/sw.js +320 -0
  137. package/dist/kit/sw.js.map +1 -0
  138. package/dist/queue.d.ts +274 -0
  139. package/dist/queue.d.ts.map +1 -1
  140. package/dist/queue.js +556 -38
  141. package/dist/queue.js.map +1 -1
  142. package/dist/realtime.d.ts +241 -27
  143. package/dist/realtime.d.ts.map +1 -1
  144. package/dist/realtime.js +633 -109
  145. package/dist/realtime.js.map +1 -1
  146. package/dist/runtime/runtimeConfig.d.ts +91 -16
  147. package/dist/runtime/runtimeConfig.d.ts.map +1 -1
  148. package/dist/runtime/runtimeConfig.js +146 -19
  149. package/dist/runtime/runtimeConfig.js.map +1 -1
  150. package/dist/stores/authState.d.ts +150 -11
  151. package/dist/stores/authState.d.ts.map +1 -1
  152. package/dist/stores/authState.js +169 -17
  153. package/dist/stores/authState.js.map +1 -1
  154. package/dist/stores/network.d.ts +39 -0
  155. package/dist/stores/network.d.ts.map +1 -1
  156. package/dist/stores/network.js +169 -16
  157. package/dist/stores/network.js.map +1 -1
  158. package/dist/stores/remoteChanges.d.ts +327 -52
  159. package/dist/stores/remoteChanges.d.ts.map +1 -1
  160. package/dist/stores/remoteChanges.js +337 -75
  161. package/dist/stores/remoteChanges.js.map +1 -1
  162. package/dist/stores/sync.d.ts +130 -0
  163. package/dist/stores/sync.d.ts.map +1 -1
  164. package/dist/stores/sync.js +167 -7
  165. package/dist/stores/sync.js.map +1 -1
  166. package/dist/supabase/auth.d.ts +326 -19
  167. package/dist/supabase/auth.d.ts.map +1 -1
  168. package/dist/supabase/auth.js +374 -26
  169. package/dist/supabase/auth.js.map +1 -1
  170. package/dist/supabase/client.d.ts +79 -6
  171. package/dist/supabase/client.d.ts.map +1 -1
  172. package/dist/supabase/client.js +158 -15
  173. package/dist/supabase/client.js.map +1 -1
  174. package/dist/supabase/validate.d.ts +101 -7
  175. package/dist/supabase/validate.d.ts.map +1 -1
  176. package/dist/supabase/validate.js +117 -8
  177. package/dist/supabase/validate.js.map +1 -1
  178. package/dist/sw/build/vite-plugin.d.ts +74 -0
  179. package/dist/sw/build/vite-plugin.d.ts.map +1 -0
  180. package/dist/sw/build/vite-plugin.js +183 -0
  181. package/dist/sw/build/vite-plugin.js.map +1 -0
  182. package/dist/sw/sw.js +669 -0
  183. package/dist/types.d.ts +150 -45
  184. package/dist/types.d.ts.map +1 -1
  185. package/dist/types.js +12 -10
  186. package/dist/types.js.map +1 -1
  187. package/dist/utils.d.ts +55 -13
  188. package/dist/utils.d.ts.map +1 -1
  189. package/dist/utils.js +83 -22
  190. package/dist/utils.js.map +1 -1
  191. package/package.json +20 -22
  192. package/src/components/DeferredChangesBanner.svelte +477 -0
  193. package/src/components/SyncStatus.svelte +1732 -0
  194. package/dist/crdt/awareness.d.ts +0 -54
  195. package/dist/crdt/awareness.d.ts.map +0 -1
  196. package/dist/crdt/awareness.js +0 -219
  197. package/dist/crdt/awareness.js.map +0 -1
  198. package/dist/crdt/doc.d.ts +0 -56
  199. package/dist/crdt/doc.d.ts.map +0 -1
  200. package/dist/crdt/doc.js +0 -130
  201. package/dist/crdt/doc.js.map +0 -1
  202. package/dist/crdt/index.d.ts +0 -15
  203. package/dist/crdt/index.d.ts.map +0 -1
  204. package/dist/crdt/index.js +0 -20
  205. package/dist/crdt/index.js.map +0 -1
  206. package/dist/crdt/offline.d.ts +0 -91
  207. package/dist/crdt/offline.d.ts.map +0 -1
  208. package/dist/crdt/offline.js +0 -353
  209. package/dist/crdt/offline.js.map +0 -1
  210. package/dist/crdt/sync.d.ts +0 -58
  211. package/dist/crdt/sync.d.ts.map +0 -1
  212. package/dist/crdt/sync.js +0 -399
  213. package/dist/crdt/sync.js.map +0 -1
  214. package/dist/crdt/types.d.ts +0 -62
  215. package/dist/crdt/types.d.ts.map +0 -1
  216. package/dist/crdt/types.js +0 -7
  217. package/dist/crdt/types.js.map +0 -1
  218. package/dist/email/sendEmail.d.ts +0 -31
  219. package/dist/email/sendEmail.d.ts.map +0 -1
  220. package/dist/email/sendEmail.js +0 -39
  221. package/dist/email/sendEmail.js.map +0 -1
  222. package/dist/email/validateSmtp.d.ts +0 -18
  223. package/dist/email/validateSmtp.d.ts.map +0 -1
  224. package/dist/email/validateSmtp.js +0 -33
  225. package/dist/email/validateSmtp.js.map +0 -1
  226. package/dist/entries/crdt.d.ts +0 -3
  227. package/dist/entries/crdt.d.ts.map +0 -1
  228. package/dist/entries/crdt.js +0 -13
  229. package/dist/entries/crdt.js.map +0 -1
  230. package/dist/entries/email.d.ts +0 -4
  231. package/dist/entries/email.d.ts.map +0 -1
  232. package/dist/entries/email.js +0 -4
  233. package/dist/entries/email.js.map +0 -1
  234. package/dist/kit/authPresets.d.ts +0 -28
  235. package/dist/kit/authPresets.d.ts.map +0 -1
  236. package/dist/kit/authPresets.js +0 -23
  237. package/dist/kit/authPresets.js.map +0 -1
  238. package/dist/kit/configEndpoint.d.ts +0 -18
  239. package/dist/kit/configEndpoint.d.ts.map +0 -1
  240. package/dist/kit/configEndpoint.js +0 -27
  241. package/dist/kit/configEndpoint.js.map +0 -1
  242. package/dist/kit/deployEndpoint.d.ts +0 -22
  243. package/dist/kit/deployEndpoint.d.ts.map +0 -1
  244. package/dist/kit/deployEndpoint.js +0 -79
  245. package/dist/kit/deployEndpoint.js.map +0 -1
  246. package/dist/kit/layoutLoad.d.ts +0 -23
  247. package/dist/kit/layoutLoad.d.ts.map +0 -1
  248. package/dist/kit/layoutLoad.js +0 -41
  249. package/dist/kit/layoutLoad.js.map +0 -1
  250. package/dist/kit/protectedLoad.d.ts +0 -16
  251. package/dist/kit/protectedLoad.d.ts.map +0 -1
  252. package/dist/kit/protectedLoad.js +0 -28
  253. package/dist/kit/protectedLoad.js.map +0 -1
  254. package/dist/kit/setupLoad.d.ts +0 -11
  255. package/dist/kit/setupLoad.d.ts.map +0 -1
  256. package/dist/kit/setupLoad.js +0 -28
  257. package/dist/kit/setupLoad.js.map +0 -1
  258. package/dist/kit/validateEndpoint.d.ts +0 -9
  259. package/dist/kit/validateEndpoint.d.ts.map +0 -1
  260. package/dist/kit/validateEndpoint.js +0 -25
  261. package/dist/kit/validateEndpoint.js.map +0 -1
  262. package/dist/kit/vercelApi.d.ts +0 -6
  263. package/dist/kit/vercelApi.d.ts.map +0 -1
  264. package/dist/kit/vercelApi.js +0 -48
  265. package/dist/kit/vercelApi.js.map +0 -1
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"offline.js","sourceRoot":"","sources":["../../src/crdt/offline.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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"}