@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.
@@ -1,7 +1,7 @@
1
1
  export default Object.freeze({
2
2
  packageVersion: 1,
3
3
  packageId: "@jskit-ai/realtime",
4
- version: "0.1.54",
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.55",
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.54",
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.55",
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();