@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.
- package/lib/index.js +24 -6
- 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
|
-
|
|
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.
|
|
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
|
-
|
|
172
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
22
|
-
"@kubun/plugin-service-api": "^0.
|
|
23
|
-
"@kubun/protocol": "^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.
|
|
26
|
+
"@enkaku/client": "^0.21.2",
|
|
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": {
|