@privateaim/server-realtime-kit 0.8.29 → 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 CHANGED
@@ -1,5 +1,21 @@
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
+
3
19
  ## [0.8.29](https://github.com/PrivateAIM/hub/compare/v0.8.28...v0.8.29) (2026-03-02)
4
20
 
5
21
 
@@ -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,CAI9D"}
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
@@ -4,7 +4,6 @@ import { LogChannel, LogFlag } from '@privateaim/telemetry-kit';
4
4
  import { createMiddleware } from '@authup/server-adapter-socket-io';
5
5
  import { REALM_MASTER_NAME, PermissionName } from '@authup/core-kit';
6
6
  import { PermissionChecker, PermissionMemoryRepository } from '@authup/access';
7
- import { OAuth2SubKind } from '@authup/specs';
8
7
  import { PermissionName as PermissionName$1 } from '@privateaim/kit';
9
8
  import { createAdapter } from '@socket.io/redis-adapter';
10
9
  import { Server } from 'socket.io';
@@ -15,7 +14,7 @@ import { Server } from 'socket.io';
15
14
  * For the full copyright and license information,
16
15
  * view the LICENSE file that was distributed with this source code.
17
16
  */ function isSocketAuthenticated(socket) {
18
- return !!socket.data.userId || !!socket.data.clientId || !!socket.data.robotId;
17
+ return !!socket.data.identity;
19
18
  }
20
19
 
21
20
  /*
@@ -74,31 +73,15 @@ function applyTokenVerificationData(socket, data, fakeAbilities) {
74
73
  } else {
75
74
  abilities = data.permissions;
76
75
  }
77
- socket.data.realmId = data.realm_id;
78
- socket.data.realmName = data.realm_name;
76
+ socket.data.identity = {
77
+ type: data.sub_kind,
78
+ id: data.sub,
79
+ realmId: data.realm_id,
80
+ realmName: data.realm_name
81
+ };
79
82
  socket.data.permissionChecker = new PermissionChecker({
80
83
  repository: new PermissionMemoryRepository(abilities)
81
84
  });
82
- switch(data.sub_kind){
83
- case OAuth2SubKind.USER:
84
- {
85
- socket.data.userId = data.sub;
86
- socket.data.userName = data.sub_name;
87
- break;
88
- }
89
- case OAuth2SubKind.ROBOT:
90
- {
91
- socket.data.robotId = data.sub;
92
- socket.data.robotName = data.sub_name;
93
- break;
94
- }
95
- case OAuth2SubKind.CLIENT:
96
- {
97
- socket.data.clientId = data.sub;
98
- socket.data.clientName = data.sub_name;
99
- break;
100
- }
101
- }
102
85
  }
103
86
 
104
87
  function createAuthorizationMiddleware(options) {
@@ -118,23 +101,11 @@ function mountAuthorizationMiddleware(nsp, options) {
118
101
  const middleware = createAuthorizationMiddleware(options);
119
102
  nsp.use(middleware);
120
103
  nsp.use((socket, next)=>{
121
- if (socket.data.userId) {
122
- useLogger().info(`Socket/${socket.id}: User connected.`, {
123
- [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
124
- actor_type: 'user',
125
- actor_id: socket.data.userId
126
- });
127
- } else if (socket.data.robotId) {
128
- useLogger().info(`Socket/${socket.id}: Robot connected.`, {
104
+ if (socket.data.identity) {
105
+ useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} connected.`, {
129
106
  [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
130
- actor_type: 'robot',
131
- actor_id: socket.data.robotId
132
- });
133
- } else if (socket.data.clientId) {
134
- useLogger().info(`Socket/${socket.id}: Client connected.`, {
135
- [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
136
- actor_type: 'client',
137
- actor_id: socket.data.clientId
107
+ actor_type: socket.data.identity.type,
108
+ actor_id: socket.data.identity.id
138
109
  });
139
110
  } else {
140
111
  useLogger().warn(`Socket/${socket.id}: Not authenticated.`, {
@@ -144,23 +115,11 @@ function mountAuthorizationMiddleware(nsp, options) {
144
115
  return;
145
116
  }
146
117
  socket.on('disconnect', ()=>{
147
- if (socket.data.userId) {
148
- useLogger().info(`Socket/${socket.id}: User disconnected`, {
149
- [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
150
- actor_type: 'user',
151
- actor_id: socket.data.userId
152
- });
153
- } else if (socket.data.robotId) {
154
- useLogger().info(`Socket/${socket.id}: Robot disconnected`, {
155
- [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
156
- actor_type: 'robot',
157
- actor_id: socket.data.userId
158
- });
159
- } else if (socket.data.clientId) {
160
- useLogger().info(`Socket/${socket.id}: Client disconnected`, {
118
+ if (socket.data.identity) {
119
+ useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} disconnected`, {
161
120
  [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
162
- actor_type: 'client',
163
- actor_id: socket.data.clientId
121
+ actor_type: socket.data.identity.type,
122
+ actor_id: socket.data.identity.id
164
123
  });
165
124
  }
166
125
  });
@@ -170,7 +129,7 @@ function mountAuthorizationMiddleware(nsp, options) {
170
129
 
171
130
  function mountForceLoggedInMiddleware(input) {
172
131
  input.use((socket, next)=>{
173
- if (socket.data.userId || socket.data.robotId) {
132
+ if (!isSocketAuthenticated(socket)) {
174
133
  next();
175
134
  return;
176
135
  }
@@ -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: '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.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 {\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.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","createAuthorizationMiddleware","options","baseURL","next","createMiddleware","tokenVerifier","tokenVerifierHandler","mountAuthorizationMiddleware","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","isRedisClientUsable","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 +1 @@
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,QAyDtD"}
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":"utils.d.ts","sourceRoot":"","sources":["../../../src/middlewares/authup/utils.ts"],"names":[],"mappings":"AAWA,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,QAiC1B"}
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":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,QASrE"}
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"}
@@ -1,3 +1,2 @@
1
1
  export * from './module';
2
- export * from './types';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAOA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,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
- realmId?: Realm['id'];
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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAC7B,MAAM,kBAAkB,CAAC;AAC1B,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,UAAU,GAAG;IACrB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE1B,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAExB,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAE1B,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE5B,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"}
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.29",
4
+ "version": "0.8.30",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {
@@ -28,9 +28,9 @@
28
28
  "@authup/server-adapter-kit": "^1.0.0-beta.30",
29
29
  "@authup/server-adapter-socket-io": "^1.0.0-beta.30",
30
30
  "@socket.io/redis-adapter": "^8.3.0",
31
- "@privateaim/kit": "^0.8.29",
32
- "@privateaim/telemetry-kit": "^0.8.29",
33
- "@privateaim/server-kit": "^0.8.29",
31
+ "@privateaim/kit": "^0.8.30",
32
+ "@privateaim/telemetry-kit": "^0.8.30",
33
+ "@privateaim/server-kit": "^0.8.30",
34
34
  "@ebec/http": "^2.3.0"
35
35
  },
36
36
  "devDependencies": {
@@ -8,7 +8,5 @@
8
8
  import type { Socket } from '../types';
9
9
 
10
10
  export function isSocketAuthenticated(socket: Socket) : boolean {
11
- return !!socket.data.userId ||
12
- !!socket.data.clientId ||
13
- !!socket.data.robotId;
11
+ return !!socket.data.identity;
14
12
  }
@@ -46,23 +46,11 @@ export function mountAuthorizationMiddleware(
46
46
  nsp.use(middleware);
47
47
 
48
48
  nsp.use((socket, next) => {
49
- if (socket.data.userId) {
50
- useLogger().info(`Socket/${socket.id}: User connected.`, {
49
+ if (socket.data.identity) {
50
+ useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} connected.`, {
51
51
  [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
52
- actor_type: 'user',
53
- actor_id: socket.data.userId,
54
- });
55
- } else if (socket.data.robotId) {
56
- useLogger().info(`Socket/${socket.id}: Robot connected.`, {
57
- [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
58
- actor_type: 'robot',
59
- actor_id: socket.data.robotId,
60
- });
61
- } else if (socket.data.clientId) {
62
- useLogger().info(`Socket/${socket.id}: Client connected.`, {
63
- [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
64
- actor_type: 'client',
65
- actor_id: socket.data.clientId,
52
+ actor_type: socket.data.identity.type,
53
+ actor_id: socket.data.identity.id,
66
54
  });
67
55
  } else {
68
56
  useLogger().warn(`Socket/${socket.id}: Not authenticated.`, {
@@ -74,23 +62,11 @@ export function mountAuthorizationMiddleware(
74
62
  }
75
63
 
76
64
  socket.on('disconnect', () => {
77
- if (socket.data.userId) {
78
- useLogger().info(`Socket/${socket.id}: User disconnected`, {
79
- [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
80
- actor_type: 'user',
81
- actor_id: socket.data.userId,
82
- });
83
- } else if (socket.data.robotId) {
84
- useLogger().info(`Socket/${socket.id}: Robot disconnected`, {
85
- [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
86
- actor_type: 'robot',
87
- actor_id: socket.data.userId,
88
- });
89
- } else if (socket.data.clientId) {
90
- useLogger().info(`Socket/${socket.id}: Client disconnected`, {
65
+ if (socket.data.identity) {
66
+ useLogger().info(`Socket/${socket.id}: ${socket.data.identity.type} disconnected`, {
91
67
  [LogFlag.CHANNEL]: LogChannel.WEBSOCKET,
92
- actor_type: 'client',
93
- actor_id: socket.data.clientId,
68
+ actor_type: socket.data.identity.type,
69
+ actor_id: socket.data.identity.id,
94
70
  });
95
71
  }
96
72
  });
@@ -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';
@@ -57,28 +56,14 @@ export function applyTokenVerificationData(
57
56
  abilities = data.permissions;
58
57
  }
59
58
 
60
- socket.data.realmId = data.realm_id;
61
- socket.data.realmName = data.realm_name;
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.data.userId || socket.data.robotId) {
14
+ if (!isSocketAuthenticated(socket)) {
14
15
  next();
15
16
  return;
16
17
  }
@@ -6,4 +6,3 @@
6
6
  */
7
7
 
8
8
  export * from './module';
9
- export * from './types';
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
- realmId?: Realm['id'],
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>,
@@ -1,4 +0,0 @@
1
- export type ServerCreateOptions = {
2
- authupURL?: string;
3
- };
4
- //# sourceMappingURL=types.d.ts.map
@@ -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"}
@@ -1,10 +0,0 @@
1
- /*
2
- * Copyright (c) 2025.
3
- * Author Peter Placzek (tada5hi)
4
- * For the full copyright and license information,
5
- * view the LICENSE file that was distributed with this source code.
6
- */
7
-
8
- export type ServerCreateOptions = {
9
- authupURL?: string
10
- };