@jskit-ai/realtime 0.1.54 → 0.1.56
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/package.descriptor.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export default Object.freeze({
|
|
2
2
|
packageVersion: 1,
|
|
3
3
|
packageId: "@jskit-ai/realtime",
|
|
4
|
-
version: "0.1.
|
|
4
|
+
version: "0.1.56",
|
|
5
5
|
kind: "runtime",
|
|
6
6
|
description: "Thin, generic realtime runtime wrappers for socket.io server and client.",
|
|
7
7
|
options: {
|
|
@@ -94,7 +94,7 @@ export default Object.freeze({
|
|
|
94
94
|
mutations: {
|
|
95
95
|
dependencies: {
|
|
96
96
|
runtime: {
|
|
97
|
-
"@jskit-ai/kernel": "0.1.
|
|
97
|
+
"@jskit-ai/kernel": "0.1.57",
|
|
98
98
|
"@socket.io/redis-adapter": "^8.3.0",
|
|
99
99
|
"redis": "^5.8.2",
|
|
100
100
|
"socket.io": "^4.8.3",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jskit-ai/realtime",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.56",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "node --test"
|
|
@@ -16,9 +16,12 @@
|
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@socket.io/redis-adapter": "^8.3.0",
|
|
19
|
-
"@jskit-ai/kernel": "0.1.
|
|
19
|
+
"@jskit-ai/kernel": "0.1.57",
|
|
20
20
|
"redis": "^5.8.2",
|
|
21
21
|
"socket.io": "^4.8.3",
|
|
22
22
|
"socket.io-client": "^4.8.3"
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"vue": "^3.5.13"
|
|
23
26
|
}
|
|
24
27
|
}
|
|
@@ -471,20 +471,29 @@ async function resolveActorWorkspaceIds(workspaceMembershipsRepository, actorId)
|
|
|
471
471
|
.filter(Boolean);
|
|
472
472
|
}
|
|
473
473
|
|
|
474
|
+
function resolveOptionalScopeBinding(scope, token = "") {
|
|
475
|
+
if (!scope || typeof scope.has !== "function" || typeof scope.make !== "function") {
|
|
476
|
+
return null;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
const normalizedToken = String(token || "").trim();
|
|
480
|
+
if (!normalizedToken || scope.has(normalizedToken) !== true) {
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
return scope.make(normalizedToken);
|
|
485
|
+
}
|
|
486
|
+
|
|
474
487
|
function registerRealtimeSocketAudienceBootstrap(scope, io, logger) {
|
|
475
488
|
if (!io || typeof io.on !== "function") {
|
|
476
489
|
return;
|
|
477
490
|
}
|
|
478
491
|
|
|
479
|
-
const authService =
|
|
480
|
-
scope && typeof scope.has === "function" && scope.has("authService") ? scope.make("authService") : null;
|
|
481
|
-
const workspaceMembershipsRepository =
|
|
482
|
-
scope && typeof scope.has === "function" && scope.has("internal.repository.workspace-memberships")
|
|
483
|
-
? scope.make("internal.repository.workspace-memberships")
|
|
484
|
-
: null;
|
|
485
|
-
|
|
486
492
|
io.on("connection", async (socket) => {
|
|
487
493
|
try {
|
|
494
|
+
const authService = resolveOptionalScopeBinding(scope, "authService");
|
|
495
|
+
const workspaceMembershipsRepository = resolveOptionalScopeBinding(scope, "internal.repository.workspace-memberships");
|
|
496
|
+
|
|
488
497
|
socket.join(REALTIME_ROOM_ALL_CLIENTS);
|
|
489
498
|
logger.debug(
|
|
490
499
|
{
|
|
@@ -125,6 +125,25 @@ test("RealtimeServiceProvider boot starts socket io and shutdown closes it", asy
|
|
|
125
125
|
await provider.shutdown(app);
|
|
126
126
|
});
|
|
127
127
|
|
|
128
|
+
test("RealtimeServiceProvider boot does not eagerly resolve optional auth/workspace bindings", async () => {
|
|
129
|
+
const app = createSingletonApp();
|
|
130
|
+
app.instance("jskit.fastify", {
|
|
131
|
+
server: createServer()
|
|
132
|
+
});
|
|
133
|
+
app.singleton("authService", () => {
|
|
134
|
+
throw new Error("authService should not resolve during realtime boot");
|
|
135
|
+
});
|
|
136
|
+
app.singleton("internal.repository.workspace-memberships", () => {
|
|
137
|
+
throw new Error("workspace memberships repository should not resolve during realtime boot");
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
const provider = new RealtimeServiceProvider();
|
|
141
|
+
provider.register(app);
|
|
142
|
+
|
|
143
|
+
await assert.doesNotReject(() => provider.boot(app));
|
|
144
|
+
await provider.shutdown(app);
|
|
145
|
+
});
|
|
146
|
+
|
|
128
147
|
test("RealtimeClientProvider registers runtime realtime client api", () => {
|
|
129
148
|
const app = createSingletonApp();
|
|
130
149
|
const provider = new RealtimeClientProvider();
|