dolphin-server-modules 2.8.0 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/mongoose/index.js +1 -4
- package/dist/adapters/mongoose/index.js.map +1 -1
- package/dist/adapters/mongoose/index.test.js +2 -4
- package/dist/adapters/mongoose/index.test.js.map +1 -1
- package/dist/adapters/mongoose/integration.test.js +19 -54
- package/dist/adapters/mongoose/integration.test.js.map +1 -1
- package/dist/auth/auth.js +23 -29
- package/dist/auth/auth.js.map +1 -1
- package/dist/auth/auth.test.js +5 -10
- package/dist/auth/auth.test.js.map +1 -1
- package/dist/authController/authController.js +8 -48
- package/dist/authController/authController.js.map +1 -1
- package/dist/authController/authController.test.js +121 -123
- package/dist/authController/authController.test.js.map +1 -1
- package/dist/bin/cli.js +149 -635
- package/dist/bin/cli.js.map +1 -1
- package/dist/controller/controller.js +4 -11
- package/dist/controller/controller.js.map +1 -1
- package/dist/controller/controller.test.js +4 -6
- package/dist/controller/controller.test.js.map +1 -1
- package/dist/curd/crud.js +4 -11
- package/dist/curd/crud.js.map +1 -1
- package/dist/curd/crud.test.js +2 -4
- package/dist/curd/crud.test.js.map +1 -1
- package/dist/demo-server.js +21 -59
- package/dist/demo-server.js.map +1 -1
- package/dist/djson/djson.js +10 -22
- package/dist/djson/djson.js.map +1 -1
- package/dist/djson/djson.test.js +149 -184
- package/dist/djson/djson.test.js.map +1 -1
- package/dist/dolphin-bench.js +4 -9
- package/dist/dolphin-bench.js.map +1 -1
- package/dist/hard-performance-test.js +9 -14
- package/dist/hard-performance-test.js.map +1 -1
- package/dist/index.js +4 -20
- package/dist/index.js.map +1 -1
- package/dist/middleware/zod.js +9 -15
- package/dist/middleware/zod.js.map +1 -1
- package/dist/middleware/zod.test.js +12 -14
- package/dist/middleware/zod.test.js.map +1 -1
- package/dist/performance-test.js +9 -14
- package/dist/performance-test.js.map +1 -1
- package/dist/real-test-mongoose.js +17 -22
- package/dist/real-test-mongoose.js.map +1 -1
- package/dist/realtime/codec.js +3 -8
- package/dist/realtime/codec.js.map +1 -1
- package/dist/realtime/core.js +20 -64
- package/dist/realtime/core.js.map +1 -1
- package/dist/realtime/index.js +4 -20
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime/plugins.js +6 -12
- package/dist/realtime/plugins.js.map +1 -1
- package/dist/realtime/realtime.test.js +10 -45
- package/dist/realtime/realtime.test.js.map +1 -1
- package/dist/realtime/trie.js +1 -5
- package/dist/realtime/trie.js.map +1 -1
- package/dist/router/router.js +1 -4
- package/dist/router/router.js.map +1 -1
- package/dist/router/router.test.js +9 -11
- package/dist/router/router.test.js.map +1 -1
- package/dist/server/server.js +12 -18
- package/dist/server/server.js.map +1 -1
- package/dist/server/server.test.js +21 -26
- package/dist/server/server.test.js.map +1 -1
- package/dist/services/ai-service.d.ts +16 -0
- package/dist/services/ai-service.js +141 -0
- package/dist/services/ai-service.js.map +1 -0
- package/dist/signaling/index.js +4 -9
- package/dist/signaling/index.js.map +1 -1
- package/dist/signaling/signaling.test.js +13 -15
- package/dist/signaling/signaling.test.js.map +1 -1
- package/dist/swagger/swagger.js +3 -8
- package/dist/swagger/swagger.js.map +1 -1
- package/dist/swagger/swagger.test.js +10 -12
- package/dist/swagger/swagger.test.js.map +1 -1
- package/dist/templates/index.d.ts +9 -0
- package/dist/templates/index.js +112 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/test-2fa-real.js +6 -11
- package/dist/test-2fa-real.js.map +1 -1
- package/dist/test-dolphin.js +6 -8
- package/dist/test-dolphin.js.map +1 -1
- package/dist/utils/ui.d.ts +10 -0
- package/dist/utils/ui.js +36 -0
- package/dist/utils/ui.js.map +1 -0
- package/package.json +2 -1
- package/scripts/client.js +3 -1
package/dist/middleware/zod.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateAppRoute = exports.validatePagesRequest = exports.validateStructure = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
1
|
+
import { ZodError } from 'zod';
|
|
5
2
|
/**
|
|
6
3
|
* Framework-agnostic validation utility.
|
|
7
4
|
* Validates any given data against a provided Zod schema.
|
|
8
5
|
*/
|
|
9
|
-
const validateStructure = (schema, data) => {
|
|
6
|
+
export const validateStructure = (schema, data) => {
|
|
10
7
|
try {
|
|
11
8
|
return schema.parse(data);
|
|
12
9
|
}
|
|
13
10
|
catch (err) {
|
|
14
|
-
if (err instanceof
|
|
11
|
+
if (err instanceof ZodError) {
|
|
15
12
|
const zodErr = err;
|
|
16
13
|
throw {
|
|
17
14
|
status: 400,
|
|
@@ -22,20 +19,19 @@ const validateStructure = (schema, data) => {
|
|
|
22
19
|
throw err;
|
|
23
20
|
}
|
|
24
21
|
};
|
|
25
|
-
exports.validateStructure = validateStructure;
|
|
26
22
|
/**
|
|
27
23
|
* Express / Next.js Pages API Middleware
|
|
28
24
|
* Validates request body, query, and params.
|
|
29
25
|
*/
|
|
30
|
-
const validatePagesRequest = (schemas) => {
|
|
26
|
+
export const validatePagesRequest = (schemas) => {
|
|
31
27
|
return (req, res, next) => {
|
|
32
28
|
try {
|
|
33
29
|
if (schemas.body)
|
|
34
|
-
req.body =
|
|
30
|
+
req.body = validateStructure(schemas.body, req.body);
|
|
35
31
|
if (schemas.query)
|
|
36
|
-
req.query =
|
|
32
|
+
req.query = validateStructure(schemas.query, req.query);
|
|
37
33
|
if (schemas.params)
|
|
38
|
-
req.params =
|
|
34
|
+
req.params = validateStructure(schemas.params, req.params);
|
|
39
35
|
next();
|
|
40
36
|
}
|
|
41
37
|
catch (err) {
|
|
@@ -43,12 +39,11 @@ const validatePagesRequest = (schemas) => {
|
|
|
43
39
|
}
|
|
44
40
|
};
|
|
45
41
|
};
|
|
46
|
-
exports.validatePagesRequest = validatePagesRequest;
|
|
47
42
|
/**
|
|
48
43
|
* App Router Route Handler Wrapper
|
|
49
44
|
* Used to wrap a standard Route Handler function to ensure request validation.
|
|
50
45
|
*/
|
|
51
|
-
const validateAppRoute = (schema, handler) => {
|
|
46
|
+
export const validateAppRoute = (schema, handler) => {
|
|
52
47
|
return async (req, ...args) => {
|
|
53
48
|
try {
|
|
54
49
|
// Typically we validate the body for App Router POST/PUT requests
|
|
@@ -60,7 +55,7 @@ const validateAppRoute = (schema, handler) => {
|
|
|
60
55
|
const url = new URL(req.url);
|
|
61
56
|
body = Object.fromEntries(url.searchParams.entries());
|
|
62
57
|
}
|
|
63
|
-
const validatedData =
|
|
58
|
+
const validatedData = validateStructure(schema, body);
|
|
64
59
|
return handler(req, validatedData, ...args);
|
|
65
60
|
}
|
|
66
61
|
catch (err) {
|
|
@@ -72,5 +67,4 @@ const validateAppRoute = (schema, handler) => {
|
|
|
72
67
|
}
|
|
73
68
|
};
|
|
74
69
|
};
|
|
75
|
-
exports.validateAppRoute = validateAppRoute;
|
|
76
70
|
//# sourceMappingURL=zod.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/middleware/zod.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/middleware/zod.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const zod_1 = require("zod");
|
|
4
|
-
const zod_2 = require("./zod");
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { validateStructure, validatePagesRequest, validateAppRoute } from './zod';
|
|
5
3
|
describe('Zod Validation Middleware', () => {
|
|
6
|
-
const userSchema =
|
|
7
|
-
name:
|
|
8
|
-
age:
|
|
4
|
+
const userSchema = z.object({
|
|
5
|
+
name: z.string().min(2),
|
|
6
|
+
age: z.number().gte(18)
|
|
9
7
|
});
|
|
10
8
|
describe('validateStructure', () => {
|
|
11
9
|
it('validates and returns data if valid', () => {
|
|
12
10
|
const data = { name: 'Alice', age: 25 };
|
|
13
|
-
const res =
|
|
11
|
+
const res = validateStructure(userSchema, data);
|
|
14
12
|
expect(res).toEqual(data);
|
|
15
13
|
});
|
|
16
14
|
it('throws custom error object if invalid', () => {
|
|
17
|
-
expect(() =>
|
|
15
|
+
expect(() => validateStructure(userSchema, { name: 'A', age: 10 })).toThrowError();
|
|
18
16
|
try {
|
|
19
|
-
|
|
17
|
+
validateStructure(userSchema, { name: 'A', age: 10 });
|
|
20
18
|
}
|
|
21
19
|
catch (err) {
|
|
22
20
|
expect(err.status).toBe(400);
|
|
@@ -27,7 +25,7 @@ describe('Zod Validation Middleware', () => {
|
|
|
27
25
|
});
|
|
28
26
|
describe('validatePagesRequest', () => {
|
|
29
27
|
it('calls next if valid', () => {
|
|
30
|
-
const middleware =
|
|
28
|
+
const middleware = validatePagesRequest({ body: userSchema });
|
|
31
29
|
const req = { body: { name: 'Alice', age: 25 } };
|
|
32
30
|
const res = { status: jest.fn().mockReturnThis(), json: jest.fn() };
|
|
33
31
|
const next = jest.fn();
|
|
@@ -36,7 +34,7 @@ describe('Zod Validation Middleware', () => {
|
|
|
36
34
|
expect(res.status).not.toHaveBeenCalled();
|
|
37
35
|
});
|
|
38
36
|
it('returns 400 if invalid', () => {
|
|
39
|
-
const middleware =
|
|
37
|
+
const middleware = validatePagesRequest({ body: userSchema });
|
|
40
38
|
const req = { body: { name: 'A' } };
|
|
41
39
|
const res = { status: jest.fn().mockReturnThis(), json: jest.fn() };
|
|
42
40
|
const next = jest.fn();
|
|
@@ -49,7 +47,7 @@ describe('Zod Validation Middleware', () => {
|
|
|
49
47
|
describe('validateAppRoute', () => {
|
|
50
48
|
it('passes validated data to the handler', async () => {
|
|
51
49
|
const handler = jest.fn().mockReturnValue(new Response('OK'));
|
|
52
|
-
const wrapped =
|
|
50
|
+
const wrapped = validateAppRoute(userSchema, handler);
|
|
53
51
|
const request = new Request('http://localhost', {
|
|
54
52
|
method: 'POST',
|
|
55
53
|
body: JSON.stringify({ name: 'Alice', age: 25 })
|
|
@@ -59,7 +57,7 @@ describe('Zod Validation Middleware', () => {
|
|
|
59
57
|
});
|
|
60
58
|
it('returns a 400 response on validation failure', async () => {
|
|
61
59
|
const handler = jest.fn();
|
|
62
|
-
const wrapped =
|
|
60
|
+
const wrapped = validateAppRoute(userSchema, handler);
|
|
63
61
|
const request = new Request('http://localhost', {
|
|
64
62
|
method: 'POST',
|
|
65
63
|
body: JSON.stringify({ name: 'A', age: 10 })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.test.js","sourceRoot":"","sources":["../../src/middleware/zod.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zod.test.js","sourceRoot":"","sources":["../../src/middleware/zod.test.ts"],"names":[],"mappings":"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"}
|
package/dist/performance-test.js
CHANGED
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
1
|
// performance-cluster.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
import { createServer } from "http";
|
|
3
|
+
import { cpus } from "os";
|
|
4
|
+
import cluster from "cluster";
|
|
10
5
|
const PORT = 3005;
|
|
11
6
|
const CONCURRENCY = 50;
|
|
12
7
|
const DURATION_MS = 5000;
|
|
13
|
-
if (
|
|
14
|
-
const numWorkers =
|
|
8
|
+
if (cluster.isMaster) {
|
|
9
|
+
const numWorkers = cpus().length;
|
|
15
10
|
console.log(`🍴 Master running, forking ${numWorkers} workers...`);
|
|
16
11
|
for (let i = 0; i < numWorkers; i++) {
|
|
17
|
-
|
|
12
|
+
cluster.fork();
|
|
18
13
|
}
|
|
19
14
|
let results = [];
|
|
20
|
-
for (const id in
|
|
21
|
-
|
|
15
|
+
for (const id in cluster.workers) {
|
|
16
|
+
cluster.workers[id]?.on("message", (msg) => {
|
|
22
17
|
if (msg.type === "result") {
|
|
23
18
|
results.push(msg.data);
|
|
24
19
|
if (results.length === numWorkers) {
|
|
@@ -34,7 +29,7 @@ if (cluster_1.default.isMaster) {
|
|
|
34
29
|
}
|
|
35
30
|
else {
|
|
36
31
|
// Worker process
|
|
37
|
-
const app =
|
|
32
|
+
const app = createServer((req, res) => {
|
|
38
33
|
if (req.url === "/perf") {
|
|
39
34
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
40
35
|
res.end(JSON.stringify({ status: "ok", time: Date.now() }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance-test.js","sourceRoot":"","sources":["../src/performance-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"performance-test.js","sourceRoot":"","sources":["../src/performance-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
const mongoose_1 = __importDefault(require("mongoose"));
|
|
7
|
-
const mongodb_memory_server_1 = require("mongodb-memory-server");
|
|
8
|
-
const server_1 = require("./server/server");
|
|
9
|
-
const mongoose_2 = require("./adapters/mongoose");
|
|
10
|
-
const crud_1 = require("./curd/crud");
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
import { MongoMemoryServer } from 'mongodb-memory-server';
|
|
3
|
+
import { createDolphinServer } from './server/server';
|
|
4
|
+
import { createMongooseAdapter } from './adapters/mongoose';
|
|
5
|
+
import { createCrudController } from './curd/crud';
|
|
11
6
|
// Define a sample schema
|
|
12
|
-
const ProductSchema = new
|
|
7
|
+
const ProductSchema = new mongoose.Schema({
|
|
13
8
|
name: String,
|
|
14
9
|
price: Number,
|
|
15
10
|
category: String,
|
|
16
11
|
createdAt: String,
|
|
17
12
|
updatedAt: String,
|
|
18
13
|
});
|
|
19
|
-
const Product =
|
|
20
|
-
const UserSchema = new
|
|
14
|
+
const Product = mongoose.model('Product', ProductSchema);
|
|
15
|
+
const UserSchema = new mongoose.Schema({
|
|
21
16
|
email: String
|
|
22
17
|
});
|
|
23
|
-
const User =
|
|
24
|
-
const RefreshTokenSchema = new
|
|
18
|
+
const User = mongoose.model('User', UserSchema);
|
|
19
|
+
const RefreshTokenSchema = new mongoose.Schema({
|
|
25
20
|
token: String
|
|
26
21
|
});
|
|
27
|
-
const RefreshToken =
|
|
22
|
+
const RefreshToken = mongoose.model('RefreshToken', RefreshTokenSchema);
|
|
28
23
|
async function runTest() {
|
|
29
24
|
console.log('🌱 Starting MongoDB Memory Server...');
|
|
30
|
-
const mongod = await
|
|
25
|
+
const mongod = await MongoMemoryServer.create();
|
|
31
26
|
const uri = mongod.getUri();
|
|
32
|
-
await
|
|
27
|
+
await mongoose.connect(uri);
|
|
33
28
|
console.log('✅ Connected to MongoDB Memory Server');
|
|
34
29
|
// Create Mongoose adapter for Dolphin CRUD
|
|
35
|
-
const db =
|
|
30
|
+
const db = createMongooseAdapter({
|
|
36
31
|
User,
|
|
37
32
|
RefreshToken,
|
|
38
33
|
models: { Product },
|
|
39
34
|
leanByDefault: true,
|
|
40
35
|
softDelete: false
|
|
41
36
|
});
|
|
42
|
-
const app =
|
|
37
|
+
const app = createDolphinServer();
|
|
43
38
|
// Create CRUD Controller, disable enforceOwnership so it works publicly
|
|
44
|
-
const crud =
|
|
39
|
+
const crud = createCrudController(db, "Product", { enforceOwnership: false });
|
|
45
40
|
// Map Routes
|
|
46
41
|
app.get('/products', crud.getAll);
|
|
47
42
|
app.get('/products/:id', crud.getOne);
|
|
@@ -99,7 +94,7 @@ async function runTest() {
|
|
|
99
94
|
finally {
|
|
100
95
|
// Cleanup
|
|
101
96
|
server.close();
|
|
102
|
-
await
|
|
97
|
+
await mongoose.disconnect();
|
|
103
98
|
await mongod.stop();
|
|
104
99
|
process.exit(0);
|
|
105
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-test-mongoose.js","sourceRoot":"","sources":["../src/real-test-mongoose.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"real-test-mongoose.js","sourceRoot":"","sources":["../src/real-test-mongoose.ts"],"names":[],"mappings":"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"}
|
package/dist/realtime/codec.js
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getSize = getSize;
|
|
4
|
-
exports.encode = encode;
|
|
5
|
-
exports.decode = decode;
|
|
6
1
|
/**
|
|
7
2
|
* Lightweight binary/JSON codec for Dolphin Realtime.
|
|
8
3
|
* Optimized for small payloads and cross-platform compatibility.
|
|
9
4
|
*/
|
|
10
|
-
function getSize(data) {
|
|
5
|
+
export function getSize(data) {
|
|
11
6
|
if (Buffer.isBuffer(data))
|
|
12
7
|
return data.length;
|
|
13
8
|
if (typeof data === 'string')
|
|
@@ -22,7 +17,7 @@ function getSize(data) {
|
|
|
22
17
|
* 3: JSON
|
|
23
18
|
* Default: Buffer as is
|
|
24
19
|
*/
|
|
25
|
-
function encode(data) {
|
|
20
|
+
export function encode(data) {
|
|
26
21
|
if (Buffer.isBuffer(data))
|
|
27
22
|
return data;
|
|
28
23
|
if (typeof data === 'number') {
|
|
@@ -48,7 +43,7 @@ function encode(data) {
|
|
|
48
43
|
/**
|
|
49
44
|
* Decode Buffer to data.
|
|
50
45
|
*/
|
|
51
|
-
function decode(buf) {
|
|
46
|
+
export function decode(buf) {
|
|
52
47
|
if (!buf || buf.length === 0)
|
|
53
48
|
return null;
|
|
54
49
|
const t = buf[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/realtime/codec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/realtime/codec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAS;IAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,IAAS;IAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QACvB,sCAAsC;QACtC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACT,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACT,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACjB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/realtime/core.js
CHANGED
|
@@ -1,51 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.toBase64 = exports.toBuffer = exports.djson = exports.getSize = exports.decode = exports.encode = exports.TopicTrie = exports.RealtimeCore = void 0;
|
|
37
|
-
const events_1 = require("events");
|
|
38
|
-
const trie_1 = require("./trie");
|
|
39
|
-
const codec_1 = require("./codec");
|
|
40
|
-
const djson_1 = require("../djson/djson");
|
|
41
|
-
const fs = __importStar(require("fs"));
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { TopicTrie } from './trie';
|
|
3
|
+
import { getSize } from './codec';
|
|
4
|
+
import { djson, toBuffer } from '../djson/djson';
|
|
5
|
+
import * as fs from 'fs';
|
|
42
6
|
/**
|
|
43
7
|
* RealtimeCore v2.0 - High performance unified pub/sub bus for Dolphin
|
|
44
8
|
* Added Features: pubPush, subPull, pubFile, subFile, Resume, P2P Stream
|
|
45
9
|
*/
|
|
46
|
-
class RealtimeCore extends
|
|
10
|
+
export class RealtimeCore extends EventEmitter {
|
|
47
11
|
config;
|
|
48
|
-
trie = new
|
|
12
|
+
trie = new TopicTrie();
|
|
49
13
|
retained = new Map();
|
|
50
14
|
devices = new Map();
|
|
51
15
|
plugins = new Map();
|
|
@@ -148,7 +112,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
148
112
|
}
|
|
149
113
|
async initRedis(url) {
|
|
150
114
|
try {
|
|
151
|
-
const Redis = (await
|
|
115
|
+
const Redis = (await import('ioredis')).default;
|
|
152
116
|
this.redisPub = new Redis(url);
|
|
153
117
|
this.redisSub = new Redis(url);
|
|
154
118
|
this.redisSub.subscribe('dolphin-rt');
|
|
@@ -182,7 +146,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
182
146
|
}
|
|
183
147
|
// BUG FIX #1: Use TopicTrie matching for retained messages
|
|
184
148
|
for (const [t, data] of this.retained.entries()) {
|
|
185
|
-
const tempTrie = new
|
|
149
|
+
const tempTrie = new TopicTrie();
|
|
186
150
|
tempTrie.add(topic, fn);
|
|
187
151
|
tempTrie.match(t, (matchedFn) => matchedFn(data.payload));
|
|
188
152
|
}
|
|
@@ -213,7 +177,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
213
177
|
}
|
|
214
178
|
}
|
|
215
179
|
publish(topic, payload, opts = {}, deviceId) {
|
|
216
|
-
const size =
|
|
180
|
+
const size = getSize(payload);
|
|
217
181
|
if (size > (this.config.maxMessageSize || 256 * 1024)) {
|
|
218
182
|
throw new Error(`Payload too large: ${size} bytes`);
|
|
219
183
|
}
|
|
@@ -510,7 +474,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
510
474
|
const targetSocket = this.getSocket(toDeviceId);
|
|
511
475
|
if (targetSocket && targetSocket.readyState === 1) {
|
|
512
476
|
const message = this.config.useBinaryProtocol
|
|
513
|
-
?
|
|
477
|
+
? toBuffer(payload)
|
|
514
478
|
: JSON.stringify({
|
|
515
479
|
type: 'P2P_DATA',
|
|
516
480
|
from: fromDeviceId,
|
|
@@ -547,7 +511,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
547
511
|
try {
|
|
548
512
|
const device = this.devices.get(deviceId);
|
|
549
513
|
const data = this.config.useBinaryProtocol
|
|
550
|
-
?
|
|
514
|
+
? toBuffer(payload)
|
|
551
515
|
: JSON.stringify(payload);
|
|
552
516
|
device.socket.send(data);
|
|
553
517
|
return true;
|
|
@@ -724,7 +688,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
724
688
|
}
|
|
725
689
|
// Fallback: try djson for other custom formats
|
|
726
690
|
if (!topic) {
|
|
727
|
-
const decoded =
|
|
691
|
+
const decoded = djson(rawStr);
|
|
728
692
|
if (decoded && typeof decoded === 'object') {
|
|
729
693
|
if (decoded.type === 'pub' && decoded.topic) {
|
|
730
694
|
topic = decoded.topic;
|
|
@@ -768,7 +732,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
768
732
|
if (device.socket && device.socket.readyState === 1) {
|
|
769
733
|
try {
|
|
770
734
|
if (this.config.useBinaryProtocol) {
|
|
771
|
-
const buffer =
|
|
735
|
+
const buffer = toBuffer(jsonPayload);
|
|
772
736
|
device.socket.send(buffer);
|
|
773
737
|
}
|
|
774
738
|
else {
|
|
@@ -807,7 +771,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
807
771
|
if (socket.readyState === 1) {
|
|
808
772
|
try {
|
|
809
773
|
const message = this.config.useBinaryProtocol
|
|
810
|
-
?
|
|
774
|
+
? toBuffer(payload)
|
|
811
775
|
: JSON.stringify(payload);
|
|
812
776
|
socket.send(message);
|
|
813
777
|
}
|
|
@@ -820,7 +784,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
820
784
|
if (socket.readyState === 1) {
|
|
821
785
|
try {
|
|
822
786
|
const message = this.config.useBinaryProtocol
|
|
823
|
-
?
|
|
787
|
+
? toBuffer(payload)
|
|
824
788
|
: JSON.stringify(payload);
|
|
825
789
|
socket.send(message);
|
|
826
790
|
}
|
|
@@ -871,7 +835,7 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
871
835
|
if (this.redisSub) {
|
|
872
836
|
await this.redisSub.quit();
|
|
873
837
|
}
|
|
874
|
-
this.trie = new
|
|
838
|
+
this.trie = new TopicTrie();
|
|
875
839
|
this.retained.clear();
|
|
876
840
|
this.devices.clear();
|
|
877
841
|
this.plugins.clear();
|
|
@@ -906,16 +870,8 @@ class RealtimeCore extends events_1.EventEmitter {
|
|
|
906
870
|
}, 5000);
|
|
907
871
|
}
|
|
908
872
|
}
|
|
909
|
-
exports.RealtimeCore = RealtimeCore;
|
|
910
873
|
// Export for use
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
Object.defineProperty(exports, "encode", { enumerable: true, get: function () { return codec_2.encode; } });
|
|
915
|
-
Object.defineProperty(exports, "decode", { enumerable: true, get: function () { return codec_2.decode; } });
|
|
916
|
-
Object.defineProperty(exports, "getSize", { enumerable: true, get: function () { return codec_2.getSize; } });
|
|
917
|
-
var djson_2 = require("../djson/djson");
|
|
918
|
-
Object.defineProperty(exports, "djson", { enumerable: true, get: function () { return djson_2.djson; } });
|
|
919
|
-
Object.defineProperty(exports, "toBuffer", { enumerable: true, get: function () { return djson_2.toBuffer; } });
|
|
920
|
-
Object.defineProperty(exports, "toBase64", { enumerable: true, get: function () { return djson_2.toBase64; } });
|
|
874
|
+
export { TopicTrie } from './trie';
|
|
875
|
+
export { encode, decode, getSize } from './codec';
|
|
876
|
+
export { djson, toBuffer, toBase64 } from '../djson/djson';
|
|
921
877
|
//# sourceMappingURL=core.js.map
|