dolphin-server-modules 2.11.0 → 2.11.2

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 (100) hide show
  1. package/TUTORIAL_NEPALI.md +181 -0
  2. package/dist/adapters/mongoose/index.d.ts +4 -4
  3. package/dist/adapters/mongoose/index.js.map +1 -1
  4. package/dist/adapters/mongoose/index.test.d.ts +1 -0
  5. package/dist/adapters/mongoose/index.test.js +145 -0
  6. package/dist/adapters/mongoose/index.test.js.map +1 -0
  7. package/dist/adapters/mongoose/integration.test.d.ts +5 -0
  8. package/dist/adapters/mongoose/integration.test.js +217 -0
  9. package/dist/adapters/mongoose/integration.test.js.map +1 -0
  10. package/dist/ai/dolphin-agent/agent.d.ts +5 -0
  11. package/dist/ai/dolphin-agent/agent.js +93 -35
  12. package/dist/ai/dolphin-agent/agent.js.map +1 -1
  13. package/dist/ai/dolphin-agent/config.js +30 -37
  14. package/dist/ai/dolphin-agent/config.js.map +1 -1
  15. package/dist/auth/auth.test.d.ts +1 -0
  16. package/dist/auth/auth.test.js +286 -0
  17. package/dist/auth/auth.test.js.map +1 -0
  18. package/dist/authController/authController.test.d.ts +1 -0
  19. package/dist/authController/authController.test.js +359 -0
  20. package/dist/authController/authController.test.js.map +1 -0
  21. package/dist/bin/cli.js +494 -165
  22. package/dist/bin/cli.js.map +1 -1
  23. package/dist/client.test.d.ts +22 -0
  24. package/dist/client.test.js +573 -0
  25. package/dist/client.test.js.map +1 -0
  26. package/dist/controller/controller.test.d.ts +1 -0
  27. package/dist/controller/controller.test.js +37 -0
  28. package/dist/controller/controller.test.js.map +1 -0
  29. package/dist/curd/crud.test.d.ts +1 -0
  30. package/dist/curd/crud.test.js +104 -0
  31. package/dist/curd/crud.test.js.map +1 -0
  32. package/dist/demo-server.d.ts +1 -0
  33. package/dist/demo-server.js +191 -0
  34. package/dist/demo-server.js.map +1 -0
  35. package/dist/djson/djson.test.d.ts +1 -0
  36. package/dist/djson/djson.test.js +200 -0
  37. package/dist/djson/djson.test.js.map +1 -0
  38. package/dist/dolphin-bench.d.ts +1 -0
  39. package/dist/dolphin-bench.js +63 -0
  40. package/dist/dolphin-bench.js.map +1 -0
  41. package/dist/hard-performance-test.d.ts +1 -0
  42. package/dist/hard-performance-test.js +97 -0
  43. package/dist/hard-performance-test.js.map +1 -0
  44. package/dist/middleware/zod.test.d.ts +1 -0
  45. package/dist/middleware/zod.test.js +74 -0
  46. package/dist/middleware/zod.test.js.map +1 -0
  47. package/dist/performance-test.d.ts +1 -0
  48. package/dist/performance-test.js +92 -0
  49. package/dist/performance-test.js.map +1 -0
  50. package/dist/real-test-mongoose.d.ts +1 -0
  51. package/dist/real-test-mongoose.js +104 -0
  52. package/dist/real-test-mongoose.js.map +1 -0
  53. package/dist/realtime/camera.d.ts +119 -0
  54. package/dist/realtime/camera.js +299 -0
  55. package/dist/realtime/camera.js.map +1 -0
  56. package/dist/realtime/camera.test.d.ts +1 -0
  57. package/dist/realtime/camera.test.js +345 -0
  58. package/dist/realtime/camera.test.js.map +1 -0
  59. package/dist/realtime/index.d.ts +2 -0
  60. package/dist/realtime/index.js +2 -0
  61. package/dist/realtime/index.js.map +1 -1
  62. package/dist/realtime/realtime.test.d.ts +1 -0
  63. package/dist/realtime/realtime.test.js +623 -0
  64. package/dist/realtime/realtime.test.js.map +1 -0
  65. package/dist/realtime/rtsp.d.ts +65 -0
  66. package/dist/realtime/rtsp.js +410 -0
  67. package/dist/realtime/rtsp.js.map +1 -0
  68. package/dist/realtime/rtsp.test.d.ts +1 -0
  69. package/dist/realtime/rtsp.test.js +361 -0
  70. package/dist/realtime/rtsp.test.js.map +1 -0
  71. package/dist/router/router.test.d.ts +1 -0
  72. package/dist/router/router.test.js +45 -0
  73. package/dist/router/router.test.js.map +1 -0
  74. package/dist/server/server.test.d.ts +1 -0
  75. package/dist/server/server.test.js +299 -0
  76. package/dist/server/server.test.js.map +1 -0
  77. package/dist/services/ai-service.js +22 -11
  78. package/dist/services/ai-service.js.map +1 -1
  79. package/dist/signaling/signaling.test.d.ts +1 -0
  80. package/dist/signaling/signaling.test.js +112 -0
  81. package/dist/signaling/signaling.test.js.map +1 -0
  82. package/dist/swagger/swagger.js +31 -31
  83. package/dist/swagger/swagger.test.d.ts +1 -0
  84. package/dist/swagger/swagger.test.js +38 -0
  85. package/dist/swagger/swagger.test.js.map +1 -0
  86. package/dist/templates/index.d.ts +6 -0
  87. package/dist/templates/index.js +282 -105
  88. package/dist/templates/index.js.map +1 -1
  89. package/dist/test-2fa-real.d.ts +1 -0
  90. package/dist/test-2fa-real.js +105 -0
  91. package/dist/test-2fa-real.js.map +1 -0
  92. package/dist/test-dolphin.d.ts +1 -0
  93. package/dist/test-dolphin.js +98 -0
  94. package/dist/test-dolphin.js.map +1 -0
  95. package/dist/utils/ctx.d.ts +50 -0
  96. package/dist/utils/ctx.js +82 -0
  97. package/dist/utils/ctx.js.map +1 -0
  98. package/package.json +155 -45
  99. package/scripts/client.js +838 -0
  100. package/scripts/dolphin-persist.js +211 -0
@@ -0,0 +1,211 @@
1
+ /**
2
+ * DolphinPersist - Offline Cache Plugin for Dolphin Client
3
+ *
4
+ * Optional, zero-dependency persistence layer for DolphinStore.
5
+ * Supports both localStorage (simple) and IndexedDB (large data).
6
+ *
7
+ * Usage:
8
+ * // Auto-detect best storage:
9
+ * const persist = new DolphinPersist();
10
+ * dolphin.store.use(persist);
11
+ *
12
+ * // Force localStorage:
13
+ * const persist = new DolphinPersist({ driver: 'localstorage' });
14
+ *
15
+ * // Force IndexedDB:
16
+ * const persist = new DolphinPersist({ driver: 'indexeddb' });
17
+ */
18
+
19
+ class DolphinPersist {
20
+ /**
21
+ * @param {{ driver?: 'auto'|'localstorage'|'indexeddb', prefix?: string, ttl?: number }} options
22
+ */
23
+ constructor(options = {}) {
24
+ this.driver = options.driver || 'auto';
25
+ this.prefix = options.prefix || 'dolphin_persist_';
26
+ this.ttl = options.ttl || 0; // 0 = no expiry (milliseconds)
27
+ this._db = null;
28
+ this._ready = false;
29
+ this._readyPromise = this._init();
30
+ }
31
+
32
+ async _init() {
33
+ if (this.driver === 'auto') {
34
+ this.driver = typeof indexedDB !== 'undefined' ? 'indexeddb' : 'localstorage';
35
+ }
36
+
37
+ if (this.driver === 'indexeddb') {
38
+ try {
39
+ await this._openIndexedDB();
40
+ } catch {
41
+ console.warn('[DolphinPersist] IndexedDB unavailable, falling back to localStorage');
42
+ this.driver = 'localstorage';
43
+ }
44
+ }
45
+
46
+ this._ready = true;
47
+ }
48
+
49
+ _openIndexedDB() {
50
+ return new Promise((resolve, reject) => {
51
+ const req = indexedDB.open('dolphin_persist', 1);
52
+ req.onupgradeneeded = (e) => {
53
+ const db = e.target.result;
54
+ if (!db.objectStoreNames.contains('cache')) {
55
+ db.createObjectStore('cache', { keyPath: 'key' });
56
+ }
57
+ };
58
+ req.onsuccess = (e) => { this._db = e.target.result; resolve(); };
59
+ req.onerror = () => reject(req.error);
60
+ });
61
+ }
62
+
63
+ async set(collection, data) {
64
+ await this._readyPromise;
65
+ const entry = {
66
+ data,
67
+ savedAt: Date.now(),
68
+ expiresAt: this.ttl ? Date.now() + this.ttl : null
69
+ };
70
+
71
+ if (this.driver === 'indexeddb') {
72
+ return new Promise((resolve, reject) => {
73
+ const tx = this._db.transaction('cache', 'readwrite');
74
+ tx.objectStore('cache').put({ key: this.prefix + collection, ...entry });
75
+ tx.oncomplete = resolve;
76
+ tx.onerror = reject;
77
+ });
78
+ } else {
79
+ try {
80
+ localStorage.setItem(this.prefix + collection, JSON.stringify(entry));
81
+ } catch (e) {
82
+ console.warn('[DolphinPersist] localStorage write failed:', e.message);
83
+ }
84
+ }
85
+ }
86
+
87
+ async get(collection) {
88
+ await this._readyPromise;
89
+ let entry = null;
90
+
91
+ if (this.driver === 'indexeddb') {
92
+ entry = await new Promise((resolve, reject) => {
93
+ const tx = this._db.transaction('cache', 'readonly');
94
+ const req = tx.objectStore('cache').get(this.prefix + collection);
95
+ req.onsuccess = () => resolve(req.result || null);
96
+ req.onerror = reject;
97
+ });
98
+ } else {
99
+ try {
100
+ const raw = localStorage.getItem(this.prefix + collection);
101
+ entry = raw ? JSON.parse(raw) : null;
102
+ } catch { entry = null; }
103
+ }
104
+
105
+ if (!entry) return null;
106
+
107
+ // TTL check
108
+ if (entry.expiresAt && Date.now() > entry.expiresAt) {
109
+ await this.clear(collection);
110
+ return null;
111
+ }
112
+
113
+ return entry.data;
114
+ }
115
+
116
+ async clear(collection) {
117
+ await this._readyPromise;
118
+ if (this.driver === 'indexeddb') {
119
+ return new Promise((resolve) => {
120
+ const tx = this._db.transaction('cache', 'readwrite');
121
+ tx.objectStore('cache').delete(this.prefix + collection);
122
+ tx.oncomplete = resolve;
123
+ });
124
+ } else {
125
+ localStorage.removeItem(this.prefix + collection);
126
+ }
127
+ }
128
+
129
+ async clearAll() {
130
+ await this._readyPromise;
131
+ if (this.driver === 'indexeddb') {
132
+ return new Promise((resolve) => {
133
+ const tx = this._db.transaction('cache', 'readwrite');
134
+ tx.objectStore('cache').clear();
135
+ tx.oncomplete = resolve;
136
+ });
137
+ } else {
138
+ const keysToRemove = [];
139
+ for (let i = 0; i < localStorage.length; i++) {
140
+ const k = localStorage.key(i);
141
+ if (k && k.startsWith(this.prefix)) keysToRemove.push(k);
142
+ }
143
+ keysToRemove.forEach(k => localStorage.removeItem(k));
144
+ }
145
+ }
146
+
147
+ /** Check what's cached */
148
+ async info(collection) {
149
+ await this._readyPromise;
150
+ const entry = await this.get(collection);
151
+ if (!entry) return null;
152
+ return {
153
+ collection,
154
+ items: entry.length,
155
+ driver: this.driver,
156
+ savedAt: new Date(entry.savedAt)
157
+ };
158
+ }
159
+ }
160
+
161
+ // ============================================
162
+ // Extend DolphinStore to support persist plugin
163
+ // ============================================
164
+
165
+ /**
166
+ * Monkey-patches the DolphinStore to support .use(persist) plugin.
167
+ * Call this after DolphinClient is loaded.
168
+ */
169
+ function enablePersist(storeInstance, persist) {
170
+ const originalFetch = storeInstance._fetchAndSync.bind(storeInstance);
171
+
172
+ storeInstance._fetchAndSync = async function(name) {
173
+ // 1. Load from cache first (instant render)
174
+ const cached = await persist.get(name);
175
+ if (cached && cached.length > 0) {
176
+ storeInstance.data.set(name, cached);
177
+ storeInstance._notify();
178
+ console.log(`[DolphinPersist] Loaded "${name}" from ${persist.driver} cache (${cached.length} items)`);
179
+ }
180
+
181
+ // 2. Fetch fresh from server
182
+ await originalFetch(name);
183
+
184
+ // 3. Save updated data to cache
185
+ const fresh = storeInstance.data.get(name) || [];
186
+ await persist.set(name, fresh);
187
+ };
188
+
189
+ // Also persist on every realtime update
190
+ const originalUpdate = storeInstance._handleRemoteUpdate.bind(storeInstance);
191
+ storeInstance._handleRemoteUpdate = async function(collection, update) {
192
+ originalUpdate(collection, update);
193
+ const updated = storeInstance.data.get(collection) || [];
194
+ await persist.set(collection, updated);
195
+ };
196
+
197
+ console.log(`[DolphinPersist] Persistence enabled using ${persist.driver}`);
198
+ }
199
+
200
+ // ============================================
201
+ // Exports
202
+ // ============================================
203
+
204
+ if (typeof window !== 'undefined') {
205
+ window.DolphinPersist = DolphinPersist;
206
+ window.enablePersist = enablePersist;
207
+ }
208
+
209
+ if (typeof module !== 'undefined' && module.exports) {
210
+ module.exports = { DolphinPersist, enablePersist };
211
+ }