@kubun/plugin-service-server 0.14.0 → 0.15.0
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/lib/index.js +19 -4
- package/package.json +8 -8
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
|
-
|
|
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
|
|
@@ -160,7 +162,14 @@ const SERVICE_KIND = 'service';
|
|
|
160
162
|
accessRules: mergedRules
|
|
161
163
|
};
|
|
162
164
|
const server = serve(enkakuServeParams);
|
|
163
|
-
servers.
|
|
165
|
+
servers.add(server);
|
|
166
|
+
// Wrap `dispose` so an external dispose (e.g. session close) also
|
|
167
|
+
// self-removes the server, not just the plugin's own teardown loop.
|
|
168
|
+
const disposeServer = server.dispose.bind(server);
|
|
169
|
+
server.dispose = async ()=>{
|
|
170
|
+
servers.delete(server);
|
|
171
|
+
await disposeServer();
|
|
172
|
+
};
|
|
164
173
|
return server;
|
|
165
174
|
}
|
|
166
175
|
};
|
|
@@ -168,9 +177,15 @@ const SERVICE_KIND = 'service';
|
|
|
168
177
|
name: 'service-server',
|
|
169
178
|
api,
|
|
170
179
|
dispose: async ()=>{
|
|
171
|
-
|
|
172
|
-
|
|
180
|
+
// Snapshot: each `dispose()` removes the server from the live set.
|
|
181
|
+
// Drain concurrently — the servers are independent.
|
|
182
|
+
const pending = [];
|
|
183
|
+
for (const server of [
|
|
184
|
+
...servers
|
|
185
|
+
]){
|
|
186
|
+
pending.push(server.dispose());
|
|
173
187
|
}
|
|
188
|
+
await Promise.all(pending);
|
|
174
189
|
}
|
|
175
190
|
};
|
|
176
191
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubun/plugin-service-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"license": "see LICENSE.md",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -18,17 +18,17 @@
|
|
|
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.
|
|
22
|
-
"@kubun/plugin-service-api": "^0.
|
|
23
|
-
"@kubun/protocol": "^0.
|
|
21
|
+
"@kubun/engine": "^0.15.0",
|
|
22
|
+
"@kubun/plugin-service-api": "^0.15.0",
|
|
23
|
+
"@kubun/protocol": "^0.15.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@enkaku/client": "^0.21.
|
|
26
|
+
"@enkaku/client": "^0.21.1",
|
|
27
27
|
"@enkaku/transport": "^0.21.0",
|
|
28
28
|
"@kokuin/controller": "^0.1.0",
|
|
29
|
-
"@kubun/db": "^0.
|
|
30
|
-
"@kubun/store-controller": "^0.
|
|
31
|
-
"@kubun/store-graph": "^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": {
|