@kubun/plugin-service-server 0.14.0 → 0.15.1

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.
Files changed (2) hide show
  1. package/lib/index.js +24 -6
  2. package/package.json +9 -9
package/lib/index.js CHANGED
@@ -101,7 +101,9 @@ const SERVICE_KIND = 'service';
101
101
  * verification (`methods = [controllerResolverFor(db)]`, pre-transaction).
102
102
  */ export function createServiceServerPlugin(options) {
103
103
  return (params)=>{
104
- const servers = [];
104
+ // Only live servers: an Array that only ever grows would retain one dead
105
+ // server per historical tunnel session for the engine's whole life.
106
+ const servers = new Set();
105
107
  const engine = params.engine;
106
108
  // Same pre-transaction, deadlock-free position as the RPC plugin: Enkaku's
107
109
  // per-message signature verification runs before any handler opens a write
@@ -112,7 +114,7 @@ const SERVICE_KIND = 'service';
112
114
  ];
113
115
  const api = {
114
116
  serve: (serveParams)=>{
115
- const { transport, services, authorizer, signal, requireAuth } = serveParams;
117
+ const { transport, services, authorizer, signal, requireAuth, cache } = serveParams;
116
118
  const providerList = engine.getProvidersSync(SERVICE_KIND);
117
119
  const providers = new Map();
118
120
  for (const provider of providerList){
@@ -147,7 +149,10 @@ const SERVICE_KIND = 'service';
147
149
  signal,
148
150
  transport,
149
151
  resolver: options?.resolver,
150
- methods
152
+ methods,
153
+ // Roster-seeded cache from the caller (the service tunnel lane), so a
154
+ // co-member's short-form did:peer:4 issuer resolves on this Server.
155
+ cache
151
156
  };
152
157
  // `requireAuth: false` serves the same merged procedures with no signature
153
158
  // requirement (unauthenticated local mode); it omits `identity`/`accessRules`.
@@ -160,7 +165,14 @@ const SERVICE_KIND = 'service';
160
165
  accessRules: mergedRules
161
166
  };
162
167
  const server = serve(enkakuServeParams);
163
- servers.push(server);
168
+ servers.add(server);
169
+ // Wrap `dispose` so an external dispose (e.g. session close) also
170
+ // self-removes the server, not just the plugin's own teardown loop.
171
+ const disposeServer = server.dispose.bind(server);
172
+ server.dispose = async ()=>{
173
+ servers.delete(server);
174
+ await disposeServer();
175
+ };
164
176
  return server;
165
177
  }
166
178
  };
@@ -168,9 +180,15 @@ const SERVICE_KIND = 'service';
168
180
  name: 'service-server',
169
181
  api,
170
182
  dispose: async ()=>{
171
- for (const server of servers){
172
- await server.dispose();
183
+ // Snapshot: each `dispose()` removes the server from the live set.
184
+ // Drain concurrently — the servers are independent.
185
+ const pending = [];
186
+ for (const server of [
187
+ ...servers
188
+ ]){
189
+ pending.push(server.dispose());
173
190
  }
191
+ await Promise.all(pending);
174
192
  }
175
193
  };
176
194
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubun/plugin-service-server",
3
- "version": "0.14.0",
3
+ "version": "0.15.1",
4
4
  "license": "see LICENSE.md",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -14,21 +14,21 @@
14
14
  "LICENSE.md"
15
15
  ],
16
16
  "dependencies": {
17
- "@enkaku/protocol": "^0.21.0",
17
+ "@enkaku/protocol": "^0.21.1",
18
18
  "@enkaku/server": "^0.21.2",
19
19
  "@kokuin/capability": "^0.3.0",
20
20
  "@kokuin/token": "^0.5.0",
21
- "@kubun/engine": "^0.14.0",
22
- "@kubun/plugin-service-api": "^0.14.0",
23
- "@kubun/protocol": "^0.14.0"
21
+ "@kubun/engine": "^0.15.0",
22
+ "@kubun/plugin-service-api": "^0.15.1",
23
+ "@kubun/protocol": "^0.15.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@enkaku/client": "^0.21.0",
26
+ "@enkaku/client": "^0.21.2",
27
27
  "@enkaku/transport": "^0.21.0",
28
28
  "@kokuin/controller": "^0.1.0",
29
- "@kubun/db": "^0.14.0",
30
- "@kubun/store-controller": "^0.14.0",
31
- "@kubun/store-graph": "^0.14.0",
29
+ "@kubun/db": "^0.15.0",
30
+ "@kubun/store-controller": "^0.15.0",
31
+ "@kubun/store-graph": "^0.15.0",
32
32
  "@kubun/test-utils": "^0.13.0"
33
33
  },
34
34
  "publishConfig": {