@toa.io/extensions.exposition 1.0.0-alpha.323 → 1.0.0-alpha.325
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.json +3 -3
- package/transpiled/MCP/Server.d.ts +8 -1
- package/transpiled/MCP/Server.js +14 -1
- package/transpiled/MCP/Server.js.map +1 -1
- package/transpiled/MCP/discover.d.ts +2 -1
- package/transpiled/MCP/discover.js +4 -1
- package/transpiled/MCP/discover.js.map +1 -1
- package/transpiled/MCP/manifest.d.ts +40 -0
- package/transpiled/MCP/manifest.js +163 -0
- package/transpiled/MCP/manifest.js.map +1 -0
- package/transpiled/directives/realtime/Realtime.d.ts +10 -3
- package/transpiled/directives/realtime/Realtime.js +20 -7
- package/transpiled/directives/realtime/Realtime.js.map +1 -1
- package/transpiled/realtime/Destination.d.ts +1 -1
- package/transpiled/realtime/Destination.js +11 -5
- package/transpiled/realtime/Destination.js.map +1 -1
- package/transpiled/service.js +3 -0
- package/transpiled/service.js.map +1 -1
- package/ui/dist/_app/immutable/chunks/{B030YAfG.js → BTRhCPhB.js} +2 -2
- package/ui/dist/_app/immutable/chunks/{yO7b3L9r.js → BqErKWVG.js} +1 -1
- package/ui/dist/_app/immutable/chunks/ChfMjb_F.js +1 -0
- package/ui/dist/_app/immutable/chunks/{eZLMu7W8.js → DuSH5obH.js} +1 -1
- package/ui/dist/_app/immutable/entry/{app.DvySiTzU.js → app.BgSwzcJI.js} +2 -2
- package/ui/dist/_app/immutable/entry/start.gCSokWJN.js +1 -0
- package/ui/dist/_app/immutable/nodes/{0.Dcp6rUYD.js → 0.VduHvk8Z.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{1.8GFXbj57.js → 1.CVKwY6O3.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{2.DZHUfnzb.js → 2.B-P-d6-E.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{3.CoU0PAkI.js → 3.CUIC3nDR.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{4.ahCiIl9m.js → 4.BtAsqex7.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{5.DfxG1FRY.js → 5.DWY_aPT1.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{6.Ca65ePdy.js → 6.CcgxAp8Z.js} +1 -1
- package/ui/dist/_app/version.json +1 -1
- package/ui/dist/index.html +10 -10
- package/ui/dist/_app/immutable/chunks/BSuoKOIV.js +0 -1
- package/ui/dist/_app/immutable/entry/start.CtniLql5.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toa.io/extensions.exposition",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.325",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Toa Exposition",
|
|
6
6
|
"author": "temich <tema.gurtovoy@gmail.com>",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@toa.io/core": "1.0.0-alpha.323",
|
|
32
|
-
"@toa.io/definitions": "1.0.0-alpha.
|
|
32
|
+
"@toa.io/definitions": "1.0.0-alpha.325",
|
|
33
33
|
"@toa.io/generic": "1.0.0-alpha.311",
|
|
34
34
|
"@toa.io/pointer": "1.0.0-alpha.311",
|
|
35
35
|
"@toa.io/schemas": "1.0.0-alpha.311",
|
|
@@ -74,5 +74,5 @@
|
|
|
74
74
|
"lru-cache": "11.5.3",
|
|
75
75
|
"paseto": "4.0.1"
|
|
76
76
|
},
|
|
77
|
-
"gitHead": "
|
|
77
|
+
"gitHead": "95bc03e65c65f02d536da6ed027cf4f78f5cec74"
|
|
78
78
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as http from '../HTTP/index.ts';
|
|
2
|
+
import { Manifest } from './manifest.ts';
|
|
2
3
|
import type { Tree } from '../RTD/index.ts';
|
|
3
4
|
import type { MCPAnnotation as MCP } from '@toa.io/definitions/extensions.exposition';
|
|
4
5
|
/**
|
|
@@ -12,8 +13,14 @@ import type { MCPAnnotation as MCP } from '@toa.io/definitions/extensions.exposi
|
|
|
12
13
|
export declare class Server {
|
|
13
14
|
private readonly options;
|
|
14
15
|
private readonly tree;
|
|
15
|
-
private readonly discovery;
|
|
16
16
|
private readonly origins;
|
|
17
|
+
/** Built again when the icons of the manifest change; a request reads what it is then. */
|
|
18
|
+
private discovery;
|
|
19
|
+
/**
|
|
20
|
+
* The reader of the application's web manifest, which the gateway connects: none without
|
|
21
|
+
* one named.
|
|
22
|
+
*/
|
|
23
|
+
readonly manifest: Manifest | null;
|
|
17
24
|
/** The hosts this is served at the root of, lowercased as a request's host is. */
|
|
18
25
|
private readonly roots;
|
|
19
26
|
constructor(options: MCP, tree: Tree);
|
package/transpiled/MCP/Server.js
CHANGED
|
@@ -2,6 +2,7 @@ import { console } from 'openspan';
|
|
|
2
2
|
import { BRANCH_TTL } from '@toa.io/definitions/extensions.exposition';
|
|
3
3
|
import * as http from '../HTTP/index.js';
|
|
4
4
|
import { discovery } from './discover.js';
|
|
5
|
+
import { Manifest } from './manifest.js';
|
|
5
6
|
import { call, list } from './tools.js';
|
|
6
7
|
import { HEADER_MISMATCH, INVALID_PARAMS, INVALID_REQUEST, METHOD_NOT_FOUND, PARSE, UNSUPPORTED_VERSION, failure, response } from './errors.js';
|
|
7
8
|
import { CLIENT_CAPABILITIES, JSONRPC, LEGACY, MODERN, PROTOCOL_VERSION, SERVER_INFO, VERSIONS } from './types.js';
|
|
@@ -16,8 +17,14 @@ import { CLIENT_CAPABILITIES, JSONRPC, LEGACY, MODERN, PROTOCOL_VERSION, SERVER_
|
|
|
16
17
|
export class Server {
|
|
17
18
|
options;
|
|
18
19
|
tree;
|
|
19
|
-
discovery;
|
|
20
20
|
origins;
|
|
21
|
+
/** Built again when the icons of the manifest change; a request reads what it is then. */
|
|
22
|
+
discovery;
|
|
23
|
+
/**
|
|
24
|
+
* The reader of the application's web manifest, which the gateway connects: none without
|
|
25
|
+
* one named.
|
|
26
|
+
*/
|
|
27
|
+
manifest;
|
|
21
28
|
/** The hosts this is served at the root of, lowercased as a request's host is. */
|
|
22
29
|
roots;
|
|
23
30
|
constructor(options, tree) {
|
|
@@ -25,6 +32,12 @@ export class Server {
|
|
|
25
32
|
this.tree = tree;
|
|
26
33
|
this.discovery = discovery(options);
|
|
27
34
|
this.origins = new Set(options.origins ?? []);
|
|
35
|
+
this.manifest =
|
|
36
|
+
options.manifest === undefined
|
|
37
|
+
? null
|
|
38
|
+
: new Manifest(options.manifest, (icons) => {
|
|
39
|
+
this.discovery = discovery(options, icons);
|
|
40
|
+
});
|
|
28
41
|
this.roots = new Set(Object.values(options.hosts ?? {}).map((host) => host.toLowerCase()));
|
|
29
42
|
}
|
|
30
43
|
/** Whether the host is one this endpoint is the root of. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../source/MCP/Server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAA;AACtE,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,SAAS,EAAkB,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAc,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,KAAK,EACL,mBAAmB,EACnB,OAAO,EACP,QAAQ,EACT,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,MAAM,EACN,gBAAgB,EAChB,WAAW,EACX,QAAQ,EAIT,MAAM,YAAY,CAAA;AAInB;;;;;;;GAOG;AACH,MAAM,OAAO,MAAM;IACA,OAAO,CAAK;IACZ,IAAI,CAAM;IACV,SAAS,CAAW;
|
|
1
|
+
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../source/MCP/Server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Icon } from './manifest.ts';
|
|
1
2
|
import type { MCPAnnotation as MCP } from '@toa.io/definitions/extensions.exposition';
|
|
2
3
|
/**
|
|
3
4
|
* What a client is told before it calls anything: the revisions served, what is served, and
|
|
@@ -10,4 +11,4 @@ export interface Discovery {
|
|
|
10
11
|
/** `initialize`, in the shape a client of an earlier revision reads. */
|
|
11
12
|
legacy: (offered: string | undefined) => object;
|
|
12
13
|
}
|
|
13
|
-
export declare function discovery(options: MCP): Discovery;
|
|
14
|
+
export declare function discovery(options: MCP, icons?: Icon[]): Discovery;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { LEGACY, MODERN, SERVER_INFO, VERSIONS } from './types.js';
|
|
3
|
-
export function discovery(options) {
|
|
3
|
+
export function discovery(options, icons = []) {
|
|
4
4
|
const info = { name: options.name, version: VERSION };
|
|
5
|
+
// the application's own, where its manifest has been read and lists any
|
|
6
|
+
if (icons.length > 0)
|
|
7
|
+
info.icons = icons;
|
|
5
8
|
// `listChanged` is a stream a client holds open, and this endpoint holds none
|
|
6
9
|
const capabilities = { tools: {} };
|
|
7
10
|
const modern = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../source/MCP/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../source/MCP/discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAiBlE,MAAM,UAAU,SAAS,CAAC,OAAY,EAAE,KAAK,GAAW,EAAE;IACxD,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAE9E,wEAAwE;IACxE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IAExC,8EAA8E;IAC9E,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAElC,MAAM,MAAM,GAA4B;QACtC,iBAAiB,EAAE,QAAQ;QAC3B,YAAY;QACZ,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE;KAC/B,CAAA;IAED,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;IAElF,SAAS,MAAM,CAAC,OAA2B;QACzC,MAAM,KAAK,GAA4B;YACrC,qFAAqF;YACrF,eAAe,EAAE,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YAC/E,YAAY;YACZ,UAAU,EAAE,IAAI;SACjB,CAAA;QAED,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;YAAE,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;QAEjF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AAC3B,CAAC;AAED,uFAAuF;AACvF,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAChC,YAAY,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CACrE,CAAC,OAAO,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Connector } from '@toa.io/core';
|
|
2
|
+
/** An icon a client may render, as the revision describes one. */
|
|
3
|
+
export interface Icon {
|
|
4
|
+
src: string;
|
|
5
|
+
mimeType?: string;
|
|
6
|
+
sizes?: string[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The icons of an application's web manifest, read in the background. A request never waits
|
|
10
|
+
* for a read: what it is answered with is what the last read that did not fail gave, and none
|
|
11
|
+
* before one has.
|
|
12
|
+
*
|
|
13
|
+
* Every replica reads for itself — a document this small is not worth sharing state for — and
|
|
14
|
+
* reads again on the cycle a client holds `server/discover` for, so what a client was shown is
|
|
15
|
+
* at most two cycles old. HTTP caching is not honoured: the cycle replaces it.
|
|
16
|
+
*/
|
|
17
|
+
export declare class Manifest extends Connector {
|
|
18
|
+
private readonly url;
|
|
19
|
+
private readonly shown;
|
|
20
|
+
private readonly fetch;
|
|
21
|
+
/** What was last shown, to tell a change from a read that found the same. */
|
|
22
|
+
private current;
|
|
23
|
+
/** Consecutive reads that failed, which is what the retry backs off by. */
|
|
24
|
+
private failures;
|
|
25
|
+
private timer;
|
|
26
|
+
private aborted;
|
|
27
|
+
constructor(url: string, shown: (icons: Icon[]) => void, fetch?: typeof globalThis.fetch);
|
|
28
|
+
protected open(): void;
|
|
29
|
+
protected close(): void;
|
|
30
|
+
private read;
|
|
31
|
+
private get;
|
|
32
|
+
private succeeded;
|
|
33
|
+
private failed;
|
|
34
|
+
private schedule;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* What a client may render of a manifest's icons with no further trust: one of the manifest's
|
|
38
|
+
* own origin, meant to be shown as it is, and an image where it says what it is.
|
|
39
|
+
*/
|
|
40
|
+
export declare function icons(document: unknown, url: string): Icon[];
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { console } from 'openspan';
|
|
2
|
+
import { Connector } from '@toa.io/core';
|
|
3
|
+
/**
|
|
4
|
+
* The icons of an application's web manifest, read in the background. A request never waits
|
|
5
|
+
* for a read: what it is answered with is what the last read that did not fail gave, and none
|
|
6
|
+
* before one has.
|
|
7
|
+
*
|
|
8
|
+
* Every replica reads for itself — a document this small is not worth sharing state for — and
|
|
9
|
+
* reads again on the cycle a client holds `server/discover` for, so what a client was shown is
|
|
10
|
+
* at most two cycles old. HTTP caching is not honoured: the cycle replaces it.
|
|
11
|
+
*/
|
|
12
|
+
export class Manifest extends Connector {
|
|
13
|
+
url;
|
|
14
|
+
shown;
|
|
15
|
+
fetch;
|
|
16
|
+
/** What was last shown, to tell a change from a read that found the same. */
|
|
17
|
+
current = null;
|
|
18
|
+
/** Consecutive reads that failed, which is what the retry backs off by. */
|
|
19
|
+
failures = 0;
|
|
20
|
+
timer = null;
|
|
21
|
+
aborted = new AbortController();
|
|
22
|
+
constructor(url, shown, fetch = globalThis.fetch) {
|
|
23
|
+
super();
|
|
24
|
+
this.url = url;
|
|
25
|
+
this.shown = shown;
|
|
26
|
+
this.fetch = fetch;
|
|
27
|
+
}
|
|
28
|
+
open() {
|
|
29
|
+
this.aborted = new AbortController();
|
|
30
|
+
// the endpoint answers without icons meanwhile: a site of another origin is not one to wait for
|
|
31
|
+
void this.read();
|
|
32
|
+
}
|
|
33
|
+
close() {
|
|
34
|
+
if (this.timer !== null)
|
|
35
|
+
clearTimeout(this.timer);
|
|
36
|
+
this.timer = null;
|
|
37
|
+
this.aborted.abort();
|
|
38
|
+
}
|
|
39
|
+
async read() {
|
|
40
|
+
const document = await this.get();
|
|
41
|
+
if (this.aborted.signal.aborted)
|
|
42
|
+
return;
|
|
43
|
+
if (document instanceof Error)
|
|
44
|
+
this.failed(document);
|
|
45
|
+
else
|
|
46
|
+
this.succeeded(icons(document, this.url));
|
|
47
|
+
this.schedule();
|
|
48
|
+
}
|
|
49
|
+
async get() {
|
|
50
|
+
try {
|
|
51
|
+
const response = await this.fetch(this.url, {
|
|
52
|
+
// a redirect leaves the address the annotation names
|
|
53
|
+
redirect: 'error',
|
|
54
|
+
signal: AbortSignal.any([this.aborted.signal, AbortSignal.timeout(TIMEOUT)]),
|
|
55
|
+
headers: { accept: 'application/manifest+json, application/json' }
|
|
56
|
+
});
|
|
57
|
+
if (!response.ok)
|
|
58
|
+
return new Error(`The manifest is answered with ${response.status}`);
|
|
59
|
+
return JSON.parse(await capped(response));
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
succeeded(found) {
|
|
66
|
+
if (this.failures > 0)
|
|
67
|
+
console.info('The web manifest is read again', { url: this.url });
|
|
68
|
+
this.failures = 0;
|
|
69
|
+
const value = JSON.stringify(found);
|
|
70
|
+
if (value === this.current)
|
|
71
|
+
return;
|
|
72
|
+
if (found.length === 0)
|
|
73
|
+
console.warn('The web manifest lists no icon to show', { url: this.url });
|
|
74
|
+
this.current = value;
|
|
75
|
+
this.shown(found);
|
|
76
|
+
}
|
|
77
|
+
failed(error) {
|
|
78
|
+
this.failures++;
|
|
79
|
+
const attributes = { url: this.url, message: error.message };
|
|
80
|
+
// a site that is down is said once, and not every time it is still down
|
|
81
|
+
if (this.failures === 1)
|
|
82
|
+
console.warn('The web manifest is not read', attributes);
|
|
83
|
+
else
|
|
84
|
+
console.debug('The web manifest is still not read', attributes);
|
|
85
|
+
}
|
|
86
|
+
schedule() {
|
|
87
|
+
// until a read succeeds, sooner; the icons of the last that did are kept meanwhile
|
|
88
|
+
const delay = this.failures === 0 || this.current !== null
|
|
89
|
+
? CYCLE
|
|
90
|
+
: Math.min(RETRY * 2 ** (this.failures - 1), CYCLE);
|
|
91
|
+
this.timer = setTimeout(() => void this.read(), delay);
|
|
92
|
+
this.timer.unref?.();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* What a client may render of a manifest's icons with no further trust: one of the manifest's
|
|
97
|
+
* own origin, meant to be shown as it is, and an image where it says what it is.
|
|
98
|
+
*/
|
|
99
|
+
export function icons(document, url) {
|
|
100
|
+
const listed = document?.icons;
|
|
101
|
+
if (!Array.isArray(listed))
|
|
102
|
+
return [];
|
|
103
|
+
const origin = new URL(url).origin;
|
|
104
|
+
const found = [];
|
|
105
|
+
for (const item of listed) {
|
|
106
|
+
if (typeof item !== 'object' || item === null)
|
|
107
|
+
continue;
|
|
108
|
+
const { src, type, sizes, purpose } = item;
|
|
109
|
+
if (typeof src !== 'string' || src === '')
|
|
110
|
+
continue;
|
|
111
|
+
const resolved = URL.parse(src, url);
|
|
112
|
+
if (resolved === null || resolved.origin !== origin)
|
|
113
|
+
continue;
|
|
114
|
+
if (purpose !== undefined && !(typeof purpose === 'string' && words(purpose).includes('any')))
|
|
115
|
+
continue;
|
|
116
|
+
if (type !== undefined && !(typeof type === 'string' && type.startsWith('image/')))
|
|
117
|
+
continue;
|
|
118
|
+
const icon = { src: resolved.href };
|
|
119
|
+
if (type !== undefined)
|
|
120
|
+
icon.mimeType = type;
|
|
121
|
+
const valid = typeof sizes === 'string' ? words(sizes).map(lower).filter(size) : [];
|
|
122
|
+
if (valid.length > 0)
|
|
123
|
+
icon.sizes = valid;
|
|
124
|
+
found.push(icon);
|
|
125
|
+
}
|
|
126
|
+
return found;
|
|
127
|
+
}
|
|
128
|
+
/** The body, not read past the cap: a document no manifest is this large is no manifest. */
|
|
129
|
+
async function capped(response) {
|
|
130
|
+
const reader = response.body?.getReader();
|
|
131
|
+
if (reader === undefined)
|
|
132
|
+
return '';
|
|
133
|
+
const chunks = [];
|
|
134
|
+
let length = 0;
|
|
135
|
+
for (;;) {
|
|
136
|
+
const { done, value } = await reader.read();
|
|
137
|
+
if (done)
|
|
138
|
+
break;
|
|
139
|
+
length += value.byteLength;
|
|
140
|
+
if (length > SIZE) {
|
|
141
|
+
await reader.cancel();
|
|
142
|
+
throw new Error(`The manifest is over ${SIZE} bytes`);
|
|
143
|
+
}
|
|
144
|
+
chunks.push(value);
|
|
145
|
+
}
|
|
146
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
147
|
+
}
|
|
148
|
+
function words(value) {
|
|
149
|
+
return value.split(/\s+/).filter((word) => word !== '');
|
|
150
|
+
}
|
|
151
|
+
function lower(value) {
|
|
152
|
+
return value.toLowerCase();
|
|
153
|
+
}
|
|
154
|
+
function size(value) {
|
|
155
|
+
return value === 'any' || /^[1-9]\d*x[1-9]\d*$/.test(value);
|
|
156
|
+
}
|
|
157
|
+
/** How often the manifest is read: the time a client may hold `server/discover`. */
|
|
158
|
+
const CYCLE = 30 * 60_000;
|
|
159
|
+
/** The first retry after a read failed, doubled until it is a cycle. */
|
|
160
|
+
const RETRY = 60_000;
|
|
161
|
+
const TIMEOUT = 3_000;
|
|
162
|
+
const SIZE = 16 * 1024;
|
|
163
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../source/MCP/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import type { Context } from '../../HTTP/index.ts';
|
|
|
2
2
|
import type { DirectiveFamily, Parameter } from '../../RTD/index.ts';
|
|
3
3
|
import type { Output } from '../../io.ts';
|
|
4
4
|
/**
|
|
5
|
-
* `realtime:stream` answers with the stream of the key a route variable names
|
|
6
|
-
* what the route's own directives say, as for anything else it serves.
|
|
5
|
+
* `realtime:stream` answers with the stream of the key a route variable names, or of a literal
|
|
6
|
+
* key. Who may read it is what the route's own directives say, as for anything else it serves.
|
|
7
7
|
*/
|
|
8
8
|
export declare class Realtime implements DirectiveFamily<Directive> {
|
|
9
9
|
readonly name = "realtime";
|
|
@@ -12,7 +12,14 @@ export declare class Realtime implements DirectiveFamily<Directive> {
|
|
|
12
12
|
create(name: string, value: unknown, _: unknown, route: string): Directive;
|
|
13
13
|
precall(directives: Directive[], context: Context, parameters: Parameter[]): Promise<Output>;
|
|
14
14
|
dispose(): void;
|
|
15
|
+
/** The value of the route variable, which is never a literal: a literal is served by name. */
|
|
16
|
+
private variable;
|
|
15
17
|
}
|
|
16
|
-
export
|
|
18
|
+
export type Directive = Variable | Literal;
|
|
19
|
+
interface Variable {
|
|
17
20
|
variable: string;
|
|
18
21
|
}
|
|
22
|
+
interface Literal {
|
|
23
|
+
key: string;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { literal } from '@toa.io/definitions/extensions.exposition/realtime';
|
|
1
2
|
import { NotFound } from '../../HTTP/index.js';
|
|
2
3
|
import { configured } from '../../realtime/redis.js';
|
|
3
4
|
import { Hub } from './Hub.js';
|
|
4
5
|
/**
|
|
5
|
-
* `realtime:stream` answers with the stream of the key a route variable names
|
|
6
|
-
* what the route's own directives say, as for anything else it serves.
|
|
6
|
+
* `realtime:stream` answers with the stream of the key a route variable names, or of a literal
|
|
7
|
+
* key. Who may read it is what the route's own directives say, as for anything else it serves.
|
|
7
8
|
*/
|
|
8
9
|
export class Realtime {
|
|
9
10
|
name = 'realtime';
|
|
@@ -14,16 +15,19 @@ export class Realtime {
|
|
|
14
15
|
create(name, value, _, route) {
|
|
15
16
|
if (name !== 'stream')
|
|
16
17
|
throw new Error(`Directive 'realtime:${name}' is not implemented`);
|
|
18
|
+
if (typeof value === 'string' && literal(value)) {
|
|
19
|
+
if (value.length === 1)
|
|
20
|
+
throw new Error(`'realtime:stream' literal '${value}' names no key, at '${route}'`);
|
|
21
|
+
return { key: value };
|
|
22
|
+
}
|
|
17
23
|
if (typeof value !== 'string' || !route.includes(`:${value}`))
|
|
18
|
-
throw new Error(`'realtime:stream' names the route variable that is the key, and
|
|
19
|
-
`is not one of '${route}'`);
|
|
24
|
+
throw new Error(`'realtime:stream' names the route variable that is the key, or a literal key, and ` +
|
|
25
|
+
`'${String(value)}' is not one of '${route}'`);
|
|
20
26
|
return { variable: value };
|
|
21
27
|
}
|
|
22
28
|
async precall(directives, context, parameters) {
|
|
23
29
|
const [directive] = directives;
|
|
24
|
-
const key =
|
|
25
|
-
if (key === undefined)
|
|
26
|
-
throw new Error(`Route variable '${directive.variable}' is not found`);
|
|
30
|
+
const key = 'key' in directive ? directive.key : this.variable(directive, parameters);
|
|
27
31
|
// nothing in the context declares realtime, so nothing is kept to be read
|
|
28
32
|
if (!configured())
|
|
29
33
|
throw new NotFound('Realtime streams are not configured');
|
|
@@ -33,5 +37,14 @@ export class Realtime {
|
|
|
33
37
|
dispose() {
|
|
34
38
|
this.hub.close();
|
|
35
39
|
}
|
|
40
|
+
/** The value of the route variable, which is never a literal: a literal is served by name. */
|
|
41
|
+
variable({ variable }, parameters) {
|
|
42
|
+
const key = parameters.find(({ name }) => name === variable)?.value;
|
|
43
|
+
if (key === undefined)
|
|
44
|
+
throw new Error(`Route variable '${variable}' is not found`);
|
|
45
|
+
if (literal(key))
|
|
46
|
+
throw new NotFound();
|
|
47
|
+
return key;
|
|
48
|
+
}
|
|
36
49
|
}
|
|
37
50
|
//# sourceMappingURL=Realtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Realtime.js","sourceRoot":"","sources":["../../../source/directives/realtime/Realtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAK9B;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACH,IAAI,GAAG,UAAU,CAAA;IACjB,SAAS,GAAG,KAAK,CAAA;IAEhB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;IAEhC,uDAAuD;IACvD,sCAAsC;IAC/B,MAAM,CAAC,IAAY,EAAE,KAAc,EAAE,CAAU,EAAE,KAAa;QACnE,IAAI,IAAI,KAAK,QAAQ;YACnB,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,sBAAsB,CAAC,CAAA;QAEpE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,
|
|
1
|
+
{"version":3,"file":"Realtime.js","sourceRoot":"","sources":["../../../source/directives/realtime/Realtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oDAAoD,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAK9B;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACH,IAAI,GAAG,UAAU,CAAA;IACjB,SAAS,GAAG,KAAK,CAAA;IAEhB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;IAEhC,uDAAuD;IACvD,sCAAsC;IAC/B,MAAM,CAAC,IAAY,EAAE,KAAc,EAAE,CAAU,EAAE,KAAa;QACnE,IAAI,IAAI,KAAK,QAAQ;YACnB,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,sBAAsB,CAAC,CAAA;QAEpE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,uBAAuB,KAAK,GAAG,CAAC,CAAA;YAErF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;QACvB,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,oFAAoF;gBAClF,IAAI,MAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,GAAG,CAChD,CAAA;QAEH,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,OAAO,CAClB,UAAuB,EACvB,OAAgB,EAChB,UAAuB;QAEvB,MAAM,CAAC,SAAS,CAAC,GAAG,UAAU,CAAA;QAC9B,MAAM,GAAG,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAErF,0EAA0E;QAC1E,IAAI,CAAC,UAAU,EAAE;YAAE,MAAM,IAAI,QAAQ,CAAC,qCAAqC,CAAC,CAAA;QAE5E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAA;QAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAA;IAClD,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;IAED,8FAA8F;IACtF,QAAQ,CAAC,EAAE,QAAQ,EAAY,EAAE,UAAuB;QAC9D,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,CAAA;QAEnE,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,gBAAgB,CAAC,CAAA;QAEnF,IAAI,OAAO,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,QAAQ,EAAE,CAAA;QAEtC,OAAO,GAAG,CAAA;IACZ,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Connector, type Locator } from '@toa.io/core';
|
|
2
|
-
import type
|
|
2
|
+
import { type Route } from '@toa.io/definitions/extensions.exposition/realtime';
|
|
3
3
|
import type { outbox } from '@toa.io/core/types';
|
|
4
4
|
/**
|
|
5
5
|
* Where a component's routed events go: the stream of each of their keys, and its channel. Each
|
|
@@ -2,6 +2,7 @@ import { console } from 'openspan';
|
|
|
2
2
|
import { Connector } from '@toa.io/core';
|
|
3
3
|
import { APPEND, MAXLEN, Shards, shard } from './redis.js';
|
|
4
4
|
import * as measure from './measurements.js';
|
|
5
|
+
import { literal } from '@toa.io/definitions/extensions.exposition/realtime';
|
|
5
6
|
/**
|
|
6
7
|
* Where a component's routed events go: the stream of each of their keys, and its channel. Each
|
|
7
8
|
* event of a row is rendered by the component's own condition and payload, fitted to what its
|
|
@@ -72,7 +73,7 @@ export class Destination extends Connector {
|
|
|
72
73
|
if (raised === null)
|
|
73
74
|
return null;
|
|
74
75
|
const payload = raised.payload;
|
|
75
|
-
const keys = keysOf(payload, route
|
|
76
|
+
const keys = keysOf(payload, route);
|
|
76
77
|
if (keys.length === 0)
|
|
77
78
|
return null;
|
|
78
79
|
return {
|
|
@@ -103,16 +104,21 @@ function routed(value) {
|
|
|
103
104
|
Array.isArray(keys) &&
|
|
104
105
|
keys.every((key) => typeof key === 'string'));
|
|
105
106
|
}
|
|
106
|
-
/**
|
|
107
|
-
|
|
107
|
+
/**
|
|
108
|
+
* The values of the key properties, each a key or a list of them, and the literals. A value that
|
|
109
|
+
* reads as a literal is not a key: whoever writes it does not reach a literal's stream.
|
|
110
|
+
*/
|
|
111
|
+
function keysOf(payload, route) {
|
|
108
112
|
const keys = new Set();
|
|
109
|
-
for (const property of properties) {
|
|
113
|
+
for (const property of route.properties) {
|
|
110
114
|
const value = payload?.[property];
|
|
111
115
|
const values = Array.isArray(value) ? value : [value];
|
|
112
116
|
for (const key of values)
|
|
113
|
-
if (typeof key === 'string')
|
|
117
|
+
if (typeof key === 'string' && !literal(key))
|
|
114
118
|
keys.add(key);
|
|
115
119
|
}
|
|
120
|
+
for (const key of route.literals)
|
|
121
|
+
keys.add(key);
|
|
116
122
|
return [...keys];
|
|
117
123
|
}
|
|
118
124
|
/** What the route names of the payload, and nothing else. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Destination.js","sourceRoot":"","sources":["../../source/realtime/Destination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Destination.js","sourceRoot":"","sources":["../../source/realtime/Destination.ts"],"names":[],"mappings":"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"}
|
package/transpiled/service.js
CHANGED
|
@@ -43,6 +43,9 @@ export async function service(host) {
|
|
|
43
43
|
const gateway = new Gateway(broadcast, tree, interception, directives, dispatcher, mcp);
|
|
44
44
|
gateway.depends(remotes);
|
|
45
45
|
gateway.depends(composition);
|
|
46
|
+
// read in the background, and stopped with the gateway
|
|
47
|
+
if (mcp?.manifest != null)
|
|
48
|
+
gateway.depends(mcp.manifest);
|
|
46
49
|
// what the directives meter through; one atom per process, connected once
|
|
47
50
|
gateway.depends(host.atom(ATOM_GROUP));
|
|
48
51
|
server.attach(gateway.process.bind(gateway));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../source/service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../source/service.ts"],"names":[],"mappings":"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"}
|