@privateaim/server-realtime-kit 0.8.28 → 0.8.30
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/CHANGELOG.md +32 -0
- package/dist/helpers/authenticated.d.ts.map +1 -1
- package/dist/index.mjs +24 -104
- package/dist/index.mjs.map +1 -1
- package/dist/middlewares/authup/create.d.ts +3 -3
- package/dist/middlewares/authup/create.d.ts.map +1 -1
- package/dist/middlewares/authup/types.d.ts +3 -1
- package/dist/middlewares/authup/types.d.ts.map +1 -1
- package/dist/middlewares/authup/utils.d.ts.map +1 -1
- package/dist/middlewares/force-logged-in.d.ts.map +1 -1
- package/dist/server/index.d.ts +0 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/types.d.ts +7 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +12 -11
- package/src/helpers/authenticated.ts +1 -3
- package/src/middlewares/authup/create.ts +17 -89
- package/src/middlewares/authup/types.ts +4 -1
- package/src/middlewares/authup/utils.ts +7 -22
- package/src/middlewares/force-logged-in.ts +2 -1
- package/src/server/index.ts +0 -1
- package/src/types.ts +7 -14
- package/dist/server/types.d.ts +0 -4
- package/dist/server/types.d.ts.map +0 -1
- package/src/server/types.ts +0 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.8.30](https://github.com/PrivateAIM/hub/compare/v0.8.29...v0.8.30) (2026-03-02)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* support client identity for messenger/realtime communication ([#1464](https://github.com/PrivateAIM/hub/issues/1464)) ([5987458](https://github.com/PrivateAIM/hub/commit/59874581dbbc1101b79dd728b5786d5350074866))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @privateaim/kit bumped from ^0.8.29 to ^0.8.30
|
|
16
|
+
* @privateaim/telemetry-kit bumped from ^0.8.29 to ^0.8.30
|
|
17
|
+
* @privateaim/server-kit bumped from ^0.8.29 to ^0.8.30
|
|
18
|
+
|
|
19
|
+
## [0.8.29](https://github.com/PrivateAIM/hub/compare/v0.8.28...v0.8.29) (2026-03-02)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
|
|
24
|
+
* replace robot- with client-authentication/authorization ([#1445](https://github.com/PrivateAIM/hub/issues/1445)) ([f55dc66](https://github.com/PrivateAIM/hub/commit/f55dc668df66f6efa7a0bb2285c91b1d5f2ae9ef))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Dependencies
|
|
28
|
+
|
|
29
|
+
* The following workspace dependencies were updated
|
|
30
|
+
* dependencies
|
|
31
|
+
* @privateaim/kit bumped from ^0.8.28 to ^0.8.29
|
|
32
|
+
* @privateaim/telemetry-kit bumped from ^0.8.28 to ^0.8.29
|
|
33
|
+
* @privateaim/server-kit bumped from ^0.8.28 to ^0.8.29
|
|
34
|
+
|
|
3
35
|
## [0.8.28](https://github.com/PrivateAIM/hub/compare/v0.8.27...v0.8.28) (2026-02-26)
|
|
4
36
|
|
|
5
37
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticated.d.ts","sourceRoot":"","sources":["../../src/helpers/authenticated.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"authenticated.d.ts","sourceRoot":"","sources":["../../src/helpers/authenticated.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAI,OAAO,CAE9D"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { UnauthorizedError } from '@ebec/http';
|
|
2
|
-
import {
|
|
2
|
+
import { useLogger, isRedisClientUsable, useRedisPublishClient, useRedisSubscribeClient } from '@privateaim/server-kit';
|
|
3
3
|
import { LogChannel, LogFlag } from '@privateaim/telemetry-kit';
|
|
4
|
-
import { RedisTokenVerifierCache, MemoryTokenVerifierCache, TokenVerifier } from '@authup/server-adapter-kit';
|
|
5
4
|
import { createMiddleware } from '@authup/server-adapter-socket-io';
|
|
6
5
|
import { REALM_MASTER_NAME, PermissionName } from '@authup/core-kit';
|
|
7
6
|
import { PermissionChecker, PermissionMemoryRepository } from '@authup/access';
|
|
8
|
-
import { OAuth2SubKind } from '@authup/specs';
|
|
9
7
|
import { PermissionName as PermissionName$1 } from '@privateaim/kit';
|
|
10
8
|
import { createAdapter } from '@socket.io/redis-adapter';
|
|
11
9
|
import { Server } from 'socket.io';
|
|
@@ -16,7 +14,7 @@ import { Server } from 'socket.io';
|
|
|
16
14
|
* For the full copyright and license information,
|
|
17
15
|
* view the LICENSE file that was distributed with this source code.
|
|
18
16
|
*/ function isSocketAuthenticated(socket) {
|
|
19
|
-
return !!socket.data.
|
|
17
|
+
return !!socket.data.identity;
|
|
20
18
|
}
|
|
21
19
|
|
|
22
20
|
/*
|
|
@@ -64,7 +62,7 @@ function createFakeTokenVerificationData() {
|
|
|
64
62
|
realm_name: REALM_MASTER_NAME,
|
|
65
63
|
sub_kind: 'user',
|
|
66
64
|
sub: 'd94b2f28-29e3-4ced-b8f1-6923a01dc1ee',
|
|
67
|
-
sub_name: '
|
|
65
|
+
sub_name: 'system',
|
|
68
66
|
permissions: generateAbilities()
|
|
69
67
|
};
|
|
70
68
|
}
|
|
@@ -75,105 +73,39 @@ function applyTokenVerificationData(socket, data, fakeAbilities) {
|
|
|
75
73
|
} else {
|
|
76
74
|
abilities = data.permissions;
|
|
77
75
|
}
|
|
78
|
-
socket.data.
|
|
79
|
-
|
|
76
|
+
socket.data.identity = {
|
|
77
|
+
type: data.sub_kind,
|
|
78
|
+
id: data.sub,
|
|
79
|
+
realmId: data.realm_id,
|
|
80
|
+
realmName: data.realm_name
|
|
81
|
+
};
|
|
80
82
|
socket.data.permissionChecker = new PermissionChecker({
|
|
81
83
|
repository: new PermissionMemoryRepository(abilities)
|
|
82
84
|
});
|
|
83
|
-
switch(data.sub_kind){
|
|
84
|
-
case OAuth2SubKind.USER:
|
|
85
|
-
{
|
|
86
|
-
socket.data.userId = data.sub;
|
|
87
|
-
socket.data.userName = data.sub_name;
|
|
88
|
-
break;
|
|
89
|
-
}
|
|
90
|
-
case OAuth2SubKind.ROBOT:
|
|
91
|
-
{
|
|
92
|
-
socket.data.robotId = data.sub;
|
|
93
|
-
socket.data.robotName = data.sub_name;
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
case OAuth2SubKind.CLIENT:
|
|
97
|
-
{
|
|
98
|
-
socket.data.clientId = data.sub;
|
|
99
|
-
socket.data.clientName = data.sub_name;
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
85
|
}
|
|
104
86
|
|
|
105
|
-
function
|
|
106
|
-
|
|
107
|
-
if (options.baseURL) {
|
|
108
|
-
baseURL = options.baseURL;
|
|
109
|
-
}
|
|
110
|
-
let redis;
|
|
111
|
-
if (isRedisClientUsable()) {
|
|
112
|
-
redis = useRedisClient();
|
|
113
|
-
}
|
|
114
|
-
let vault;
|
|
115
|
-
if (isVaultClientUsable()) {
|
|
116
|
-
vault = useVaultClient();
|
|
117
|
-
}
|
|
118
|
-
if (!baseURL) {
|
|
87
|
+
function createAuthorizationMiddleware(options) {
|
|
88
|
+
if (!options.baseURL) {
|
|
119
89
|
const data = createFakeTokenVerificationData();
|
|
120
90
|
return (socket, next)=>{
|
|
121
91
|
applyTokenVerificationData(socket, data, options.fakeAbilities);
|
|
122
92
|
next();
|
|
123
93
|
};
|
|
124
94
|
}
|
|
125
|
-
let tokenCreator;
|
|
126
|
-
if (vault) {
|
|
127
|
-
tokenCreator = {
|
|
128
|
-
type: 'robotInVault',
|
|
129
|
-
name: 'system',
|
|
130
|
-
vault,
|
|
131
|
-
baseURL
|
|
132
|
-
};
|
|
133
|
-
} else {
|
|
134
|
-
tokenCreator = {
|
|
135
|
-
type: 'user',
|
|
136
|
-
name: 'admin',
|
|
137
|
-
password: 'start123',
|
|
138
|
-
baseURL
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
let cache;
|
|
142
|
-
if (redis) {
|
|
143
|
-
cache = new RedisTokenVerifierCache(redis);
|
|
144
|
-
} else {
|
|
145
|
-
cache = new MemoryTokenVerifierCache();
|
|
146
|
-
}
|
|
147
95
|
return createMiddleware({
|
|
148
|
-
tokenVerifier:
|
|
149
|
-
baseURL,
|
|
150
|
-
creator: tokenCreator,
|
|
151
|
-
cache
|
|
152
|
-
}),
|
|
96
|
+
tokenVerifier: options.tokenVerifier,
|
|
153
97
|
tokenVerifierHandler: (socket, data)=>applyTokenVerificationData(socket, data, options.fakeAbilities)
|
|
154
98
|
});
|
|
155
99
|
}
|
|
156
|
-
function
|
|
157
|
-
const middleware =
|
|
100
|
+
function mountAuthorizationMiddleware(nsp, options) {
|
|
101
|
+
const middleware = createAuthorizationMiddleware(options);
|
|
158
102
|
nsp.use(middleware);
|
|
159
103
|
nsp.use((socket, next)=>{
|
|
160
|
-
if (socket.data.
|
|
161
|
-
useLogger().info(`Socket/${socket.id}:
|
|
104
|
+
if (socket.data.identity) {
|
|
105
|
+
useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} connected.`, {
|
|
162
106
|
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
163
|
-
actor_type:
|
|
164
|
-
actor_id: socket.data.
|
|
165
|
-
});
|
|
166
|
-
} else if (socket.data.robotId) {
|
|
167
|
-
useLogger().info(`Socket/${socket.id}: Robot connected.`, {
|
|
168
|
-
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
169
|
-
actor_type: 'robot',
|
|
170
|
-
actor_id: socket.data.robotId
|
|
171
|
-
});
|
|
172
|
-
} else if (socket.data.clientId) {
|
|
173
|
-
useLogger().info(`Socket/${socket.id}: Client connected.`, {
|
|
174
|
-
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
175
|
-
actor_type: 'client',
|
|
176
|
-
actor_id: socket.data.clientId
|
|
107
|
+
actor_type: socket.data.identity.type,
|
|
108
|
+
actor_id: socket.data.identity.id
|
|
177
109
|
});
|
|
178
110
|
} else {
|
|
179
111
|
useLogger().warn(`Socket/${socket.id}: Not authenticated.`, {
|
|
@@ -183,23 +115,11 @@ function mountAuthupMiddleware(nsp, options) {
|
|
|
183
115
|
return;
|
|
184
116
|
}
|
|
185
117
|
socket.on('disconnect', ()=>{
|
|
186
|
-
if (socket.data.
|
|
187
|
-
useLogger().info(`Socket/${socket.id}:
|
|
188
|
-
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
189
|
-
actor_type: 'user',
|
|
190
|
-
actor_id: socket.data.userId
|
|
191
|
-
});
|
|
192
|
-
} else if (socket.data.robotId) {
|
|
193
|
-
useLogger().info(`Socket/${socket.id}: Robot disconnected`, {
|
|
194
|
-
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
195
|
-
actor_type: 'robot',
|
|
196
|
-
actor_id: socket.data.userId
|
|
197
|
-
});
|
|
198
|
-
} else if (socket.data.clientId) {
|
|
199
|
-
useLogger().info(`Socket/${socket.id}: Client disconnected`, {
|
|
118
|
+
if (socket.data.identity) {
|
|
119
|
+
useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} disconnected`, {
|
|
200
120
|
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
201
|
-
actor_type:
|
|
202
|
-
actor_id: socket.data.
|
|
121
|
+
actor_type: socket.data.identity.type,
|
|
122
|
+
actor_id: socket.data.identity.id
|
|
203
123
|
});
|
|
204
124
|
}
|
|
205
125
|
});
|
|
@@ -209,7 +129,7 @@ function mountAuthupMiddleware(nsp, options) {
|
|
|
209
129
|
|
|
210
130
|
function mountForceLoggedInMiddleware(input) {
|
|
211
131
|
input.use((socket, next)=>{
|
|
212
|
-
if (socket
|
|
132
|
+
if (!isSocketAuthenticated(socket)) {
|
|
213
133
|
next();
|
|
214
134
|
return;
|
|
215
135
|
}
|
|
@@ -266,5 +186,5 @@ function createServer(httpServer) {
|
|
|
266
186
|
return server;
|
|
267
187
|
}
|
|
268
188
|
|
|
269
|
-
export {
|
|
189
|
+
export { createAuthorizationMiddleware, createServer, isSocketAuthenticated, mountAuthorizationMiddleware, mountForceLoggedInMiddleware, mountLoggingMiddleware, subscribeSocketRoom, unsubscribeSocketRoom };
|
|
270
190
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/helpers/authenticated.ts","../src/helpers/room-subscriptions.ts","../src/middlewares/authup/utils.ts","../src/middlewares/authup/create.ts","../src/middlewares/force-logged-in.ts","../src/middlewares/logging.ts","../src/server/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Socket } from '../types';\n\nexport function isSocketAuthenticated(socket: Socket) : boolean {\n return !!socket.data.userId ||\n !!socket.data.clientId ||\n !!socket.data.robotId;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Socket } from '../types';\n\nexport function subscribeSocketRoom(\n socket: Socket,\n roomName: string,\n) {\n if (!socket.data.roomSubscriptions) {\n socket.data.roomSubscriptions = {};\n }\n\n if (!socket.data.roomSubscriptions[roomName]) {\n socket.data.roomSubscriptions[roomName] = 0;\n }\n\n socket.data.roomSubscriptions[roomName]++;\n\n socket.join(roomName);\n}\n\nexport function unsubscribeSocketRoom(\n socket: Socket,\n roomName: string,\n) {\n if (!socket.data.roomSubscriptions) {\n return;\n }\n\n if (socket.data.roomSubscriptions[roomName]) {\n if (socket.data.roomSubscriptions[roomName] > 1) {\n socket.data.roomSubscriptions[roomName]--;\n } else {\n delete socket.data.roomSubscriptions[roomName];\n }\n }\n\n if (!socket.data.roomSubscriptions[roomName]) {\n socket.leave(roomName);\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PermissionName as AuthupPermissionName, REALM_MASTER_NAME } from '@authup/core-kit';\nimport type { PermissionItem } from '@authup/access';\nimport { PermissionChecker, PermissionMemoryRepository } from '@authup/access';\nimport { OAuth2SubKind } from '@authup/specs';\nimport type { TokenVerificationData } from '@authup/server-adapter-kit';\nimport { PermissionName } from '@privateaim/kit';\nimport type { Socket } from '../../types';\n\ntype TokenVerificationDataMinimal = Pick<\nTokenVerificationData,\n'permissions' |\n'realm_id' |\n'realm_name' |\n'sub' |\n'sub_kind' |\n'sub_name'\n>;\n\nfunction generateAbilities(): PermissionItem[] {\n return Object.values({\n ...PermissionName,\n ...AuthupPermissionName,\n }).map((name) => ({\n name,\n } satisfies PermissionItem));\n}\n\nexport function createFakeTokenVerificationData(): TokenVerificationDataMinimal {\n return {\n realm_id: 'd94b2f28-29e3-4ced-b8f1-6923a01dc1ee',\n realm_name: REALM_MASTER_NAME,\n\n sub_kind: 'user',\n sub: 'd94b2f28-29e3-4ced-b8f1-6923a01dc1ee',\n sub_name: 'admin',\n\n permissions: generateAbilities(),\n };\n}\n\nexport function applyTokenVerificationData(\n socket: Socket,\n data: TokenVerificationDataMinimal,\n fakeAbilities?: boolean,\n) {\n let abilities: PermissionItem[];\n if (fakeAbilities) {\n abilities = generateAbilities();\n } else {\n abilities = data.permissions;\n }\n\n socket.data.realmId = data.realm_id;\n socket.data.realmName = data.realm_name;\n\n socket.data.permissionChecker = new PermissionChecker({\n repository: new PermissionMemoryRepository(abilities),\n });\n\n switch (data.sub_kind) {\n case OAuth2SubKind.USER: {\n socket.data.userId = data.sub;\n socket.data.userName = data.sub_name;\n break;\n }\n case OAuth2SubKind.ROBOT: {\n socket.data.robotId = data.sub;\n socket.data.robotName = data.sub_name;\n break;\n }\n case OAuth2SubKind.CLIENT: {\n socket.data.clientId = data.sub;\n socket.data.clientName = data.sub_name;\n break;\n }\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { UnauthorizedError } from '@ebec/http';\nimport type { VaultClient } from '@hapic/vault';\nimport {\n isRedisClientUsable, isVaultClientUsable, useLogger, useRedisClient, useVaultClient,\n} from '@privateaim/server-kit';\nimport { LogChannel, LogFlag } from '@privateaim/telemetry-kit';\nimport type { Client as RedisClient } from 'redis-extension';\nimport type { TokenCreatorOptions } from '@authup/core-http-kit';\nimport type { ITokenVerifierCache } from '@authup/server-adapter-kit';\nimport { MemoryTokenVerifierCache, RedisTokenVerifierCache, TokenVerifier } from '@authup/server-adapter-kit';\nimport { createMiddleware } from '@authup/server-adapter-socket-io';\nimport type {\n Middleware, Namespace, Server, Socket,\n} from '../../types';\nimport type { AuthupMiddlewareRegistrationOptions } from './types';\nimport { applyTokenVerificationData, createFakeTokenVerificationData } from './utils';\n\nexport function createAuthupMiddleware(\n options: AuthupMiddlewareRegistrationOptions,\n) : Middleware {\n let baseURL : string | undefined;\n if (options.baseURL) {\n baseURL = options.baseURL;\n }\n\n let redis : RedisClient | undefined;\n if (isRedisClientUsable()) {\n redis = useRedisClient();\n }\n\n let vault : VaultClient | undefined;\n if (isVaultClientUsable()) {\n vault = useVaultClient();\n }\n\n if (!baseURL) {\n const data = createFakeTokenVerificationData();\n\n return (socket, next) => {\n applyTokenVerificationData(socket, data, options.fakeAbilities);\n next();\n };\n }\n\n let tokenCreator : TokenCreatorOptions;\n if (vault) {\n tokenCreator = {\n type: 'robotInVault',\n name: 'system',\n vault,\n baseURL,\n };\n } else {\n tokenCreator = {\n type: 'user',\n name: 'admin',\n password: 'start123',\n baseURL,\n };\n }\n\n let cache : ITokenVerifierCache;\n if (redis) {\n cache = new RedisTokenVerifierCache(redis);\n } else {\n cache = new MemoryTokenVerifierCache();\n }\n\n return createMiddleware({\n tokenVerifier: new TokenVerifier({\n baseURL,\n creator: tokenCreator,\n cache,\n }),\n tokenVerifierHandler: (\n socket: Socket,\n data,\n ) => applyTokenVerificationData(socket, data, options.fakeAbilities),\n });\n}\n\nexport function mountAuthupMiddleware(\n nsp: Namespace | Server,\n options: AuthupMiddlewareRegistrationOptions,\n) {\n const middleware = createAuthupMiddleware(options);\n nsp.use(middleware);\n\n nsp.use((socket, next) => {\n if (socket.data.userId) {\n useLogger().info(`Socket/${socket.id}: User connected.`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n actor_type: 'user',\n actor_id: socket.data.userId,\n });\n } else if (socket.data.robotId) {\n useLogger().info(`Socket/${socket.id}: Robot connected.`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n actor_type: 'robot',\n actor_id: socket.data.robotId,\n });\n } else if (socket.data.clientId) {\n useLogger().info(`Socket/${socket.id}: Client connected.`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n actor_type: 'client',\n actor_id: socket.data.clientId,\n });\n } else {\n useLogger().warn(`Socket/${socket.id}: Not authenticated.`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n\n next(new UnauthorizedError());\n return;\n }\n\n socket.on('disconnect', () => {\n if (socket.data.userId) {\n useLogger().info(`Socket/${socket.id}: User disconnected`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n actor_type: 'user',\n actor_id: socket.data.userId,\n });\n } else if (socket.data.robotId) {\n useLogger().info(`Socket/${socket.id}: Robot disconnected`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n actor_type: 'robot',\n actor_id: socket.data.userId,\n });\n } else if (socket.data.clientId) {\n useLogger().info(`Socket/${socket.id}: Client disconnected`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n actor_type: 'client',\n actor_id: socket.data.clientId,\n });\n }\n });\n\n next();\n });\n}\n","/*\n * Copyright (c) 2021-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { UnauthorizedError } from '@ebec/http';\nimport type { Namespace, Server } from '../types';\n\nexport function mountForceLoggedInMiddleware(input: Namespace | Server) {\n input.use((socket, next) => {\n if (socket.data.userId || socket.data.robotId) {\n next();\n return;\n }\n\n next(new UnauthorizedError());\n });\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { useLogger } from '@privateaim/server-kit';\nimport { LogChannel, LogFlag } from '@privateaim/telemetry-kit';\nimport type { Namespace, Server } from '../types';\n\nexport function mountLoggingMiddleware(\n nsp: Namespace | Server,\n) {\n nsp.on('error', (err) => {\n useLogger().error(err, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n });\n\n nsp.use((socket, next) => {\n useLogger().debug(`Socket/${socket.id}: Connected.`, {\n namespace: socket.nsp.name,\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n\n socket.on('disconnect', () => {\n useLogger().debug(`Socket/${socket.id}: Disconnected.`, {\n namespace: socket.nsp.name,\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n });\n\n next();\n });\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n isRedisClientUsable, useLogger, useRedisPublishClient, useRedisSubscribeClient,\n} from '@privateaim/server-kit';\nimport { LogChannel, LogFlag } from '@privateaim/telemetry-kit';\nimport { createAdapter } from '@socket.io/redis-adapter';\nimport type { Server as HTTPServer } from 'node:http';\nimport type { DefaultEventsMap, ServerOptions } from 'socket.io';\nimport { Server } from 'socket.io';\n\nexport function createServer<\n ListenEvents extends Record<string, any> = DefaultEventsMap,\n EmitEvents extends Record<string, any> = ListenEvents,\n ServerSideEvents extends Record<string, any> = DefaultEventsMap,\n SocketData = any,\n>(\n httpServer: HTTPServer,\n): Server<ListenEvents, EmitEvents, ServerSideEvents, SocketData> {\n let adapter : ServerOptions['adapter'] | undefined;\n if (isRedisClientUsable()) {\n adapter = createAdapter(\n useRedisPublishClient(),\n useRedisSubscribeClient(),\n );\n }\n\n const server = new Server<\n ListenEvents,\n EmitEvents,\n ServerSideEvents,\n SocketData\n >(httpServer, {\n adapter,\n cors: {\n origin(origin, callback) {\n callback(null, true);\n },\n credentials: true,\n },\n transports: ['websocket', 'polling'],\n });\n\n server.engine.on('connection_error', (err) => {\n useLogger().error({\n message: err.message,\n code: err.code,\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n });\n\n return server;\n}\n"],"names":["isSocketAuthenticated","socket","data","userId","clientId","robotId","subscribeSocketRoom","roomName","roomSubscriptions","join","unsubscribeSocketRoom","leave","generateAbilities","Object","values","PermissionName","AuthupPermissionName","map","name","createFakeTokenVerificationData","realm_id","realm_name","REALM_MASTER_NAME","sub_kind","sub","sub_name","permissions","applyTokenVerificationData","fakeAbilities","abilities","realmId","realmName","permissionChecker","PermissionChecker","repository","PermissionMemoryRepository","OAuth2SubKind","USER","userName","ROBOT","robotName","CLIENT","clientName","createAuthupMiddleware","options","baseURL","redis","isRedisClientUsable","useRedisClient","vault","isVaultClientUsable","useVaultClient","next","tokenCreator","type","password","cache","RedisTokenVerifierCache","MemoryTokenVerifierCache","createMiddleware","tokenVerifier","TokenVerifier","creator","tokenVerifierHandler","mountAuthupMiddleware","nsp","middleware","use","useLogger","info","id","LogFlag","CHANNEL","LogChannel","WEBSOCKET","actor_type","actor_id","warn","UnauthorizedError","on","mountForceLoggedInMiddleware","input","mountLoggingMiddleware","err","error","debug","namespace","createServer","httpServer","adapter","createAdapter","useRedisPublishClient","useRedisSubscribeClient","server","Server","cors","origin","callback","credentials","transports","engine","message","code"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/helpers/authenticated.ts","../src/helpers/room-subscriptions.ts","../src/middlewares/authup/utils.ts","../src/middlewares/authup/create.ts","../src/middlewares/force-logged-in.ts","../src/middlewares/logging.ts","../src/server/module.ts"],"sourcesContent":["/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Socket } from '../types';\n\nexport function isSocketAuthenticated(socket: Socket) : boolean {\n return !!socket.data.identity;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Socket } from '../types';\n\nexport function subscribeSocketRoom(\n socket: Socket,\n roomName: string,\n) {\n if (!socket.data.roomSubscriptions) {\n socket.data.roomSubscriptions = {};\n }\n\n if (!socket.data.roomSubscriptions[roomName]) {\n socket.data.roomSubscriptions[roomName] = 0;\n }\n\n socket.data.roomSubscriptions[roomName]++;\n\n socket.join(roomName);\n}\n\nexport function unsubscribeSocketRoom(\n socket: Socket,\n roomName: string,\n) {\n if (!socket.data.roomSubscriptions) {\n return;\n }\n\n if (socket.data.roomSubscriptions[roomName]) {\n if (socket.data.roomSubscriptions[roomName] > 1) {\n socket.data.roomSubscriptions[roomName]--;\n } else {\n delete socket.data.roomSubscriptions[roomName];\n }\n }\n\n if (!socket.data.roomSubscriptions[roomName]) {\n socket.leave(roomName);\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { PermissionName as AuthupPermissionName, REALM_MASTER_NAME } from '@authup/core-kit';\nimport type { PermissionItem } from '@authup/access';\nimport { PermissionChecker, PermissionMemoryRepository } from '@authup/access';\nimport type { TokenVerificationData } from '@authup/server-adapter-kit';\nimport { PermissionName } from '@privateaim/kit';\nimport type { Socket } from '../../types';\n\ntype TokenVerificationDataMinimal = Pick<\nTokenVerificationData,\n'permissions' |\n'realm_id' |\n'realm_name' |\n'sub' |\n'sub_kind' |\n'sub_name'\n>;\n\nfunction generateAbilities(): PermissionItem[] {\n return Object.values({\n ...PermissionName,\n ...AuthupPermissionName,\n }).map((name) => ({\n name,\n } satisfies PermissionItem));\n}\n\nexport function createFakeTokenVerificationData(): TokenVerificationDataMinimal {\n return {\n realm_id: 'd94b2f28-29e3-4ced-b8f1-6923a01dc1ee',\n realm_name: REALM_MASTER_NAME,\n\n sub_kind: 'user',\n sub: 'd94b2f28-29e3-4ced-b8f1-6923a01dc1ee',\n sub_name: 'system',\n\n permissions: generateAbilities(),\n };\n}\n\nexport function applyTokenVerificationData(\n socket: Socket,\n data: TokenVerificationDataMinimal,\n fakeAbilities?: boolean,\n) {\n let abilities: PermissionItem[];\n if (fakeAbilities) {\n abilities = generateAbilities();\n } else {\n abilities = data.permissions;\n }\n\n socket.data.identity = {\n type: data.sub_kind,\n id: data.sub,\n realmId: data.realm_id,\n realmName: data.realm_name,\n };\n\n socket.data.permissionChecker = new PermissionChecker({\n repository: new PermissionMemoryRepository(abilities),\n });\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { UnauthorizedError } from '@ebec/http';\nimport {\n useLogger,\n} from '@privateaim/server-kit';\nimport { LogChannel, LogFlag } from '@privateaim/telemetry-kit';\nimport { createMiddleware } from '@authup/server-adapter-socket-io';\nimport type {\n Middleware, Namespace, Server, Socket,\n} from '../../types';\nimport type { AuthorizationMiddlewareRegistrationOptions } from './types';\nimport { applyTokenVerificationData, createFakeTokenVerificationData } from './utils';\n\nexport function createAuthorizationMiddleware(\n options: AuthorizationMiddlewareRegistrationOptions,\n) : Middleware {\n if (!options.baseURL) {\n const data = createFakeTokenVerificationData();\n\n return (socket, next) => {\n applyTokenVerificationData(socket, data, options.fakeAbilities);\n next();\n };\n }\n\n return createMiddleware({\n tokenVerifier: options.tokenVerifier,\n tokenVerifierHandler: (\n socket: Socket,\n data,\n ) => applyTokenVerificationData(socket, data, options.fakeAbilities),\n });\n}\n\nexport function mountAuthorizationMiddleware(\n nsp: Namespace | Server,\n options: AuthorizationMiddlewareRegistrationOptions,\n) {\n const middleware = createAuthorizationMiddleware(options);\n nsp.use(middleware);\n\n nsp.use((socket, next) => {\n if (socket.data.identity) {\n useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} connected.`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n actor_type: socket.data.identity.type,\n actor_id: socket.data.identity.id,\n });\n } else {\n useLogger().warn(`Socket/${socket.id}: Not authenticated.`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n\n next(new UnauthorizedError());\n return;\n }\n\n socket.on('disconnect', () => {\n if (socket.data.identity) {\n useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} disconnected`, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n actor_type: socket.data.identity.type,\n actor_id: socket.data.identity.id,\n });\n }\n });\n\n next();\n });\n}\n","/*\n * Copyright (c) 2021-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { UnauthorizedError } from '@ebec/http';\nimport { isSocketAuthenticated } from '../helpers/index.ts';\nimport type { Namespace, Server } from '../types';\n\nexport function mountForceLoggedInMiddleware(input: Namespace | Server) {\n input.use((socket, next) => {\n if (!isSocketAuthenticated(socket)) {\n next();\n return;\n }\n\n next(new UnauthorizedError());\n });\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { useLogger } from '@privateaim/server-kit';\nimport { LogChannel, LogFlag } from '@privateaim/telemetry-kit';\nimport type { Namespace, Server } from '../types';\n\nexport function mountLoggingMiddleware(\n nsp: Namespace | Server,\n) {\n nsp.on('error', (err) => {\n useLogger().error(err, {\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n });\n\n nsp.use((socket, next) => {\n useLogger().debug(`Socket/${socket.id}: Connected.`, {\n namespace: socket.nsp.name,\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n\n socket.on('disconnect', () => {\n useLogger().debug(`Socket/${socket.id}: Disconnected.`, {\n namespace: socket.nsp.name,\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n });\n\n next();\n });\n}\n","/*\n * Copyright (c) 2025.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n isRedisClientUsable, useLogger, useRedisPublishClient, useRedisSubscribeClient,\n} from '@privateaim/server-kit';\nimport { LogChannel, LogFlag } from '@privateaim/telemetry-kit';\nimport { createAdapter } from '@socket.io/redis-adapter';\nimport type { Server as HTTPServer } from 'node:http';\nimport type { DefaultEventsMap, ServerOptions } from 'socket.io';\nimport { Server } from 'socket.io';\n\nexport function createServer<\n ListenEvents extends Record<string, any> = DefaultEventsMap,\n EmitEvents extends Record<string, any> = ListenEvents,\n ServerSideEvents extends Record<string, any> = DefaultEventsMap,\n SocketData = any,\n>(\n httpServer: HTTPServer,\n): Server<ListenEvents, EmitEvents, ServerSideEvents, SocketData> {\n let adapter : ServerOptions['adapter'] | undefined;\n if (isRedisClientUsable()) {\n adapter = createAdapter(\n useRedisPublishClient(),\n useRedisSubscribeClient(),\n );\n }\n\n const server = new Server<\n ListenEvents,\n EmitEvents,\n ServerSideEvents,\n SocketData\n >(httpServer, {\n adapter,\n cors: {\n origin(origin, callback) {\n callback(null, true);\n },\n credentials: true,\n },\n transports: ['websocket', 'polling'],\n });\n\n server.engine.on('connection_error', (err) => {\n useLogger().error({\n message: err.message,\n code: err.code,\n [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,\n });\n });\n\n return server;\n}\n"],"names":["isSocketAuthenticated","socket","data","identity","subscribeSocketRoom","roomName","roomSubscriptions","join","unsubscribeSocketRoom","leave","generateAbilities","Object","values","PermissionName","AuthupPermissionName","map","name","createFakeTokenVerificationData","realm_id","realm_name","REALM_MASTER_NAME","sub_kind","sub","sub_name","permissions","applyTokenVerificationData","fakeAbilities","abilities","type","id","realmId","realmName","permissionChecker","PermissionChecker","repository","PermissionMemoryRepository","createAuthorizationMiddleware","options","baseURL","next","createMiddleware","tokenVerifier","tokenVerifierHandler","mountAuthorizationMiddleware","nsp","middleware","use","useLogger","info","LogFlag","CHANNEL","LogChannel","WEBSOCKET","actor_type","actor_id","warn","UnauthorizedError","on","mountForceLoggedInMiddleware","input","mountLoggingMiddleware","err","error","debug","namespace","createServer","httpServer","adapter","isRedisClientUsable","createAdapter","useRedisPublishClient","useRedisSubscribeClient","server","Server","cors","origin","callback","credentials","transports","engine","message","code"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Middleware, Namespace, Server } from '../../types';
|
|
2
|
-
import type {
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
2
|
+
import type { AuthorizationMiddlewareRegistrationOptions } from './types';
|
|
3
|
+
export declare function createAuthorizationMiddleware(options: AuthorizationMiddlewareRegistrationOptions): Middleware;
|
|
4
|
+
export declare function mountAuthorizationMiddleware(nsp: Namespace | Server, options: AuthorizationMiddlewareRegistrationOptions): void;
|
|
5
5
|
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/middlewares/authup/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/middlewares/authup/create.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACR,UAAU,EAAE,SAAS,EAAE,MAAM,EAChC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,SAAS,CAAC;AAG1E,wBAAgB,6BAA6B,CACzC,OAAO,EAAE,0CAA0C,GACnD,UAAU,CAiBb;AAED,wBAAgB,4BAA4B,CACxC,GAAG,EAAE,SAAS,GAAG,MAAM,EACvB,OAAO,EAAE,0CAA0C,QAiCtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/middlewares/authup/types.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/middlewares/authup/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,MAAM,0CAA0C,GAAG;IACrD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/middlewares/authup/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/middlewares/authup/utils.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,KAAK,4BAA4B,GAAG,IAAI,CACxC,qBAAqB,EACrB,aAAa,GACb,UAAU,GACV,YAAY,GACZ,KAAK,GACL,UAAU,GACV,UAAU,CACT,CAAC;AAWF,wBAAgB,+BAA+B,IAAI,4BAA4B,CAW9E;AAED,wBAAgB,0BAA0B,CACtC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,4BAA4B,EAClC,aAAa,CAAC,EAAE,OAAO,QAmB1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"force-logged-in.d.ts","sourceRoot":"","sources":["../../src/middlewares/force-logged-in.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"force-logged-in.d.ts","sourceRoot":"","sources":["../../src/middlewares/force-logged-in.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,QASrE"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,cAAc,UAAU,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,cAAc,UAAU,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import type { Client, Realm, Robot, User } from '@authup/core-kit';
|
|
2
1
|
import type { PermissionChecker } from '@authup/access';
|
|
3
2
|
import type { Namespace as _Namespace, Server as _Server, Socket as _Socket } from 'socket.io';
|
|
3
|
+
export type SocketIdentity = {
|
|
4
|
+
id: string;
|
|
5
|
+
type: 'user' | 'client' | 'robot';
|
|
6
|
+
realmId: string;
|
|
7
|
+
realmName: string;
|
|
8
|
+
};
|
|
4
9
|
export type SocketData = {
|
|
5
10
|
permissionChecker?: PermissionChecker;
|
|
6
|
-
|
|
7
|
-
realmName?: Realm['name'];
|
|
8
|
-
userId?: User['id'];
|
|
9
|
-
userName?: User['name'];
|
|
10
|
-
robotId?: Robot['id'];
|
|
11
|
-
robotName?: Robot['name'];
|
|
12
|
-
clientId?: Client['id'];
|
|
13
|
-
clientName?: Client['name'];
|
|
11
|
+
identity?: SocketIdentity;
|
|
14
12
|
namespaceId?: string;
|
|
15
13
|
roomSubscriptions: Record<string, number>;
|
|
16
14
|
};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EACR,SAAS,IAAI,UAAU,EACvB,MAAM,IAAI,OAAO,EACjB,MAAM,IAAI,OAAO,EACpB,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,cAAc,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAA;CACpB,CAAC;AACF,MAAM,MAAM,UAAU,GAAG;IACrB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,WAAW,SAAS;IACtB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC7B,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;CACxC;AAED,MAAM,MAAM,MAAM,CACd,YAAY,SAAS,SAAS,GAAG,gBAAgB,EACjD,UAAU,SAAS,SAAS,GAAG,YAAY,EAC3C,gBAAgB,SAAS,SAAS,GAAG,gBAAgB,EACrD,IAAI,SAAS,UAAU,GAAG,UAAU,IACpC,OAAO,CAAC,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAE9D,MAAM,MAAM,MAAM,CACd,YAAY,SAAS,SAAS,GAAG,gBAAgB,EACjD,UAAU,SAAS,SAAS,GAAG,YAAY,EAC3C,gBAAgB,SAAS,SAAS,GAAG,gBAAgB,EACrD,IAAI,SAAS,UAAU,GAAG,UAAU,IACpC,OAAO,CAAC,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAE9D,MAAM,MAAM,SAAS,CACjB,YAAY,SAAS,SAAS,GAAG,gBAAgB,EACjD,UAAU,SAAS,SAAS,GAAG,YAAY,EAC3C,gBAAgB,SAAS,SAAS,GAAG,gBAAgB,EACrD,IAAI,SAAS,UAAU,GAAG,UAAU,IACpC,UAAU,CAAC,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAEjE,MAAM,MAAM,UAAU,CAClB,YAAY,SAAS,SAAS,GAAG,gBAAgB,EACjD,UAAU,SAAS,SAAS,GAAG,YAAY,EAC3C,gBAAgB,SAAS,SAAS,GAAG,gBAAgB,EACrD,IAAI,SAAS,UAAU,GAAG,UAAU,IACpC,CACA,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAChE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,KAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@privateaim/server-realtime-kit",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.30",
|
|
5
5
|
"module": "dist/index.mjs",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -19,17 +19,18 @@
|
|
|
19
19
|
"license": "Apache-2.0",
|
|
20
20
|
"description": "This package contains the realtime application which connects the API with socket based clients.",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@authup/access": "^1.0.0-beta.
|
|
23
|
-
"@authup/specs": "^1.0.0-beta.
|
|
24
|
-
"@authup/kit": "^1.0.0-beta.
|
|
25
|
-
"@authup/core-kit": "^1.0.0-beta.
|
|
26
|
-
"@authup/core-
|
|
27
|
-
"@authup/
|
|
28
|
-
"@authup/server-adapter-
|
|
22
|
+
"@authup/access": "^1.0.0-beta.30",
|
|
23
|
+
"@authup/specs": "^1.0.0-beta.30",
|
|
24
|
+
"@authup/kit": "^1.0.0-beta.30",
|
|
25
|
+
"@authup/core-kit": "^1.0.0-beta.30",
|
|
26
|
+
"@authup/core-http-kit": "^1.0.0-beta.30",
|
|
27
|
+
"@authup/core-realtime-kit": "^1.0.0-beta.30",
|
|
28
|
+
"@authup/server-adapter-kit": "^1.0.0-beta.30",
|
|
29
|
+
"@authup/server-adapter-socket-io": "^1.0.0-beta.30",
|
|
29
30
|
"@socket.io/redis-adapter": "^8.3.0",
|
|
30
|
-
"@privateaim/kit": "^0.8.
|
|
31
|
-
"@privateaim/telemetry-kit": "^0.8.
|
|
32
|
-
"@privateaim/server-kit": "^0.8.
|
|
31
|
+
"@privateaim/kit": "^0.8.30",
|
|
32
|
+
"@privateaim/telemetry-kit": "^0.8.30",
|
|
33
|
+
"@privateaim/server-kit": "^0.8.30",
|
|
33
34
|
"@ebec/http": "^2.3.0"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
@@ -6,41 +6,21 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { UnauthorizedError } from '@ebec/http';
|
|
9
|
-
import type { VaultClient } from '@hapic/vault';
|
|
10
9
|
import {
|
|
11
|
-
|
|
10
|
+
useLogger,
|
|
12
11
|
} from '@privateaim/server-kit';
|
|
13
12
|
import { LogChannel, LogFlag } from '@privateaim/telemetry-kit';
|
|
14
|
-
import type { Client as RedisClient } from 'redis-extension';
|
|
15
|
-
import type { TokenCreatorOptions } from '@authup/core-http-kit';
|
|
16
|
-
import type { ITokenVerifierCache } from '@authup/server-adapter-kit';
|
|
17
|
-
import { MemoryTokenVerifierCache, RedisTokenVerifierCache, TokenVerifier } from '@authup/server-adapter-kit';
|
|
18
13
|
import { createMiddleware } from '@authup/server-adapter-socket-io';
|
|
19
14
|
import type {
|
|
20
15
|
Middleware, Namespace, Server, Socket,
|
|
21
16
|
} from '../../types';
|
|
22
|
-
import type {
|
|
17
|
+
import type { AuthorizationMiddlewareRegistrationOptions } from './types';
|
|
23
18
|
import { applyTokenVerificationData, createFakeTokenVerificationData } from './utils';
|
|
24
19
|
|
|
25
|
-
export function
|
|
26
|
-
options:
|
|
20
|
+
export function createAuthorizationMiddleware(
|
|
21
|
+
options: AuthorizationMiddlewareRegistrationOptions,
|
|
27
22
|
) : Middleware {
|
|
28
|
-
|
|
29
|
-
if (options.baseURL) {
|
|
30
|
-
baseURL = options.baseURL;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
let redis : RedisClient | undefined;
|
|
34
|
-
if (isRedisClientUsable()) {
|
|
35
|
-
redis = useRedisClient();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
let vault : VaultClient | undefined;
|
|
39
|
-
if (isVaultClientUsable()) {
|
|
40
|
-
vault = useVaultClient();
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (!baseURL) {
|
|
23
|
+
if (!options.baseURL) {
|
|
44
24
|
const data = createFakeTokenVerificationData();
|
|
45
25
|
|
|
46
26
|
return (socket, next) => {
|
|
@@ -49,36 +29,8 @@ export function createAuthupMiddleware(
|
|
|
49
29
|
};
|
|
50
30
|
}
|
|
51
31
|
|
|
52
|
-
let tokenCreator : TokenCreatorOptions;
|
|
53
|
-
if (vault) {
|
|
54
|
-
tokenCreator = {
|
|
55
|
-
type: 'robotInVault',
|
|
56
|
-
name: 'system',
|
|
57
|
-
vault,
|
|
58
|
-
baseURL,
|
|
59
|
-
};
|
|
60
|
-
} else {
|
|
61
|
-
tokenCreator = {
|
|
62
|
-
type: 'user',
|
|
63
|
-
name: 'admin',
|
|
64
|
-
password: 'start123',
|
|
65
|
-
baseURL,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
let cache : ITokenVerifierCache;
|
|
70
|
-
if (redis) {
|
|
71
|
-
cache = new RedisTokenVerifierCache(redis);
|
|
72
|
-
} else {
|
|
73
|
-
cache = new MemoryTokenVerifierCache();
|
|
74
|
-
}
|
|
75
|
-
|
|
76
32
|
return createMiddleware({
|
|
77
|
-
tokenVerifier:
|
|
78
|
-
baseURL,
|
|
79
|
-
creator: tokenCreator,
|
|
80
|
-
cache,
|
|
81
|
-
}),
|
|
33
|
+
tokenVerifier: options.tokenVerifier,
|
|
82
34
|
tokenVerifierHandler: (
|
|
83
35
|
socket: Socket,
|
|
84
36
|
data,
|
|
@@ -86,31 +38,19 @@ export function createAuthupMiddleware(
|
|
|
86
38
|
});
|
|
87
39
|
}
|
|
88
40
|
|
|
89
|
-
export function
|
|
41
|
+
export function mountAuthorizationMiddleware(
|
|
90
42
|
nsp: Namespace | Server,
|
|
91
|
-
options:
|
|
43
|
+
options: AuthorizationMiddlewareRegistrationOptions,
|
|
92
44
|
) {
|
|
93
|
-
const middleware =
|
|
45
|
+
const middleware = createAuthorizationMiddleware(options);
|
|
94
46
|
nsp.use(middleware);
|
|
95
47
|
|
|
96
48
|
nsp.use((socket, next) => {
|
|
97
|
-
if (socket.data.
|
|
98
|
-
useLogger().info(`Socket/${socket.id}:
|
|
99
|
-
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
100
|
-
actor_type: 'user',
|
|
101
|
-
actor_id: socket.data.userId,
|
|
102
|
-
});
|
|
103
|
-
} else if (socket.data.robotId) {
|
|
104
|
-
useLogger().info(`Socket/${socket.id}: Robot connected.`, {
|
|
105
|
-
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
106
|
-
actor_type: 'robot',
|
|
107
|
-
actor_id: socket.data.robotId,
|
|
108
|
-
});
|
|
109
|
-
} else if (socket.data.clientId) {
|
|
110
|
-
useLogger().info(`Socket/${socket.id}: Client connected.`, {
|
|
49
|
+
if (socket.data.identity) {
|
|
50
|
+
useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} connected.`, {
|
|
111
51
|
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
112
|
-
actor_type:
|
|
113
|
-
actor_id: socket.data.
|
|
52
|
+
actor_type: socket.data.identity.type,
|
|
53
|
+
actor_id: socket.data.identity.id,
|
|
114
54
|
});
|
|
115
55
|
} else {
|
|
116
56
|
useLogger().warn(`Socket/${socket.id}: Not authenticated.`, {
|
|
@@ -122,23 +62,11 @@ export function mountAuthupMiddleware(
|
|
|
122
62
|
}
|
|
123
63
|
|
|
124
64
|
socket.on('disconnect', () => {
|
|
125
|
-
if (socket.data.
|
|
126
|
-
useLogger().info(`Socket/${socket.id}:
|
|
127
|
-
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
128
|
-
actor_type: 'user',
|
|
129
|
-
actor_id: socket.data.userId,
|
|
130
|
-
});
|
|
131
|
-
} else if (socket.data.robotId) {
|
|
132
|
-
useLogger().info(`Socket/${socket.id}: Robot disconnected`, {
|
|
133
|
-
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
134
|
-
actor_type: 'robot',
|
|
135
|
-
actor_id: socket.data.userId,
|
|
136
|
-
});
|
|
137
|
-
} else if (socket.data.clientId) {
|
|
138
|
-
useLogger().info(`Socket/${socket.id}: Client disconnected`, {
|
|
65
|
+
if (socket.data.identity) {
|
|
66
|
+
useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} disconnected`, {
|
|
139
67
|
[LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
|
|
140
|
-
actor_type:
|
|
141
|
-
actor_id: socket.data.
|
|
68
|
+
actor_type: socket.data.identity.type,
|
|
69
|
+
actor_id: socket.data.identity.id,
|
|
142
70
|
});
|
|
143
71
|
}
|
|
144
72
|
});
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
* view the LICENSE file that was distributed with this source code.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
import type { TokenVerifier } from '@authup/server-adapter-kit';
|
|
9
|
+
|
|
10
|
+
export type AuthorizationMiddlewareRegistrationOptions = {
|
|
11
|
+
tokenVerifier?: TokenVerifier,
|
|
9
12
|
baseURL?: string,
|
|
10
13
|
fakeAbilities?: boolean
|
|
11
14
|
};
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
import { PermissionName as AuthupPermissionName, REALM_MASTER_NAME } from '@authup/core-kit';
|
|
9
9
|
import type { PermissionItem } from '@authup/access';
|
|
10
10
|
import { PermissionChecker, PermissionMemoryRepository } from '@authup/access';
|
|
11
|
-
import { OAuth2SubKind } from '@authup/specs';
|
|
12
11
|
import type { TokenVerificationData } from '@authup/server-adapter-kit';
|
|
13
12
|
import { PermissionName } from '@privateaim/kit';
|
|
14
13
|
import type { Socket } from '../../types';
|
|
@@ -39,7 +38,7 @@ export function createFakeTokenVerificationData(): TokenVerificationDataMinimal
|
|
|
39
38
|
|
|
40
39
|
sub_kind: 'user',
|
|
41
40
|
sub: 'd94b2f28-29e3-4ced-b8f1-6923a01dc1ee',
|
|
42
|
-
sub_name: '
|
|
41
|
+
sub_name: 'system',
|
|
43
42
|
|
|
44
43
|
permissions: generateAbilities(),
|
|
45
44
|
};
|
|
@@ -57,28 +56,14 @@ export function applyTokenVerificationData(
|
|
|
57
56
|
abilities = data.permissions;
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
socket.data.
|
|
61
|
-
|
|
59
|
+
socket.data.identity = {
|
|
60
|
+
type: data.sub_kind,
|
|
61
|
+
id: data.sub,
|
|
62
|
+
realmId: data.realm_id,
|
|
63
|
+
realmName: data.realm_name,
|
|
64
|
+
};
|
|
62
65
|
|
|
63
66
|
socket.data.permissionChecker = new PermissionChecker({
|
|
64
67
|
repository: new PermissionMemoryRepository(abilities),
|
|
65
68
|
});
|
|
66
|
-
|
|
67
|
-
switch (data.sub_kind) {
|
|
68
|
-
case OAuth2SubKind.USER: {
|
|
69
|
-
socket.data.userId = data.sub;
|
|
70
|
-
socket.data.userName = data.sub_name;
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
case OAuth2SubKind.ROBOT: {
|
|
74
|
-
socket.data.robotId = data.sub;
|
|
75
|
-
socket.data.robotName = data.sub_name;
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
case OAuth2SubKind.CLIENT: {
|
|
79
|
-
socket.data.clientId = data.sub;
|
|
80
|
-
socket.data.clientName = data.sub_name;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
69
|
}
|
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { UnauthorizedError } from '@ebec/http';
|
|
9
|
+
import { isSocketAuthenticated } from '../helpers/index.ts';
|
|
9
10
|
import type { Namespace, Server } from '../types';
|
|
10
11
|
|
|
11
12
|
export function mountForceLoggedInMiddleware(input: Namespace | Server) {
|
|
12
13
|
input.use((socket, next) => {
|
|
13
|
-
if (socket
|
|
14
|
+
if (!isSocketAuthenticated(socket)) {
|
|
14
15
|
next();
|
|
15
16
|
return;
|
|
16
17
|
}
|
package/src/server/index.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -5,9 +5,6 @@
|
|
|
5
5
|
* view the LICENSE file that was distributed with this source code.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type {
|
|
9
|
-
Client, Realm, Robot, User,
|
|
10
|
-
} from '@authup/core-kit';
|
|
11
8
|
import type { PermissionChecker } from '@authup/access';
|
|
12
9
|
import type {
|
|
13
10
|
Namespace as _Namespace,
|
|
@@ -15,20 +12,16 @@ import type {
|
|
|
15
12
|
Socket as _Socket,
|
|
16
13
|
} from 'socket.io';
|
|
17
14
|
|
|
15
|
+
export type SocketIdentity = {
|
|
16
|
+
id: string;
|
|
17
|
+
type: 'user' | 'client' | 'robot',
|
|
18
|
+
realmId: string,
|
|
19
|
+
realmName: string
|
|
20
|
+
};
|
|
18
21
|
export type SocketData = {
|
|
19
22
|
permissionChecker?: PermissionChecker,
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
realmName?: Realm['name'],
|
|
23
|
-
|
|
24
|
-
userId?: User['id'],
|
|
25
|
-
userName?: User['name'],
|
|
26
|
-
|
|
27
|
-
robotId?: Robot['id'],
|
|
28
|
-
robotName?: Robot['name'],
|
|
29
|
-
|
|
30
|
-
clientId?: Client['id'],
|
|
31
|
-
clientName?: Client['name'],
|
|
24
|
+
identity?: SocketIdentity,
|
|
32
25
|
|
|
33
26
|
namespaceId?: string,
|
|
34
27
|
roomSubscriptions: Record<string, number>,
|
package/dist/server/types.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,mBAAmB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,CAAC"}
|
package/src/server/types.ts
DELETED