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.
- package/TUTORIAL_NEPALI.md +181 -0
- package/dist/adapters/mongoose/index.d.ts +4 -4
- package/dist/adapters/mongoose/index.js.map +1 -1
- package/dist/adapters/mongoose/index.test.d.ts +1 -0
- package/dist/adapters/mongoose/index.test.js +145 -0
- package/dist/adapters/mongoose/index.test.js.map +1 -0
- package/dist/adapters/mongoose/integration.test.d.ts +5 -0
- package/dist/adapters/mongoose/integration.test.js +217 -0
- package/dist/adapters/mongoose/integration.test.js.map +1 -0
- package/dist/ai/dolphin-agent/agent.d.ts +5 -0
- package/dist/ai/dolphin-agent/agent.js +93 -35
- package/dist/ai/dolphin-agent/agent.js.map +1 -1
- package/dist/ai/dolphin-agent/config.js +30 -37
- package/dist/ai/dolphin-agent/config.js.map +1 -1
- package/dist/auth/auth.test.d.ts +1 -0
- package/dist/auth/auth.test.js +286 -0
- package/dist/auth/auth.test.js.map +1 -0
- package/dist/authController/authController.test.d.ts +1 -0
- package/dist/authController/authController.test.js +359 -0
- package/dist/authController/authController.test.js.map +1 -0
- package/dist/bin/cli.js +494 -165
- package/dist/bin/cli.js.map +1 -1
- package/dist/client.test.d.ts +22 -0
- package/dist/client.test.js +573 -0
- package/dist/client.test.js.map +1 -0
- package/dist/controller/controller.test.d.ts +1 -0
- package/dist/controller/controller.test.js +37 -0
- package/dist/controller/controller.test.js.map +1 -0
- package/dist/curd/crud.test.d.ts +1 -0
- package/dist/curd/crud.test.js +104 -0
- package/dist/curd/crud.test.js.map +1 -0
- package/dist/demo-server.d.ts +1 -0
- package/dist/demo-server.js +191 -0
- package/dist/demo-server.js.map +1 -0
- package/dist/djson/djson.test.d.ts +1 -0
- package/dist/djson/djson.test.js +200 -0
- package/dist/djson/djson.test.js.map +1 -0
- package/dist/dolphin-bench.d.ts +1 -0
- package/dist/dolphin-bench.js +63 -0
- package/dist/dolphin-bench.js.map +1 -0
- package/dist/hard-performance-test.d.ts +1 -0
- package/dist/hard-performance-test.js +97 -0
- package/dist/hard-performance-test.js.map +1 -0
- package/dist/middleware/zod.test.d.ts +1 -0
- package/dist/middleware/zod.test.js +74 -0
- package/dist/middleware/zod.test.js.map +1 -0
- package/dist/performance-test.d.ts +1 -0
- package/dist/performance-test.js +92 -0
- package/dist/performance-test.js.map +1 -0
- package/dist/real-test-mongoose.d.ts +1 -0
- package/dist/real-test-mongoose.js +104 -0
- package/dist/real-test-mongoose.js.map +1 -0
- package/dist/realtime/camera.d.ts +119 -0
- package/dist/realtime/camera.js +299 -0
- package/dist/realtime/camera.js.map +1 -0
- package/dist/realtime/camera.test.d.ts +1 -0
- package/dist/realtime/camera.test.js +345 -0
- package/dist/realtime/camera.test.js.map +1 -0
- package/dist/realtime/index.d.ts +2 -0
- package/dist/realtime/index.js +2 -0
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime/realtime.test.d.ts +1 -0
- package/dist/realtime/realtime.test.js +623 -0
- package/dist/realtime/realtime.test.js.map +1 -0
- package/dist/realtime/rtsp.d.ts +65 -0
- package/dist/realtime/rtsp.js +410 -0
- package/dist/realtime/rtsp.js.map +1 -0
- package/dist/realtime/rtsp.test.d.ts +1 -0
- package/dist/realtime/rtsp.test.js +361 -0
- package/dist/realtime/rtsp.test.js.map +1 -0
- package/dist/router/router.test.d.ts +1 -0
- package/dist/router/router.test.js +45 -0
- package/dist/router/router.test.js.map +1 -0
- package/dist/server/server.test.d.ts +1 -0
- package/dist/server/server.test.js +299 -0
- package/dist/server/server.test.js.map +1 -0
- package/dist/services/ai-service.js +22 -11
- package/dist/services/ai-service.js.map +1 -1
- package/dist/signaling/signaling.test.d.ts +1 -0
- package/dist/signaling/signaling.test.js +112 -0
- package/dist/signaling/signaling.test.js.map +1 -0
- package/dist/swagger/swagger.js +31 -31
- package/dist/swagger/swagger.test.d.ts +1 -0
- package/dist/swagger/swagger.test.js +38 -0
- package/dist/swagger/swagger.test.js.map +1 -0
- package/dist/templates/index.d.ts +6 -0
- package/dist/templates/index.js +282 -105
- package/dist/templates/index.js.map +1 -1
- package/dist/test-2fa-real.d.ts +1 -0
- package/dist/test-2fa-real.js +105 -0
- package/dist/test-2fa-real.js.map +1 -0
- package/dist/test-dolphin.d.ts +1 -0
- package/dist/test-dolphin.js +98 -0
- package/dist/test-dolphin.js.map +1 -0
- package/dist/utils/ctx.d.ts +50 -0
- package/dist/utils/ctx.js +82 -0
- package/dist/utils/ctx.js.map +1 -0
- package/package.json +155 -45
- package/scripts/client.js +838 -0
- package/scripts/dolphin-persist.js +211 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// test-dolphin.ts
|
|
2
|
+
import { createDolphinServer } from "./server/server";
|
|
3
|
+
import { createDolphinController } from "./controller/controller";
|
|
4
|
+
import { createDolphinAuthController } from "./authController/authController";
|
|
5
|
+
// Mock Database Connection (Replacing ./config.js)
|
|
6
|
+
const dbConnect = async () => {
|
|
7
|
+
console.log("🛠️ Mock Database Connected");
|
|
8
|
+
};
|
|
9
|
+
// Mock Database Interface (Replacing ./auth/model.js)
|
|
10
|
+
const db = {
|
|
11
|
+
createUser: async (data) => ({ id: "123", ...data }),
|
|
12
|
+
findUserByEmail: async (email) => ({ id: "123", email, password: "hashed_password", role: "admin" }),
|
|
13
|
+
findUserById: async (id) => ({ id, email: "user@example.com", role: "admin" }),
|
|
14
|
+
updateUser: async (id, data) => ({ id, ...data }),
|
|
15
|
+
saveRefreshToken: async () => { },
|
|
16
|
+
findRefreshToken: async () => ({ userId: "123", expiresAt: new Date(Date.now() + 10000) }),
|
|
17
|
+
deleteRefreshToken: async () => { },
|
|
18
|
+
// For CRUD
|
|
19
|
+
read: async () => [{ id: "123", name: "John Doe" }],
|
|
20
|
+
create: async (data) => ({ id: "456", ...data }),
|
|
21
|
+
update: async (id, data) => ({ id, ...data }),
|
|
22
|
+
delete: async (id) => ({ id })
|
|
23
|
+
};
|
|
24
|
+
async function main() {
|
|
25
|
+
const app = createDolphinServer();
|
|
26
|
+
await dbConnect();
|
|
27
|
+
// ============ SETUP AUTH ============
|
|
28
|
+
const auth = createDolphinAuthController(db, {
|
|
29
|
+
secret: process.env.JWT_SECRET || 'my-super-secret-key',
|
|
30
|
+
cookieMaxAge: 7 * 24 * 60 * 60 * 1000, // 7 days
|
|
31
|
+
issuer: 'MyApp'
|
|
32
|
+
});
|
|
33
|
+
// ============ CRUD CONTROLLER ============
|
|
34
|
+
const userController = createDolphinController(db, "User");
|
|
35
|
+
// ============ PUBLIC ROUTES (No Auth) ============
|
|
36
|
+
app.post("/auth/register", async (ctx) => {
|
|
37
|
+
const result = await auth.register(ctx);
|
|
38
|
+
return result; // Using the new auto-reply feature!
|
|
39
|
+
});
|
|
40
|
+
app.post("/auth/login", async (ctx) => {
|
|
41
|
+
return await auth.login(ctx);
|
|
42
|
+
});
|
|
43
|
+
app.post("/auth/refresh", async (ctx) => {
|
|
44
|
+
return await auth.refresh(ctx);
|
|
45
|
+
});
|
|
46
|
+
// ============ PROTECTED ROUTES (Auth Required) ============
|
|
47
|
+
// ✅ NOW SUPPORTED: Multiple handlers (middleware + final handler)
|
|
48
|
+
app.get("/auth/me", auth.requireAuth, async (ctx) => {
|
|
49
|
+
const result = await auth.me(ctx);
|
|
50
|
+
return result;
|
|
51
|
+
});
|
|
52
|
+
app.post("/auth/logout", auth.requireAuth, async (ctx) => {
|
|
53
|
+
return await auth.logout(ctx);
|
|
54
|
+
});
|
|
55
|
+
// ============ PROTECTED CRUD ROUTES (Auth Required) ============
|
|
56
|
+
app.get("/user", auth.requireAuth, async (ctx) => {
|
|
57
|
+
const users = await userController.list(ctx, ctx.req.user?.id);
|
|
58
|
+
return users.map((user) => auth.sanitize(user));
|
|
59
|
+
});
|
|
60
|
+
app.post("/user", auth.requireAuth, async (ctx) => {
|
|
61
|
+
const user = await userController.create(ctx, ctx.req.user?.id);
|
|
62
|
+
return auth.sanitize(user);
|
|
63
|
+
});
|
|
64
|
+
// ============ ADMIN ROUTES ============
|
|
65
|
+
app.get("/admin/users", auth.requireAdmin, async (ctx) => {
|
|
66
|
+
const users = await userController.list(ctx);
|
|
67
|
+
return users.map(auth.sanitize);
|
|
68
|
+
});
|
|
69
|
+
// ============ START SERVER ============
|
|
70
|
+
const PORT = 3000;
|
|
71
|
+
app.listen(PORT, () => {
|
|
72
|
+
console.log(`
|
|
73
|
+
🚀 Dolphin Server running on port ${PORT}
|
|
74
|
+
|
|
75
|
+
📋 Available Routes:
|
|
76
|
+
|
|
77
|
+
🔓 PUBLIC ROUTES:
|
|
78
|
+
┌─────────────────────────────────────────────┐
|
|
79
|
+
│ POST /auth/register │
|
|
80
|
+
│ POST /auth/login │
|
|
81
|
+
│ POST /auth/refresh │
|
|
82
|
+
├─────────────────────────────────────────────┤
|
|
83
|
+
│ 🔒 PROTECTED ROUTES (Auth Required): │
|
|
84
|
+
│ GET /auth/me │
|
|
85
|
+
│ POST /auth/logout │
|
|
86
|
+
├─────────────────────────────────────────────┤
|
|
87
|
+
│ 👤 USER CRUD (Protected): │
|
|
88
|
+
│ GET /user │
|
|
89
|
+
│ POST /user │
|
|
90
|
+
├─────────────────────────────────────────────┤
|
|
91
|
+
│ 👑 ADMIN ROUTES: │
|
|
92
|
+
│ GET /admin/users │
|
|
93
|
+
└─────────────────────────────────────────────┘
|
|
94
|
+
`);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
main().catch(console.error);
|
|
98
|
+
//# sourceMappingURL=test-dolphin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-dolphin.js","sourceRoot":"","sources":["../src/test-dolphin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dolphin Universal Context Builder
|
|
3
|
+
*
|
|
4
|
+
* Dolphin modules (auth-controller, crud, router) ले ctx object use गर्छन्।
|
|
5
|
+
* यो helper ले कुनै पनि framework को req/res बाट ctx बनाउँछ।
|
|
6
|
+
*
|
|
7
|
+
* ─── Express ──────────────────────────────────────────────────────
|
|
8
|
+
* import { createCtx } from 'dolphin-server-modules/utils/ctx';
|
|
9
|
+
* app.post('/login', (req, res) => auth.login(createCtx(req, res)));
|
|
10
|
+
*
|
|
11
|
+
* ─── Fastify ──────────────────────────────────────────────────────
|
|
12
|
+
* fastify.post('/login', (req, reply) =>
|
|
13
|
+
* auth.login(createCtx(req.raw, reply.raw, req.body, req.params, req.query))
|
|
14
|
+
* );
|
|
15
|
+
*
|
|
16
|
+
* ─── Next.js API Route ────────────────────────────────────────────
|
|
17
|
+
* export default async function handler(req, res) {
|
|
18
|
+
* return auth.login(createCtx(req, res));
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* ─── Hono ─────────────────────────────────────────────────────────
|
|
22
|
+
* app.post('/login', async (c) => {
|
|
23
|
+
* const ctx = createCtx(c.req.raw, c.res, await c.req.json(), c.req.param());
|
|
24
|
+
* return auth.login(ctx);
|
|
25
|
+
* });
|
|
26
|
+
*/
|
|
27
|
+
export interface DolphinCtx {
|
|
28
|
+
req: any;
|
|
29
|
+
res: any;
|
|
30
|
+
params: Record<string, string>;
|
|
31
|
+
query: Record<string, string>;
|
|
32
|
+
body: any;
|
|
33
|
+
state: Record<string, any>;
|
|
34
|
+
json: (data: any, status?: number) => DolphinCtx;
|
|
35
|
+
text: (data: any, status?: number) => DolphinCtx;
|
|
36
|
+
html: (data: any, status?: number) => DolphinCtx;
|
|
37
|
+
status: (code: number) => DolphinCtx;
|
|
38
|
+
setHeader: (name: string, value: string) => DolphinCtx;
|
|
39
|
+
getHeader: (name: string) => string | undefined;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* कुनै पनि framework को req/res बाट Dolphin ctx बनाउने
|
|
43
|
+
* @param req - Express req / Fastify request.raw / Next.js req / Node.js IncomingMessage
|
|
44
|
+
* @param res - Express res / Fastify reply.raw / Next.js res / Node.js ServerResponse
|
|
45
|
+
* @param body - parsed body (req.body वा await req.json())
|
|
46
|
+
* @param params - route params ({ id: '123' })
|
|
47
|
+
* @param query - query string params
|
|
48
|
+
*/
|
|
49
|
+
export declare function createCtx(req: any, res: any, body?: any, params?: Record<string, string>, query?: Record<string, string>): DolphinCtx;
|
|
50
|
+
export default createCtx;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dolphin Universal Context Builder
|
|
3
|
+
*
|
|
4
|
+
* Dolphin modules (auth-controller, crud, router) ले ctx object use गर्छन्।
|
|
5
|
+
* यो helper ले कुनै पनि framework को req/res बाट ctx बनाउँछ।
|
|
6
|
+
*
|
|
7
|
+
* ─── Express ──────────────────────────────────────────────────────
|
|
8
|
+
* import { createCtx } from 'dolphin-server-modules/utils/ctx';
|
|
9
|
+
* app.post('/login', (req, res) => auth.login(createCtx(req, res)));
|
|
10
|
+
*
|
|
11
|
+
* ─── Fastify ──────────────────────────────────────────────────────
|
|
12
|
+
* fastify.post('/login', (req, reply) =>
|
|
13
|
+
* auth.login(createCtx(req.raw, reply.raw, req.body, req.params, req.query))
|
|
14
|
+
* );
|
|
15
|
+
*
|
|
16
|
+
* ─── Next.js API Route ────────────────────────────────────────────
|
|
17
|
+
* export default async function handler(req, res) {
|
|
18
|
+
* return auth.login(createCtx(req, res));
|
|
19
|
+
* }
|
|
20
|
+
*
|
|
21
|
+
* ─── Hono ─────────────────────────────────────────────────────────
|
|
22
|
+
* app.post('/login', async (c) => {
|
|
23
|
+
* const ctx = createCtx(c.req.raw, c.res, await c.req.json(), c.req.param());
|
|
24
|
+
* return auth.login(ctx);
|
|
25
|
+
* });
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* कुनै पनि framework को req/res बाट Dolphin ctx बनाउने
|
|
29
|
+
* @param req - Express req / Fastify request.raw / Next.js req / Node.js IncomingMessage
|
|
30
|
+
* @param res - Express res / Fastify reply.raw / Next.js res / Node.js ServerResponse
|
|
31
|
+
* @param body - parsed body (req.body वा await req.json())
|
|
32
|
+
* @param params - route params ({ id: '123' })
|
|
33
|
+
* @param query - query string params
|
|
34
|
+
*/
|
|
35
|
+
export function createCtx(req, res, body, params = {}, query = {}) {
|
|
36
|
+
// Auto-detect body from common frameworks
|
|
37
|
+
const resolvedBody = body ?? req.body ?? {};
|
|
38
|
+
const resolvedQuery = query && Object.keys(query).length
|
|
39
|
+
? query
|
|
40
|
+
: req.query ?? {};
|
|
41
|
+
const resolvedParams = params && Object.keys(params).length
|
|
42
|
+
? params
|
|
43
|
+
: req.params ?? {};
|
|
44
|
+
let pendingStatus = 200;
|
|
45
|
+
const send = (data, contentType, status = 200) => {
|
|
46
|
+
if (res.headersSent || res.writableEnded)
|
|
47
|
+
return ctx;
|
|
48
|
+
const finalStatus = status !== undefined ? status : pendingStatus;
|
|
49
|
+
// Express / Node.js style
|
|
50
|
+
if (typeof res.status === 'function' && typeof res.json === 'function') {
|
|
51
|
+
res.status(finalStatus).setHeader('Content-Type', contentType);
|
|
52
|
+
contentType === 'application/json'
|
|
53
|
+
? res.json(data)
|
|
54
|
+
: res.end(String(data));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Raw Node.js ServerResponse
|
|
58
|
+
res.statusCode = finalStatus;
|
|
59
|
+
res.setHeader('Content-Type', contentType);
|
|
60
|
+
res.end(contentType === 'application/json' ? JSON.stringify(data) : String(data));
|
|
61
|
+
}
|
|
62
|
+
pendingStatus = 200;
|
|
63
|
+
return ctx;
|
|
64
|
+
};
|
|
65
|
+
const ctx = {
|
|
66
|
+
req,
|
|
67
|
+
res,
|
|
68
|
+
params: resolvedParams,
|
|
69
|
+
query: resolvedQuery,
|
|
70
|
+
body: resolvedBody,
|
|
71
|
+
state: {},
|
|
72
|
+
json: (data, status = 200) => send(data, 'application/json', status),
|
|
73
|
+
text: (data, status = 200) => send(data, 'text/plain', status),
|
|
74
|
+
html: (data, status = 200) => send(data, 'text/html', status),
|
|
75
|
+
status: (code) => { pendingStatus = code; return ctx; },
|
|
76
|
+
setHeader: (name, value) => { res.setHeader(name, value); return ctx; },
|
|
77
|
+
getHeader: (name) => req.headers?.[name.toLowerCase()],
|
|
78
|
+
};
|
|
79
|
+
return ctx;
|
|
80
|
+
}
|
|
81
|
+
export default createCtx;
|
|
82
|
+
//# sourceMappingURL=ctx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ctx.js","sourceRoot":"","sources":["../../src/utils/ctx.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,46 +1,156 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dolphin-server-modules",
|
|
3
|
-
"version": "2.11.
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "dolphin-server-modules",
|
|
3
|
+
"version": "2.11.2",
|
|
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
|
+
"./realtime/camera": {
|
|
84
|
+
"types": "./dist/realtime/camera.d.ts",
|
|
85
|
+
"default": "./dist/realtime/camera.js"
|
|
86
|
+
},
|
|
87
|
+
"./realtime/rtsp": {
|
|
88
|
+
"types": "./dist/realtime/rtsp.d.ts",
|
|
89
|
+
"default": "./dist/realtime/rtsp.js"
|
|
90
|
+
},
|
|
91
|
+
"./swagger": {
|
|
92
|
+
"types": "./dist/swagger/swagger.d.ts",
|
|
93
|
+
"default": "./dist/swagger/swagger.js"
|
|
94
|
+
},
|
|
95
|
+
"./djson": {
|
|
96
|
+
"types": "./dist/djson/djson.d.ts",
|
|
97
|
+
"default": "./dist/djson/djson.js"
|
|
98
|
+
},
|
|
99
|
+
"./signaling": {
|
|
100
|
+
"types": "./dist/signaling/index.d.ts",
|
|
101
|
+
"default": "./dist/signaling/index.js"
|
|
102
|
+
},
|
|
103
|
+
"./cli": "./dist/bin/cli.js",
|
|
104
|
+
"./client": "./scripts/client.js",
|
|
105
|
+
"./utils/ctx": {
|
|
106
|
+
"types": "./dist/utils/ctx.d.ts",
|
|
107
|
+
"default": "./dist/utils/ctx.js"
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"scripts": {
|
|
111
|
+
"build": "tsc",
|
|
112
|
+
"start": "node dist/demo-server.js",
|
|
113
|
+
"dolphin": "node dist/bin/cli.js",
|
|
114
|
+
"dev": "npm run build && npm run start",
|
|
115
|
+
"test": "jest",
|
|
116
|
+
"prepublishOnly": "npm run build"
|
|
117
|
+
},
|
|
118
|
+
"keywords": [
|
|
119
|
+
"dolphin",
|
|
120
|
+
"server",
|
|
121
|
+
"auth",
|
|
122
|
+
"crud",
|
|
123
|
+
"controller",
|
|
124
|
+
"realtime",
|
|
125
|
+
"iot",
|
|
126
|
+
"2fa",
|
|
127
|
+
"jwt"
|
|
128
|
+
],
|
|
129
|
+
"author": "Shankar Phuyal",
|
|
130
|
+
"license": "ISC",
|
|
131
|
+
"dependencies": {
|
|
132
|
+
"argon2": "^0.40.1",
|
|
133
|
+
"ioredis": "^5.10.1",
|
|
134
|
+
"jsonwebtoken": "^9.0.3",
|
|
135
|
+
"mongoose": "^9.3.2",
|
|
136
|
+
"ws": "^8.20.0",
|
|
137
|
+
"zod": "^4.3.6"
|
|
138
|
+
},
|
|
139
|
+
"devDependencies": {
|
|
140
|
+
"@types/jest": "^29.5.12",
|
|
141
|
+
"@types/jsonwebtoken": "^9.0.10",
|
|
142
|
+
"@types/node": "^20.11.30",
|
|
143
|
+
"@types/ws": "^8.18.1",
|
|
144
|
+
"jest": "^29.7.0",
|
|
145
|
+
"mongodb-memory-server": "^11.0.1",
|
|
146
|
+
"ts-jest": "^29.1.2",
|
|
147
|
+
"typescript": "^5.4.3"
|
|
148
|
+
},
|
|
149
|
+
"repository": {
|
|
150
|
+
"type": "git",
|
|
151
|
+
"url": "git+https://github.com/Phuyalshankar/dolphin-server-modules.git"
|
|
152
|
+
},
|
|
153
|
+
"bugs": {
|
|
154
|
+
"url": "https://github.com/Phuyalshankar/dolphin-server-modules/issues"
|
|
155
|
+
}
|
|
46
156
|
}
|