dolphin-server-modules 2.10.0 → 2.11.0

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.
@@ -26,6 +26,7 @@ Available Tools:
26
26
  CRITICAL RULES:
27
27
  - SEMANTIC SEARCH: I have already indexed your project. Relevant files are automatically added to context based on your query.
28
28
  - PRECISION: Use "patch" for renaming functions or changing specific logic to avoid rewriting large files.
29
+ - NO DUPLICATES: Before adding an "import", always check if it already exists. NEVER duplicate imports or declarations in a "patch".
29
30
  - Return pure JSON blocks for tools. You can briefly explain beforehand.
30
31
  - If a shell command fails, fix it and retry.
31
32
  - WINDOWS/LINUX COMPATIBILITY: You are likely running on Windows. AVOID "mkdir -p" as it fails in CMD. Use the "write" tool instead; it creates parent directories automatically.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/ai/dolphin-agent/config.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,oBAAoB,GAAa;IAC1C,SAAS,EAAE,SAAS;IACpB,sBAAsB,EAAE,IAAI;IAC5B,eAAe,EAAE,IAAI;CACxB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAgB;IAC/C,IAAI,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BpB,CAAC;IAEE,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,UAAU,IAAI;;;;;;;;2EAQqD,CAAC;IACxE,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACxC,UAAU,IAAI;uGACiF,CAAC;IACpG,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACvC,UAAU,IAAI;iGAC2E,CAAC;IAC9F,CAAC;SAAM,CAAC;QACJ,UAAU,IAAI,kDAAkD,MAAM,CAAC,SAAS,GAAG,CAAC;IACxF,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/ai/dolphin-agent/config.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,oBAAoB,GAAa;IAC1C,SAAS,EAAE,SAAS;IACpB,sBAAsB,EAAE,IAAI;IAC5B,eAAe,EAAE,IAAI;CACxB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAgB;IAC/C,IAAI,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BpB,CAAC;IAEE,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,UAAU,IAAI;;;;;;;;2EAQqD,CAAC;IACxE,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACxC,UAAU,IAAI;uGACiF,CAAC;IACpG,CAAC;SAAM,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACvC,UAAU,IAAI;iGAC2E,CAAC;IAC9F,CAAC;SAAM,CAAC;QACJ,UAAU,IAAI,kDAAkD,MAAM,CAAC,SAAS,GAAG,CAAC;IACxF,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}
package/dist/bin/cli.js CHANGED
@@ -78,6 +78,7 @@ const crud = createCrudController(db, "Task");
78
78
  app.get("/tasks", crud.getAll);
79
79
  app.post("/tasks", crud.create);
80
80
  Project Structure:
81
+ - package.json (MUST include "type": "module")
81
82
  - index.js (main server)
82
83
  - models/ (Mongoose models)
83
84
  - .env (env vars)
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,144 +1,46 @@
1
- {
2
- "name": "dolphin-server-modules",
3
- "version": "2.10.0",
4
- "type": "module",
5
- "homepage": "https://github.com/Phuyalshankar/dolphin-server-modules#readme",
6
- "description": "Core utility modules for Auth, CRUD, and Controllers",
7
- "main": "dist/index.js",
8
- "bin": {
9
- "dolphin": "dist/bin/cli.js",
10
- "dolphin-server": "dist/bin/cli.js"
11
- },
12
- "types": "dist/index.d.ts",
13
- "files": [
14
- "dist",
15
- "README.md",
16
- "LICENSE",
17
- "TUTORIAL_NEPALI.md",
18
- "DOLPHIN_MASTER_GUIDE_NEPALI.md",
19
- "scripts/client.js",
20
- "scripts/dolphin-persist.js"
21
- ],
22
- "exports": {
23
- ".": {
24
- "types": "./dist/index.d.ts",
25
- "default": "./dist/index.js"
26
- },
27
- "./auth": {
28
- "types": "./dist/auth/auth.d.ts",
29
- "default": "./dist/auth/auth.js"
30
- },
31
- "./auth-controller": {
32
- "types": "./dist/authController/authController.d.ts",
33
- "default": "./dist/authController/authController.js"
34
- },
35
- "./controller": {
36
- "types": "./dist/controller/controller.d.ts",
37
- "default": "./dist/controller/controller.js"
38
- },
39
- "./crud": {
40
- "types": "./dist/curd/crud.d.ts",
41
- "default": "./dist/curd/crud.js"
42
- },
43
- "./curd": {
44
- "types": "./dist/curd/crud.d.ts",
45
- "default": "./dist/curd/crud.js"
46
- },
47
- "./middleware/zod": {
48
- "types": "./dist/middleware/zod.d.ts",
49
- "default": "./dist/middleware/zod.js"
50
- },
51
- "./adapters/mongoose": {
52
- "types": "./dist/adapters/mongoose/index.d.ts",
53
- "default": "./dist/adapters/mongoose/index.js"
54
- },
55
- "./server": {
56
- "types": "./dist/server/server.d.ts",
57
- "default": "./dist/server/server.js"
58
- },
59
- "./router": {
60
- "types": "./dist/router/router.d.ts",
61
- "default": "./dist/router/router.js"
62
- },
63
- "./realtime": {
64
- "types": "./dist/realtime/index.d.ts",
65
- "default": "./dist/realtime/index.js"
66
- },
67
- "./realtime/core": {
68
- "types": "./dist/realtime/core.d.ts",
69
- "default": "./dist/realtime/core.js"
70
- },
71
- "./realtime/trie": {
72
- "types": "./dist/realtime/trie.d.ts",
73
- "default": "./dist/realtime/trie.js"
74
- },
75
- "./realtime/codec": {
76
- "types": "./dist/realtime/codec.d.ts",
77
- "default": "./dist/realtime/codec.js"
78
- },
79
- "./realtime/plugins": {
80
- "types": "./dist/realtime/plugins.d.ts",
81
- "default": "./dist/realtime/plugins.js"
82
- },
83
- "./swagger": {
84
- "types": "./dist/swagger/swagger.d.ts",
85
- "default": "./dist/swagger/swagger.js"
86
- },
87
- "./djson": {
88
- "types": "./dist/djson/djson.d.ts",
89
- "default": "./dist/djson/djson.js"
90
- },
91
- "./signaling": {
92
- "types": "./dist/signaling/index.d.ts",
93
- "default": "./dist/signaling/index.js"
94
- },
95
- "./cli": "./dist/bin/cli.js",
96
- "./client": "./scripts/client.js"
97
- },
98
- "scripts": {
99
- "build": "tsc",
100
- "start": "node dist/demo-server.js",
101
- "dolphin": "node dist/bin/cli.js",
102
- "dev": "npm run build && npm run start",
103
- "test": "jest",
104
- "prepublishOnly": "npm run build"
105
- },
106
- "keywords": [
107
- "dolphin",
108
- "server",
109
- "auth",
110
- "crud",
111
- "controller",
112
- "realtime",
113
- "iot",
114
- "2fa",
115
- "jwt"
116
- ],
117
- "author": "Shankar Phuyal",
118
- "license": "ISC",
119
- "dependencies": {
120
- "argon2": "^0.40.1",
121
- "ioredis": "^5.10.1",
122
- "jsonwebtoken": "^9.0.3",
123
- "mongodb-memory-server": "^11.0.1",
124
- "ws": "^8.20.0",
125
- "zod": "^4.3.6"
126
- },
127
- "devDependencies": {
128
- "@types/jest": "^29.5.12",
129
- "@types/jsonwebtoken": "^9.0.10",
130
- "@types/node": "^20.11.30",
131
- "@types/ws": "^8.18.1",
132
- "jest": "^29.7.0",
133
- "mongoose": "^9.3.2",
134
- "ts-jest": "^29.1.2",
135
- "typescript": "^5.4.3"
136
- },
137
- "repository": {
138
- "type": "git",
139
- "url": "git+https://github.com/Phuyalshankar/dolphin-server-modules.git"
140
- },
141
- "bugs": {
142
- "url": "https://github.com/Phuyalshankar/dolphin-server-modules/issues"
143
- }
144
- }
1
+ {
2
+ "name": "dolphin-server-modules",
3
+ "version": "2.11.0",
4
+ "type": "module",
5
+ "homepage": "https://github.com/Phuyalshankar/dolphin-server-modules#readme",
6
+ "description": "Core utility modules for Auth, CRUD, and Controllers",
7
+ "main": "dist/index.js",
8
+ "bin": {
9
+ "dolphin": "dist/bin/cli.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "LICENSE",
15
+ "DOLPHIN_MASTER_GUIDE_NEPALI.md"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "dev": "tsc -w",
20
+ "test": "jest"
21
+ },
22
+ "keywords": [
23
+ "dolphin",
24
+ "framework",
25
+ "server",
26
+ "auth",
27
+ "crud"
28
+ ],
29
+ "author": "Phuyal Shankar",
30
+ "license": "MIT",
31
+ "dependencies": {
32
+ "@google/generative-ai": "^0.11.0",
33
+ "chalk": "^5.3.0",
34
+ "dotenv": "^16.4.5",
35
+ "express": "^4.19.2",
36
+ "mongoose": "^8.3.4",
37
+ "node-fetch": "^3.3.2",
38
+ "ora": "^8.0.1"
39
+ },
40
+ "devDependencies": {
41
+ "@types/express": "^4.17.21",
42
+ "@types/node": "^20.12.11",
43
+ "ts-node": "^10.9.2",
44
+ "typescript": "^5.4.5"
45
+ }
46
+ }
@@ -1,181 +0,0 @@
1
- # Dolphin Framework: 0 to 100% Full Tutorial (Nepali) 🐬 [v2.9.5]
2
-
3
- Dolphin Framework मा तपाईँलाई स्वागत छ! यो गाइडमा हामी Dolphin प्रयोग गरेर एउटा शक्तिशाली, आधुनिक र एआई-संचालित (AI-Powered) ब्याकइन्ड कसरी बनाउने भनेर सिक्नेछौँ।
4
-
5
- ---
6
-
7
- ## १. Dolphin के हो? (Introduction)
8
-
9
- **Dolphin** एउटा "Zero-Dependency" ब्याकइन्ड फ्रेमवर्क हो। यो २०२६ को आधुनिक आवश्यकताहरूका लागि तयार पारिएको छ। अहिले यसमा **Cursor-Level Agentic AI** थपिएको छ, जसले गर्दा तपाईँको कोडिङ अनुभव पूर्ण रूपमा बदलिनेछ।
10
-
11
- **मुख्य विशेषताहरू:**
12
- - **Advanced AI Agent**: प्रोजेक्ट बुझ्ने र आफैं कोड लेख्ने एजेन्ट।
13
- - **Ultra-Fast**: एक्सप्रेस (Express) भन्दा ५ गुणा सम्म छिटो।
14
- - **Multi-Model Support**: Gemini, Groq (Llama 3), र Local Ollama सपोर्ट।
15
- - **ESM Ready**: आधुनिक `import/export` सिन्ट्याक्समा आधारित।
16
-
17
- ---
18
-
19
- ## २. सुरुवाती सेटअप र एआई (Project Setup & AI)
20
-
21
- Dolphin v2.9.5 मा एआईको प्रयोग गरेर १ मिनेटमै प्रोजेक्ट तयार गर्न सकिन्छ:
22
-
23
- ```bash
24
- # १. नयाँ फोल्डर बनाउनुहोस्
25
- mkdir my-dolphin-app && cd my-dolphin-app
26
-
27
- # २. एआई एजेन्ट सुरु गर्नुहोस् (Cursor Mode)
28
- # यसले तपाईँको कुरा बुझ्छ र कोड लेख्न मद्दत गर्छ
29
- npx dolphin chat
30
-
31
- # ३. एआई मार्फत पूर्ण प्रोजेक्ट स्ट्रक्चर बनाउनुहोस्
32
- npx dolphin generate-full "e-commerce backend with orders and mongoose"
33
- ```
34
-
35
- ---
36
-
37
- ## ३. एआई एजेन्टसँग कुरा गर्ने (Chatting with Agent)
38
-
39
- Dolphin Agent ले अहिले **Roman Nepali** बुझ्छ। तपाईँले यसरी सोध्न सक्नुहुन्छ:
40
-
41
- > "Hey Dolphin, `real-test` फोल्डरमा एउटा नयाँ `order.js` मोडल बनाइदेऊ र `app.js` मा त्यसको रुट थपिदेऊ।"
42
-
43
- एजेन्टले तपाईँको प्रोजेक्टका सबै फाइलहरू हेर्छ र सिधै कोड अपडेट गरिदिन्छ। यसका लागि कुनै पनि `require` प्रयोग नगर्नुहोस्, सधैँ **`import`** प्रयोग गर्नुहोस्।
44
-
45
- ---
46
-
47
- ## ४. पहिलो सर्भर (Modern ESM Server)
48
-
49
- हामी आधुनिक `import` सिन्ट्याक्स मात्र प्रयोग गर्छौं, किनभने `require` ले पुराना समस्याहरू निम्त्याउन सक्छ।
50
-
51
- ```javascript
52
- import { createDolphinServer } from 'dolphin-server-modules/server';
53
-
54
- const app = createDolphinServer();
55
-
56
- // एउटा सामान्य गेट (GET) रूट
57
- app.get('/', (ctx) => {
58
- return {
59
- message: "Dolphin ko sansar ma swagat chha! 🐬",
60
- version: "2.9.5",
61
- mode: "Agentic AI Ready"
62
- };
63
- });
64
-
65
- // सर्भर सुन्न (Listen) सुरु गर्नुहोस्
66
- app.listen(3000, () => {
67
- console.log("Server http://localhost:3000 ma chaliraheko chha!");
68
- });
69
- ```
70
-
71
- ---
72
-
73
- ## ५. एआई बिनाका शक्तिशाली कमाण्डहरू
74
-
75
- यदि तपाईँलाई एआई प्रयोग गर्न मन छैन भने, डल्फिनमा पहिले देखि नै बनेका टेम्पलेटहरू प्रयोग गर्न सक्नुहुन्छ:
76
-
77
- ```bash
78
- # अथेन्टिकेसन सिस्टम थप्न
79
- npx dolphin add auth
80
-
81
- # कुनै मोडलको लागि CRUD थप्न
82
- npx dolphin add crud Product
83
-
84
- # मङ्गोस (Mongoose) सेटअप गर्न
85
- npx dolphin add adapter mongoose
86
- ```
87
-
88
- ---
89
-
90
- ## ६. लोकल एआई (Ollama Support) [NEW]
91
-
92
- यदि तपाईँ आफ्नो डेटा क्लाउडमा पठाउन चाहनुहुन्न भने, आफ्नो कम्प्युटरमै **Ollama** चलाउन सक्नुहुन्छ। `.env` फाइलमा यो सेट गर्नुहोस्:
93
-
94
- ```env
95
- USE_OLLAMA=true
96
- OLLAMA_MODEL=gemma3:latest
97
- ```
98
-
99
- ---
100
-
101
- ## ७. अन्तिममा (Conclusion)
102
-
103
- Dolphin Framework अब एउटा सामान्य फ्रेमवर्क मात्र होइन, यो तपाईँको एउटा "एआई साथी" पनि हो। यसले तपाईँको कोडिङ स्पिड १० गुणा बढाउन मद्दत गर्छ।
104
-
105
- **थप जानकारीको लागि:**
106
- - [README.md](README.md) हेर्नुहोस्।
107
- - [Dolphin Master Guide](DOLPHIN_MASTER_GUIDE_NEPALI.md) पढ्नुहोस्।
108
-
109
- **Happy Coding in Nepali! 🇳🇵🐬**
110
- sole.log("डेटा आयो:", products.items);
111
- }
112
- </script>
113
- ```
114
-
115
- ### ख. फिल्टर र सर्टिङ (Filtering & Sorting)
116
- तपाईंले स्टोरमै डेटा फिल्टर र सर्ट गर्न सक्नुहुन्छ, जुन एकदमै 'Reactive' हुन्छ:
117
-
118
- ```javascript
119
- // १. मूल्य १००० भन्दा बढी भएका सामान मात्र फिल्टर गर्ने
120
- dolphin.store.products.where(p => p.price > 1000);
121
-
122
- // २. नामको आधारमा मिलाउने (A to Z)
123
- dolphin.store.products.orderBy('name', 'asc');
124
-
125
- // ३. सबै फिल्टर हटाउने
126
- dolphin.store.products.clear();
127
- ```
128
-
129
- ---
130
-
131
- ## ५. DolphinPersist: अफलाइन क्यासिङ [NEW v2.2.5]
132
-
133
- यदि तपाईं इन्टरनेट नहुँदा पनि आफ्नो डेटा स्टोरमा राखिरहन चाहनुहुन्छ भने `DolphinPersist` प्रयोग गर्नुहोस्।
134
-
135
- ```html
136
- <script src="/dolphin-client.js"></script>
137
- <script src="path/to/dolphin-persist.js"></script>
138
-
139
- <script>
140
- // IndexedDB प्रयोग गरेर अफलाइन क्यासिङ सेट गर्ने
141
- const persist = new DolphinPersist({ driver: 'indexeddb' });
142
- enablePersist(dolphin.store, persist);
143
-
144
- // अब पेज रिफ्रेस गर्दा वा इन्टरनेट नहुँदा पनि पुरानो डेटा तुरुन्तै देखिन्छ।
145
- </script>
146
- ```
147
-
148
- ---
149
-
150
- ## ६. अटोमेटेड CRUD (Mongoose सँग)
151
-
152
- Dolphin ले डेटाबेससँग काम गर्न अटोमेटेड CRUD सुविधा दिन्छ।
153
-
154
- ```javascript
155
- import { createMongooseAdapter } from 'dolphin-server-modules/adapters/mongoose';
156
- import { createCRUD } from 'dolphin-server-modules/curd';
157
-
158
- // १. एड्याप्टर बनाउने
159
- const db = createMongooseAdapter({ User, Product });
160
-
161
- // २. CRUD सर्भिस सुरु गर्ने
162
- const crud = createCRUD(db, {
163
- enforceOwnership: false, // सबैका लागि खुला गर्न
164
- realtime: true // रियल-टाइम सिङ्क इनेबल गर्न
165
- });
166
-
167
- // ३. रुटहरूमा जोड्ने
168
- app.get('/products', async (ctx) => ctx.json(await crud.read('Product')));
169
- ```
170
-
171
- ---
172
-
173
- ## ७. अन्तिममा (Conclusion)
174
-
175
- Dolphin Framework अब एउटा पूर्ण 'Full-stack' ब्याकइन्ड इकोसिस्टम बनेको छ। यसले ब्याकइन्डमा मात्र होइन, फ्रन्टइन्डको डेटा सिङ्क र अफलाइन म्यानेजमेन्टमा पनि मद्दत गर्छ।
176
-
177
- **थप जानकारीको लागि:**
178
- - [Official Documentation](https://github.com/Phuyalshankar/dolphin-server-modules)
179
- - [README.md](README.md) हेर्नुहोस्।
180
-
181
- **Happy Coding in Nepali! 🇳🇵🐬**
package/scripts/client.js DELETED
@@ -1,703 +0,0 @@
1
- /**
2
- * @typedef {Object} DolphinResponse
3
- * @property {boolean} success
4
- * @property {any} [data]
5
- * @property {string} [message]
6
- * @property {number} [status]
7
- */
8
-
9
- /**
10
- * @typedef {Object} SignalMessage
11
- * @property {string} msgId
12
- * @property {string} type
13
- * @property {string} from
14
- * @property {string} to
15
- * @property {any} data
16
- * @property {number} timestamp
17
- */
18
-
19
- /**
20
- * @typedef {Object} FileMetadata
21
- * @property {string} fileId
22
- * @property {string} name
23
- * @property {number} size
24
- * @property {number} totalChunks
25
- * @property {number} chunkSize
26
- */
27
-
28
- /**
29
- * @callback TopicCallback
30
- * @param {any} payload
31
- * @param {string} [topic]
32
- */
33
-
34
- /**
35
- * Dolphin Client v2.0 - Full-stack Realtime, API & Auth Client
36
- * Zero-dependency, pure JS.
37
- *
38
- * यो लाइब्रेरी डल्फिन सर्भरबाट सिधै उपलब्ध हुने पब-सब, API र Auth लाइब्रेरी हो।
39
- */
40
-
41
- class APIHandler {
42
- /**
43
- * @param {DolphinClient} client
44
- */
45
- constructor(client) {
46
- this.client = client;
47
- return this._createProxy([]);
48
- }
49
-
50
- /**
51
- * @param {string[]} pathParts
52
- * @private
53
- */
54
- _createProxy(pathParts) {
55
- const path = pathParts.join('/');
56
-
57
- const target = (options) => {
58
- return this.request('GET', path, null, options);
59
- };
60
-
61
- // Add standard methods to the function target
62
- target.get = (pathOrOptions, options) => {
63
- if (typeof pathOrOptions === 'string') return this.request('GET', pathOrOptions, null, options);
64
- return this.request('GET', path, null, pathOrOptions);
65
- };
66
- target.post = (pathOrBody, bodyOrOptions, options) => {
67
- if (typeof pathOrBody === 'string') return this.request('POST', pathOrBody, bodyOrOptions, options);
68
- return this.request('POST', path, pathOrBody, bodyOrOptions);
69
- };
70
- target.put = (pathOrBody, bodyOrOptions, options) => {
71
- if (typeof pathOrBody === 'string') return this.request('PUT', pathOrBody, bodyOrOptions, options);
72
- return this.request('PUT', path, pathOrBody, bodyOrOptions);
73
- };
74
- target.del = (pathOrOptions, options) => {
75
- if (typeof pathOrOptions === 'string') return this.request('DELETE', pathOrOptions, null, options);
76
- return this.request('DELETE', path, null, pathOrOptions);
77
- };
78
- target.request = (method, subPath, body, options) => {
79
- const finalPath = subPath ? `${path}/${subPath.startsWith('/') ? subPath.slice(1) : subPath}` : path;
80
- return this.request(method, finalPath, body, options);
81
- };
82
-
83
- const methods = ['get', 'post', 'put', 'del', 'request'];
84
-
85
- return new Proxy(target, {
86
- get: (t, prop) => {
87
- if (typeof prop === 'string' && !methods.includes(prop)) {
88
- return this._createProxy([...pathParts, prop]);
89
- }
90
- return t[prop];
91
- }
92
- });
93
- }
94
-
95
- /**
96
- * @param {string} method
97
- * @param {string} path
98
- * @param {any} [body]
99
- * @param {RequestInit} [options]
100
- * @returns {Promise<any>}
101
- */
102
- async request(method, path, body = null, options = {}) {
103
- const url = `${this.client.httpUrl}${path.startsWith('/') ? path : '/' + path}`;
104
- const headers = {
105
- 'Content-Type': 'application/json',
106
- ...options.headers
107
- };
108
-
109
- if (this.client.accessToken) {
110
- headers['Authorization'] = `Bearer ${this.client.accessToken}`;
111
- }
112
-
113
- const fetchOptions = {
114
- method,
115
- headers,
116
- ...options
117
- };
118
-
119
- if (body) {
120
- fetchOptions.body = JSON.stringify(body);
121
- }
122
-
123
- const response = await fetch(url, fetchOptions);
124
- const contentType = response.headers.get('content-type');
125
- let data;
126
- if (contentType && contentType.includes('application/json')) {
127
- data = await response.json();
128
- } else {
129
- data = await response.text();
130
- }
131
-
132
- if (!response.ok) {
133
- throw { status: response.status, data };
134
- }
135
-
136
- return data;
137
- }
138
-
139
- /**
140
- * @param {string|RequestInit} [pathOrOptions]
141
- * @param {RequestInit} [options]
142
- * @returns {Promise<any>}
143
- */
144
- get(pathOrOptions, options) { return Promise.resolve(); }
145
-
146
- /**
147
- * @param {string|any} [pathOrBody]
148
- * @param {any} [bodyOrOptions]
149
- * @param {RequestInit} [options]
150
- * @returns {Promise<any>}
151
- */
152
- post(pathOrBody, bodyOrOptions, options) { return Promise.resolve(); }
153
-
154
- /**
155
- * @param {string|any} [pathOrBody]
156
- * @param {any} [bodyOrOptions]
157
- * @param {RequestInit} [options]
158
- * @returns {Promise<any>}
159
- */
160
- put(pathOrBody, bodyOrOptions, options) { return Promise.resolve(); }
161
-
162
- /**
163
- * @param {string|RequestInit} [pathOrOptions]
164
- * @param {RequestInit} [options]
165
- * @returns {Promise<any>}
166
- */
167
- del(pathOrOptions, options) { return Promise.resolve(); }
168
- }
169
-
170
- class AuthHandler {
171
- /**
172
- * @param {DolphinClient} client
173
- */
174
- constructor(client) {
175
- this.client = client;
176
- this.user = null;
177
- }
178
-
179
- async login(email, password) {
180
- const res = await this.client.api.post('/auth/login', { email, password });
181
- if (res.accessToken) {
182
- this.client.setToken(res.accessToken);
183
- this.user = res.user;
184
- }
185
- return res;
186
- }
187
-
188
- async register(data) {
189
- return await this.client.api.post('/auth/register', data);
190
- }
191
-
192
- async me() {
193
- const res = await this.client.api.get('/auth/me');
194
- if (res.success) {
195
- this.user = res.data;
196
- }
197
- return res;
198
- }
199
-
200
- async logout() {
201
- await this.client.api.post('/auth/logout');
202
- this.client.setToken(null);
203
- this.user = null;
204
- }
205
-
206
- /** @param {string} email */
207
- async forgotPassword(email) {
208
- return await this.client.api.post('/auth/forgot-password', { email });
209
- }
210
- }
211
-
212
- /**
213
- * DolphinStore - Reactive State Sync (Zustand Alternative)
214
- * Automatically syncs database collections with local state.
215
- */
216
- class DolphinStore {
217
- /** @param {DolphinClient} client */
218
- constructor(client) {
219
- this.client = client;
220
- /** @type {Map<string, { items: any[], loading: boolean, error: string|null, success: boolean }>} */
221
- this.data = new Map();
222
- /** @type {Set<function()>} */
223
- this.listeners = new Set();
224
- /** @type {Set<string>} */
225
- this.subscribed = new Set();
226
-
227
- return new Proxy(this, {
228
- get: (target, prop) => {
229
- if (prop in target) return target[prop];
230
- if (typeof prop === 'string') {
231
- return this._getCollection(prop);
232
- }
233
- }
234
- });
235
- }
236
-
237
- /** @private */
238
- _getCollection(name) {
239
- if (!this.data.has(name)) {
240
- const collection = {
241
- _rawItems: [],
242
- items: [],
243
- loading: true,
244
- error: null,
245
- success: false,
246
- _filter: null,
247
- _sort: null,
248
-
249
- /**
250
- * फिल्टर सेट गर्ने (Local filtering)
251
- * @param {function(any): boolean} fn
252
- */
253
- where: (fn) => {
254
- collection._filter = fn;
255
- this._applyTransform(collection);
256
- return collection;
257
- },
258
-
259
- /**
260
- * सर्टिङ सेट गर्ने
261
- * @param {string} key
262
- * @param {'asc'|'desc'} [direction]
263
- */
264
- orderBy: (key, direction = 'asc') => {
265
- collection._sort = { key, direction };
266
- this._applyTransform(collection);
267
- return collection;
268
- },
269
-
270
- /**
271
- * फिल्टर र सर्ट हटाउने
272
- */
273
- clear: () => {
274
- collection._filter = null;
275
- collection._sort = null;
276
- this._applyTransform(collection);
277
- return collection;
278
- }
279
- };
280
-
281
- this.data.set(name, collection);
282
- this._fetchAndSync(name);
283
- }
284
- return this.data.get(name);
285
- }
286
-
287
- /** @private */
288
- async _fetchAndSync(name) {
289
- const state = this.data.get(name);
290
- try {
291
- // 1. Initial Fetch
292
- const res = await this.client.api.get(`/${name.toLowerCase()}`);
293
- state._rawItems = Array.isArray(res) ? res : (res.data || []);
294
- state.loading = false;
295
- state.success = true;
296
- state.error = null;
297
- this._applyTransform(state);
298
-
299
- // 2. Realtime Sync (if connected)
300
- if (!this.subscribed.has(name)) {
301
- const topic = `db:sync/${name.toLowerCase()}`;
302
- this.client.subscribe(topic, (update) => {
303
- this._handleRemoteUpdate(name, update);
304
- });
305
- this.subscribed.add(name);
306
- }
307
- } catch (e) {
308
- state.loading = false;
309
- state.success = false;
310
- state.error = e.data?.error || e.message || 'Fetch failed';
311
- this._notify();
312
- console.error(`[DolphinStore] Sync failed for ${name}:`, e);
313
- }
314
- }
315
-
316
- /** @private */
317
- _applyTransform(state) {
318
- let result = [...state._rawItems];
319
-
320
- // 1. Filter
321
- if (state._filter) {
322
- result = result.filter(state._filter);
323
- }
324
-
325
- // 2. Sort
326
- if (state._sort) {
327
- const { key, direction } = state._sort;
328
- result.sort((a, b) => {
329
- const av = a[key];
330
- const bv = b[key];
331
- if (av === bv) return 0;
332
- const compare = av > bv ? 1 : -1;
333
- return direction === 'asc' ? compare : -compare;
334
- });
335
- }
336
-
337
- state.items = result;
338
- this._notify();
339
- }
340
-
341
- /** @private */
342
- _handleRemoteUpdate(collection, update) {
343
- const state = this.data.get(collection);
344
- if (!state) return;
345
-
346
- let items = state._rawItems;
347
- const { type, data } = update; // type: 'create', 'update', 'delete'
348
-
349
- if (type === 'create') {
350
- items = [...items, data];
351
- } else if (type === 'update') {
352
- items = items.map(item => (item.id === data.id || item._id === data._id) ? { ...item, ...data } : item);
353
- } else if (type === 'delete') {
354
- items = items.filter(item => (item.id !== data.id && item._id !== data._id));
355
- }
356
-
357
- state._rawItems = items;
358
- this._applyTransform(state);
359
- }
360
-
361
- /** Subscribe for React components (useSyncExternalStore) */
362
- subscribe(listener) {
363
- this.listeners.add(listener);
364
- return () => this.listeners.delete(listener);
365
- }
366
-
367
- getSnapshot(collection) {
368
- return this.data.get(collection) || { items: [], loading: false, error: null, success: false };
369
- }
370
-
371
- _notify() {
372
- this.listeners.forEach(l => l());
373
- }
374
- }
375
-
376
- class DolphinClient {
377
- /**
378
- * @param {string} [url]
379
- * @param {string} [deviceId]
380
- */
381
- constructor(url = '', deviceId = '') {
382
- // Handle URL formatting
383
- if (!url && typeof window !== 'undefined') {
384
- url = window.location.host;
385
- }
386
-
387
- let protocol = 'http:';
388
- if (url && url.startsWith('https://')) {
389
- protocol = 'https:';
390
- } else if (url && url.startsWith('http://')) {
391
- protocol = 'http:';
392
- } else if (typeof window !== 'undefined') {
393
- protocol = window.location.protocol;
394
- }
395
-
396
- this.host = (url || 'localhost').replace(/\/$/, "").replace(/^https?:\/\//, "");
397
- this.httpUrl = `${protocol}//${this.host}`;
398
- this.deviceId = deviceId || 'web_' + Math.random().toString(36).substr(2, 5);
399
-
400
- /** @type {WebSocket | null} */
401
- this.socket = null;
402
-
403
- // Polyfill Storage if not browser
404
- this.storage = typeof localStorage !== 'undefined' ? localStorage : {
405
- getItem: (key) => null,
406
- setItem: (key, val) => { },
407
- removeItem: (key) => { }
408
- };
409
-
410
- /** @type {string | null} */
411
- this.accessToken = this.storage.getItem('dolphin_token');
412
-
413
- // Sub-handlers
414
- this.api = new APIHandler(this);
415
- this.auth = new AuthHandler(this);
416
- this.store = new DolphinStore(this);
417
-
418
- /** @type {Map<string, Set<TopicCallback>>} */
419
- this.handlers = new Map(); // topic -> Set of callbacks
420
- /** @type {Set<function(SignalMessage): void>} */
421
- this.signalHandlers = new Set();
422
- /** @type {Set<function(FileMetadata): void>} */
423
- this.fileHandlers = new Set();
424
-
425
- this.reconnectAttempts = 0;
426
- this.maxReconnectAttempts = 5;
427
- }
428
-
429
- /**
430
- * टोकन सेट गर्ने र सेभ गर्ने
431
- */
432
- setToken(token) {
433
- this.accessToken = token;
434
- if (token) {
435
- this.storage.setItem('dolphin_token', token);
436
- } else {
437
- this.storage.removeItem('dolphin_token');
438
- }
439
- }
440
-
441
- /**
442
- * रियल-टाइम सर्भरसँग कनेक्शन सुरु गर्ने
443
- * @returns {Promise<void>}
444
- */
445
- async connect() {
446
- return new Promise((resolve, reject) => {
447
- const protocol = this.httpUrl.startsWith('https') ? 'wss:' : 'ws:';
448
- const wsUrl = `${protocol}//${this.host}/realtime?deviceId=${this.deviceId}`;
449
-
450
- console.log(`[Dolphin] Connecting to ${wsUrl}...`);
451
- this.socket = new WebSocket(wsUrl);
452
-
453
- this.socket.onopen = () => {
454
- console.log(`[Dolphin] Connected as "${this.deviceId}" 🐬`);
455
- this.reconnectAttempts = 0;
456
- resolve();
457
- };
458
-
459
- this.socket.onmessage = (event) => {
460
- this._handleMessage(event.data);
461
- };
462
-
463
- this.socket.onclose = () => {
464
- console.warn("[Dolphin] Connection closed");
465
- this._maybeReconnect();
466
- };
467
-
468
- this.socket.onerror = (err) => {
469
- console.error("[Dolphin] WebSocket Error:", err);
470
- reject(err);
471
- };
472
- });
473
- }
474
-
475
- _handleMessage(data) {
476
- try {
477
- const parsed = JSON.parse(data);
478
-
479
- // १. Signaling Messages
480
- if (parsed.type && parsed.from && (parsed.to === this.deviceId || parsed.to === 'all')) {
481
- // Auto-ACK for signaling messages
482
- if (parsed.msgId && parsed.type !== 'ACK') {
483
- this._sendAck(parsed.from, parsed.msgId);
484
- }
485
- this.signalHandlers.forEach(handler => handler(parsed));
486
- }
487
-
488
- // २. File & Data Responses
489
- if (parsed.type === 'FILE_AVAILABLE') {
490
- this.fileHandlers.forEach(handler => handler(parsed));
491
- }
492
- if (parsed.type === 'FILE_CHUNK') {
493
- this.saveFileProgress(parsed.fileId, parsed.chunkIndex);
494
- this.handlers.forEach((callbacks, pattern) => {
495
- if (pattern === 'file:chunk' || pattern === `file:chunk/${parsed.fileId}`) {
496
- callbacks.forEach(cb => cb(parsed));
497
- }
498
- });
499
- }
500
- if (parsed.type === 'PULL_RESPONSE') {
501
- this.handlers.forEach((callbacks, pattern) => {
502
- if (pattern === 'pull:response' || pattern === `pull:response/${parsed.topic}`) {
503
- callbacks.forEach(cb => cb(parsed.payload, parsed.topic));
504
- }
505
- });
506
- }
507
-
508
- // ३. Pub/Sub Messages
509
- if (parsed.topic && parsed.payload !== undefined) {
510
- const topic = parsed.topic;
511
- this.handlers.forEach((callbacks, pattern) => {
512
- if (this._matchTopic(pattern, topic)) {
513
- callbacks.forEach(cb => cb(parsed.payload, topic));
514
- }
515
- });
516
- }
517
- } catch (e) {
518
- this.handlers.forEach((callbacks, pattern) => {
519
- if (pattern === 'raw') callbacks.forEach(cb => cb(data));
520
- });
521
- }
522
- }
523
-
524
- /**
525
- * @param {string} to
526
- * @param {string} msgId
527
- * @private
528
- */
529
- _sendAck(to, msgId) {
530
- this.publish(`phone/signaling/${to}`, {
531
- type: 'ACK',
532
- from: this.deviceId,
533
- to: to,
534
- data: { ackId: msgId },
535
- timestamp: Date.now()
536
- });
537
- }
538
-
539
- _matchTopic(pattern, topic) {
540
- if (pattern === topic || pattern === '#') return true;
541
- const pParts = pattern.split('/');
542
- const tParts = topic.split('/');
543
- if (pParts.length !== tParts.length && !pattern.includes('#')) return false;
544
- for (let i = 0; i < pParts.length; i++) {
545
- if (pParts[i] === '#') return true;
546
- if (pParts[i] !== '+' && pParts[i] !== tParts[i]) return false;
547
- }
548
- return pParts.length === tParts.length;
549
- }
550
-
551
- /**
552
- * @param {string} topic
553
- * @param {TopicCallback} callback
554
- */
555
- subscribe(topic, callback) {
556
- if (!this.handlers.has(topic)) {
557
- this.handlers.set(topic, new Set());
558
- // Tell server we want to sub
559
- if (this.socket && this.socket.readyState === WebSocket.OPEN) {
560
- this.socket.send(JSON.stringify({ type: 'sub', topic }));
561
- }
562
- }
563
- this.handlers.get(topic).add(callback);
564
- }
565
-
566
- /**
567
- * @param {string} topic
568
- * @param {TopicCallback} callback
569
- */
570
- unsubscribe(topic, callback) {
571
- if (this.handlers.has(topic)) {
572
- const callbacks = this.handlers.get(topic);
573
- callbacks.delete(callback);
574
- if (callbacks.size === 0) {
575
- this.handlers.delete(topic);
576
- // Tell server we want to unsub
577
- if (this.socket && this.socket.readyState === WebSocket.OPEN) {
578
- this.socket.send(JSON.stringify({ type: 'unsub', topic }));
579
- }
580
- }
581
- }
582
- }
583
-
584
- /**
585
- * @param {string} topic
586
- * @param {any} payload
587
- */
588
- publish(topic, payload) {
589
- if (this.socket && this.socket.readyState === WebSocket.OPEN) {
590
- this.socket.send(JSON.stringify({ topic, payload }));
591
- }
592
- }
593
-
594
- /**
595
- * High-frequency data push
596
- * @param {string} topic
597
- * @param {any} payload
598
- */
599
- pubPush(topic, payload) {
600
- if (this.socket && this.socket.readyState === WebSocket.OPEN) {
601
- this.socket.send(JSON.stringify({ type: 'pub', topic, payload }));
602
- }
603
- }
604
-
605
- /**
606
- * Request historical data from topic
607
- * @param {string} topic
608
- * @param {number} [count]
609
- */
610
- subPull(topic, count = 10) {
611
- if (this.socket && this.socket.readyState === WebSocket.OPEN) {
612
- this.socket.send(JSON.stringify({
613
- type: 'PULL_REQUEST',
614
- topic,
615
- count
616
- }));
617
- }
618
- }
619
-
620
- /**
621
- * Start downloading a file by chunks
622
- * @param {string} fileId
623
- * @param {number} [startChunk]
624
- */
625
- subFile(fileId, startChunk = 0) {
626
- if (this.socket && this.socket.readyState === WebSocket.OPEN) {
627
- this.socket.send(JSON.stringify({
628
- type: 'FILE_REQUEST',
629
- fileId,
630
- startChunk
631
- }));
632
- }
633
- }
634
-
635
- /**
636
- * Resume a file download from last saved progress
637
- * @param {string} fileId
638
- */
639
- resumeFile(fileId) {
640
- const lastChunk = parseInt(localStorage.getItem(`dolphin_file_${fileId}`) || "-1");
641
- this.subFile(fileId, lastChunk + 1);
642
- }
643
-
644
- /**
645
- * Save download progress
646
- * @param {string} fileId
647
- * @param {number} chunkIndex
648
- */
649
- saveFileProgress(fileId, chunkIndex) {
650
- this.storage.setItem(`dolphin_file_${fileId}`, chunkIndex.toString());
651
- }
652
-
653
- /**
654
- * @param {function(SignalMessage): void} handler
655
- */
656
- onSignal(handler) {
657
- this.signalHandlers.add(handler);
658
- }
659
-
660
- /**
661
- * @param {function(SignalMessage): void} handler
662
- */
663
- offSignal(handler) {
664
- this.signalHandlers.delete(handler);
665
- }
666
-
667
- /**
668
- * @param {function(FileMetadata): void} handler
669
- */
670
- onFileAvailable(handler) {
671
- this.fileHandlers.add(handler);
672
- }
673
-
674
- /**
675
- * @param {function(FileMetadata): void} handler
676
- */
677
- offFileAvailable(handler) {
678
- this.fileHandlers.delete(handler);
679
- }
680
-
681
- _maybeReconnect() {
682
- if (this.reconnectAttempts < this.maxReconnectAttempts) {
683
- this.reconnectAttempts++;
684
- const delay = Math.pow(2, this.reconnectAttempts) * 1000;
685
- setTimeout(() => this.connect(), delay);
686
- }
687
- }
688
- }
689
-
690
- // Browser Global Export
691
- if (typeof window !== 'undefined') {
692
- // @ts-ignore
693
- window.DolphinClient = DolphinClient;
694
- // @ts-ignore
695
- window.dolphin = new DolphinClient();
696
- }
697
-
698
- // NodeJS/CommonJS/ESM Export support
699
- if (typeof module !== 'undefined' && module.exports) {
700
- module.exports = { DolphinClient };
701
- }
702
-
703
- export { DolphinClient };
@@ -1,211 +0,0 @@
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
- }