@procedures/peer 0.2.2 → 0.3.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/CHANGELOG.md +56 -0
- package/README.md +3 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/connection/index.d.ts +3 -2
- package/dist/connection/index.d.ts.map +1 -1
- package/dist/connection/index.js +2 -1
- package/dist/connection/index.js.map +1 -1
- package/dist/discovery/index.d.ts +7 -5
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +30 -42
- package/dist/discovery/index.js.map +1 -1
- package/dist/peer/index.d.ts +16 -3
- package/dist/peer/index.d.ts.map +1 -1
- package/dist/peer/index.js +45 -6
- package/dist/peer/index.js.map +1 -1
- package/dist/procedures/manifest.generate.d.ts.map +1 -1
- package/dist/procedures/manifest.generate.js +11 -34
- package/dist/procedures/manifest.generate.js.map +1 -1
- package/dist/procedures/server.call.d.ts.map +1 -1
- package/dist/procedures/server.call.js +8 -3
- package/dist/procedures/server.call.js.map +1 -1
- package/dist/procedures/server.connect.d.ts.map +1 -1
- package/dist/procedures/server.connect.js +3 -1
- package/dist/procedures/server.connect.js.map +1 -1
- package/dist/procedures/server.create.d.ts.map +1 -1
- package/dist/procedures/server.create.js +6 -4
- package/dist/procedures/server.create.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/connection/index.ts +5 -4
- package/src/discovery/index.ts +38 -43
- package/src/peer/index.ts +70 -7
- package/src/procedures/manifest.generate.ts +11 -34
- package/src/procedures/server.call.ts +8 -3
- package/src/procedures/server.connect.ts +3 -1
- package/src/procedures/server.create.ts +7 -4
- package/src/types.ts +2 -0
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { Client } from "@procedures/client";
|
|
8
8
|
import type { TransportType, PeerConnection } from "../types.js";
|
|
9
|
+
import { type Duration } from "@procedures/client";
|
|
9
10
|
export interface ConnectOptions {
|
|
10
11
|
/** Remote address (URL) */
|
|
11
12
|
address: string;
|
|
12
13
|
/** Transport type (auto-detected from URL if not specified) */
|
|
13
14
|
transport?: TransportType;
|
|
14
|
-
/**
|
|
15
|
-
timeout?:
|
|
15
|
+
/** The time limit of the connection, for example `seconds(10)` */
|
|
16
|
+
timeout?: Duration;
|
|
16
17
|
/** Local peer ID to identify ourselves */
|
|
17
18
|
localPeerId?: string;
|
|
18
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,MAAM,EAMP,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAGf,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,MAAM,EAMP,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAM,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAMvD,MAAM,WAAW,cAAc;IAC7B,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,kEAAkE;IAClE,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,uBAAuB;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AASD;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAgC1E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE1E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C"}
|
package/dist/connection/index.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Uses Client + Transport for bidirectional RPC.
|
|
6
6
|
*/
|
|
7
7
|
import { Client, HttpTransport, WebSocketTransport, defaultUrlPattern, postOnlyStrategy, } from "@procedures/client";
|
|
8
|
+
import { ms } from "@procedures/client";
|
|
8
9
|
// =============================================================================
|
|
9
10
|
// Connection Manager
|
|
10
11
|
// =============================================================================
|
|
@@ -105,7 +106,7 @@ function createClient(address, transport, timeout) {
|
|
|
105
106
|
return new Client({
|
|
106
107
|
transport: new WebSocketTransport({
|
|
107
108
|
url: address,
|
|
108
|
-
connectionTimeout: timeout ?? 10000,
|
|
109
|
+
connectionTimeout: timeout ?? ms(10000),
|
|
109
110
|
reconnect: {
|
|
110
111
|
enabled: true,
|
|
111
112
|
maxAttempts: 3,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connection/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Implements procedure discovery protocol for peers.
|
|
5
5
|
* Peers exchange procedure manifests on connection.
|
|
6
6
|
*/
|
|
7
|
-
import { type Effects, type Procedure } from "@procedures/client";
|
|
7
|
+
import { type Effects, type Procedure, type ProcedureRegistry, type ProcedureRegistryLike, type ProcedureEntry, type ProcedurePath } from "@procedures/client";
|
|
8
8
|
import type { ProcedureInfo, ProcedureAnnounceMessage } from "../types.js";
|
|
9
9
|
interface DiscoveryAnnounceInput {
|
|
10
10
|
/** Optional peer ID of the connecting peer */
|
|
@@ -20,12 +20,14 @@ export declare const discoveryAnnounceProcedure: Procedure<DiscoveryAnnounceInpu
|
|
|
20
20
|
effects: Effects;
|
|
21
21
|
}>;
|
|
22
22
|
/**
|
|
23
|
-
* Get procedure info for all registered procedures
|
|
23
|
+
* Get procedure info for all registered procedures of a registry (default: the global registry)
|
|
24
24
|
*/
|
|
25
|
-
export declare function getProcedureInfos(): ProcedureInfo[];
|
|
25
|
+
export declare function getProcedureInfos(registry?: ProcedureRegistryLike, expose?: (path: ProcedurePath) => boolean): ProcedureInfo[];
|
|
26
|
+
/** The ProcedureInfo of a manifest entry: the form that the peers exchange. */
|
|
27
|
+
export declare function infoOf(entry: ProcedureEntry): ProcedureInfo;
|
|
26
28
|
/**
|
|
27
|
-
* Watch for procedure changes
|
|
29
|
+
* Watch for procedure changes in a registry (default: the global registry)
|
|
28
30
|
*/
|
|
29
|
-
export declare function watchProcedures(callback: (event: "register" | "unregister", info: ProcedureInfo) => void): () => void;
|
|
31
|
+
export declare function watchProcedures(callback: (event: "register" | "unregister", info: ProcedureInfo) => void, registry?: ProcedureRegistry): () => void;
|
|
30
32
|
export {};
|
|
31
33
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,SAAS,EAEd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAK1B,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EACV,aAAa,EACb,wBAAwB,EACzB,MAAM,aAAa,CAAC;AAMrB,UAAU,sBAAsB;IAC9B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,SAAS,CAChD,sBAAsB,EACtB,wBAAwB,EACxB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA6BpD,CAAC;AAMX;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,GAAE,qBAA0C,EACpD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,GACxC,aAAa,EAAE,CAGjB;AAED,+EAA+E;AAC/E,wBAAgB,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,CAM3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,EACzE,QAAQ,GAAE,iBAAsC,GAC/C,MAAM,IAAI,CAuBZ"}
|
package/dist/discovery/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Implements procedure discovery protocol for peers.
|
|
5
5
|
* Peers exchange procedure manifests on connection.
|
|
6
6
|
*/
|
|
7
|
-
import { createProcedure, PROCEDURE_REGISTRY, REGISTRY_READ_EFFECTS, } from "@procedures/client";
|
|
7
|
+
import { createProcedure, PROCEDURE_REGISTRY, REGISTRY_READ_EFFECTS, describeRegistry, } from "@procedures/client";
|
|
8
8
|
import { schema } from "../schema.js";
|
|
9
9
|
// =============================================================================
|
|
10
10
|
// Discovery Procedure
|
|
@@ -24,27 +24,15 @@ export const discoveryAnnounceProcedure = createProcedure()
|
|
|
24
24
|
internal: true,
|
|
25
25
|
effects: REGISTRY_READ_EFFECTS,
|
|
26
26
|
})
|
|
27
|
-
.handler(async (_input) => {
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const meta = proc.metadata;
|
|
35
|
-
return !meta?.internal;
|
|
36
|
-
})
|
|
37
|
-
.map((proc) => {
|
|
38
|
-
const meta = proc.metadata;
|
|
39
|
-
const info = {
|
|
40
|
-
path: proc.path,
|
|
41
|
-
};
|
|
42
|
-
if (meta?.description !== undefined) {
|
|
43
|
-
info.description = meta.description;
|
|
44
|
-
}
|
|
45
|
-
// TODO: Generate JSON schema from input/output schemas
|
|
46
|
-
return info;
|
|
27
|
+
.handler(async (_input, ctx) => {
|
|
28
|
+
// The one manifest of the core (roadmap R17): the procedures of the registry that serves this
|
|
29
|
+
// call and that the host exposes, with their JSON Schemas, without the internal ones.
|
|
30
|
+
// Before, the announce gave no schemas and listed the procedures that the host hides.
|
|
31
|
+
const manifest = describeRegistry(ctx?.registry ?? PROCEDURE_REGISTRY, {
|
|
32
|
+
...(ctx?.expose ? { expose: ctx.expose } : {}),
|
|
33
|
+
include: (proc) => !proc.metadata?.internal,
|
|
47
34
|
});
|
|
35
|
+
const procedureInfos = manifest.procedures.map(infoOf);
|
|
48
36
|
// Generate a peer ID based on process (could be configured)
|
|
49
37
|
const peerId = `peer-${process.pid}-${Date.now().toString(36)}`;
|
|
50
38
|
return {
|
|
@@ -58,27 +46,27 @@ export const discoveryAnnounceProcedure = createProcedure()
|
|
|
58
46
|
// Utility Functions
|
|
59
47
|
// =============================================================================
|
|
60
48
|
/**
|
|
61
|
-
* Get procedure info for all registered procedures
|
|
49
|
+
* Get procedure info for all registered procedures of a registry (default: the global registry)
|
|
62
50
|
*/
|
|
63
|
-
export function getProcedureInfos() {
|
|
64
|
-
|
|
65
|
-
return procedures
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
51
|
+
export function getProcedureInfos(registry = PROCEDURE_REGISTRY, expose) {
|
|
52
|
+
// The one manifest of the core (roadmap R17), without the schemas
|
|
53
|
+
return describeRegistry(registry, { schemas: false, ...(expose ? { expose } : {}) }).procedures.map(infoOf);
|
|
54
|
+
}
|
|
55
|
+
/** The ProcedureInfo of a manifest entry: the form that the peers exchange. */
|
|
56
|
+
export function infoOf(entry) {
|
|
57
|
+
const info = { path: [...entry.path] };
|
|
58
|
+
if (entry.description !== undefined)
|
|
59
|
+
info.description = entry.description;
|
|
60
|
+
if (entry.input)
|
|
61
|
+
info.inputSchema = entry.input;
|
|
62
|
+
if (entry.output)
|
|
63
|
+
info.outputSchema = entry.output;
|
|
64
|
+
return info;
|
|
77
65
|
}
|
|
78
66
|
/**
|
|
79
|
-
* Watch for procedure changes
|
|
67
|
+
* Watch for procedure changes in a registry (default: the global registry)
|
|
80
68
|
*/
|
|
81
|
-
export function watchProcedures(callback) {
|
|
69
|
+
export function watchProcedures(callback, registry = PROCEDURE_REGISTRY) {
|
|
82
70
|
const createHandler = (eventType) => {
|
|
83
71
|
return (proc) => {
|
|
84
72
|
const info = {
|
|
@@ -92,11 +80,11 @@ export function watchProcedures(callback) {
|
|
|
92
80
|
};
|
|
93
81
|
const registerHandler = createHandler("register");
|
|
94
82
|
const unregisterHandler = createHandler("unregister");
|
|
95
|
-
|
|
96
|
-
|
|
83
|
+
registry.on("register", registerHandler);
|
|
84
|
+
registry.on("unregister", unregisterHandler);
|
|
97
85
|
return () => {
|
|
98
|
-
|
|
99
|
-
|
|
86
|
+
registry.off("register", registerHandler);
|
|
87
|
+
registry.off("unregister", unregisterHandler);
|
|
100
88
|
};
|
|
101
89
|
}
|
|
102
90
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"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"}
|
package/dist/peer/index.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Transport-agnostic peer implementation for bidirectional RPC.
|
|
5
5
|
*/
|
|
6
|
-
import { ProcedureServer, type ProcedureRegistry, type HostPolicy } from "@procedures/client";
|
|
7
|
-
import type { ProcedurePath } from "@procedures/client";
|
|
6
|
+
import { ProcedureServer, type ProcedureRegistry, Client, type HostPolicy } from "@procedures/client";
|
|
7
|
+
import type { ProcedurePath, StopOptions } from "@procedures/client";
|
|
8
8
|
import type { TransportConfig, TransportType } from "../types.js";
|
|
9
9
|
export interface PeerOptions {
|
|
10
10
|
/** Unique peer ID */
|
|
@@ -17,6 +17,11 @@ export interface PeerOptions {
|
|
|
17
17
|
registry?: ProcedureRegistry;
|
|
18
18
|
/** The procedures that the peer serves (see `exposeRule`). Without it, the peer serves every procedure. */
|
|
19
19
|
expose?: ((path: ProcedurePath) => boolean) | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* The peer counts the calls of each procedure, and `host.metrics` gives the counts (roadmap
|
|
22
|
+
* R19). The default is true.
|
|
23
|
+
*/
|
|
24
|
+
metrics?: boolean | undefined;
|
|
20
25
|
/**
|
|
21
26
|
* The policy of the host (`hostPolicy()` of the core, roadmap 2.3): the expose rule, the call
|
|
22
27
|
* rule, the interceptors (a time limit), the token of each network transport that has none of
|
|
@@ -34,11 +39,19 @@ export interface Peer {
|
|
|
34
39
|
/** Start all transports */
|
|
35
40
|
start(): Promise<void>;
|
|
36
41
|
/** Stop all transports */
|
|
37
|
-
|
|
42
|
+
/** Stop the peer. With `grace`, the calls in flight have that time to end (roadmap R14). */
|
|
43
|
+
stop(options?: StopOptions): Promise<void>;
|
|
38
44
|
/** Get active endpoints */
|
|
39
45
|
getEndpoints(): PeerEndpoint[];
|
|
40
46
|
/** Get underlying server */
|
|
41
47
|
getServer(): ProcedureServer;
|
|
48
|
+
/** The ids of the WebSocket connections of the clients (roadmap R24). */
|
|
49
|
+
connections(): string[];
|
|
50
|
+
/**
|
|
51
|
+
* A client of one connected client (roadmap R24): its calls go to the procedures that the client
|
|
52
|
+
* serves (the `serve` option of its WebSocketTransport), over the same WebSocket.
|
|
53
|
+
*/
|
|
54
|
+
clientFor(connectionId: string): Client;
|
|
42
55
|
}
|
|
43
56
|
/**
|
|
44
57
|
* Create a new peer instance
|
package/dist/peer/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/peer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EAGf,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/peer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EAGf,KAAK,iBAAiB,EAQtB,MAAM,EAEN,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAuB,eAAe,EAAE,aAAa,EAA4B,MAAM,aAAa,CAAC;AA0BjH,MAAM,WAAW,WAAW;IAC1B,qBAAqB;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,6CAA6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,2GAA2G;IAC3G,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACxD;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,IAAI;IACnB,cAAc;IACd,EAAE,EAAE,MAAM,CAAC;IACX,2BAA2B;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,0BAA0B;IAC1B,4FAA4F;IAC5F,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,2BAA2B;IAC3B,YAAY,IAAI,YAAY,EAAE,CAAC;IAC/B,4BAA4B;IAC5B,SAAS,IAAI,eAAe,CAAC;IAC7B,yEAAyE;IACzE,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;CACzC;AA2RD;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
|
package/dist/peer/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Transport-agnostic peer implementation for bidirectional RPC.
|
|
5
5
|
*/
|
|
6
|
-
import { ProcedureServer, HttpServerTransport, WebSocketServerTransport, PROCEDURE_REGISTRY, rpcServerUrlStrategy, defaultServerUrlStrategy, defaultUrlPattern, procedureServerOptions, } from "@procedures/client";
|
|
6
|
+
import { ProcedureServer, HttpServerTransport, WebSocketServerTransport, PROCEDURE_REGISTRY, rpcServerUrlStrategy, defaultServerUrlStrategy, defaultUrlPattern, procedureServerOptions, hostProcedures, metricsInterceptor, Client, } from "@procedures/client";
|
|
7
7
|
import { bearerToken, hostAllowed, originAllowed, tokenMatches } from "./security.js";
|
|
8
8
|
/**
|
|
9
9
|
* URL strategy that matches the client's defaultUrlPattern
|
|
@@ -30,6 +30,10 @@ class PeerImpl {
|
|
|
30
30
|
transports;
|
|
31
31
|
endpoints = [];
|
|
32
32
|
started = false;
|
|
33
|
+
/** The WebSocket transports of the peer: the calls to its clients go over them (R24) */
|
|
34
|
+
wsTransports = [];
|
|
35
|
+
/** The HTTP servers that the peer made for its WebSocket transports: `stop()` closes them */
|
|
36
|
+
ownedServers = [];
|
|
33
37
|
registry;
|
|
34
38
|
startTime = Date.now();
|
|
35
39
|
/** The browser checks of the policy (an origin rule here replaces the peer's own rule). */
|
|
@@ -43,13 +47,25 @@ class PeerImpl {
|
|
|
43
47
|
: { ...transport, token: policy.token });
|
|
44
48
|
this.registry = options.registry ?? PROCEDURE_REGISTRY;
|
|
45
49
|
this.browser = policy?.browser ?? {};
|
|
46
|
-
// Create procedure server
|
|
50
|
+
// Create procedure server. The metrics interceptor counts each call for host.metrics (R19).
|
|
51
|
+
const metrics = options.metrics === false ? undefined : metricsInterceptor();
|
|
52
|
+
const serverOptions = policy ? procedureServerOptions(policy, this.registry) : {};
|
|
53
|
+
const interceptors = [...(serverOptions.interceptors ?? []), ...(metrics ? [metrics.interceptor] : [])];
|
|
47
54
|
this.server = new ProcedureServer({
|
|
48
|
-
...
|
|
55
|
+
...serverOptions,
|
|
56
|
+
...(interceptors.length > 0 ? { interceptors } : {}),
|
|
49
57
|
autoRegister: options.autoRegister ?? true,
|
|
50
58
|
registry: this.registry,
|
|
51
59
|
...(options.expose ? { expose: options.expose } : {}),
|
|
52
60
|
});
|
|
61
|
+
// host.health, host.info and host.metrics: pinned on the server, not in the registry (R19)
|
|
62
|
+
this.server.registerProcedures(hostProcedures({
|
|
63
|
+
id: this.id,
|
|
64
|
+
startedAt: this.startTime,
|
|
65
|
+
server: this.server,
|
|
66
|
+
endpoints: () => this.getEndpoints(),
|
|
67
|
+
...(metrics ? { metrics } : {}),
|
|
68
|
+
}));
|
|
53
69
|
}
|
|
54
70
|
async start() {
|
|
55
71
|
if (this.started)
|
|
@@ -88,7 +104,9 @@ class PeerImpl {
|
|
|
88
104
|
// Dynamic import to avoid bundling express if not used
|
|
89
105
|
const express = (await import("express")).default;
|
|
90
106
|
const app = express();
|
|
91
|
-
|
|
107
|
+
// No body parser here: the transport reads the body itself, with bodyLimit, and accepts each
|
|
108
|
+
// JSON value (roadmap R5). Before, the strict parser of express refused a bare value (a
|
|
109
|
+
// number, a string, null) with 400, and its limit of 100 kB replaced bodyLimit.
|
|
92
110
|
const port = config.port ?? 3000;
|
|
93
111
|
// Loopback by default so the full procedure registry (incl. shell.run / fs.write) is not
|
|
94
112
|
// served unauthenticated on all interfaces. Pass host: "0.0.0.0" to expose on the LAN
|
|
@@ -149,6 +167,7 @@ class PeerImpl {
|
|
|
149
167
|
allowedOrigins: this.browser.allowedOrigins ?? ((origin) => originAllowed(origin, config.corsOrigins)),
|
|
150
168
|
...(this.browser.allowedHosts ? { allowedHosts: this.browser.allowedHosts } : {}),
|
|
151
169
|
allowGet: this.browser.allowGet ?? config.urlStrategy === "rest",
|
|
170
|
+
...(config.bodyLimit !== undefined ? { bodyLimit: config.bodyLimit } : {}),
|
|
152
171
|
});
|
|
153
172
|
this.server.addTransport(httpTransport);
|
|
154
173
|
await httpTransport.start();
|
|
@@ -203,17 +222,28 @@ class PeerImpl {
|
|
|
203
222
|
httpServer.close();
|
|
204
223
|
throw error;
|
|
205
224
|
}
|
|
225
|
+
this.ownedServers.push(httpServer);
|
|
226
|
+
this.wsTransports.push(wsTransport);
|
|
206
227
|
this.endpoints.push({
|
|
207
228
|
type: "websocket",
|
|
208
229
|
address: `ws://${host === "0.0.0.0" ? "localhost" : host}:${port}${path}`,
|
|
209
230
|
});
|
|
210
231
|
}
|
|
211
|
-
async stop() {
|
|
232
|
+
async stop(options = {}) {
|
|
212
233
|
if (!this.started)
|
|
213
234
|
return;
|
|
214
|
-
await this.server.stop();
|
|
235
|
+
await this.server.stop(options);
|
|
236
|
+
// The HTTP servers of the WebSocket transports: before, they stayed open, so the port stayed
|
|
237
|
+
// bound after stop() (roadmap R5)
|
|
238
|
+
const owned = this.ownedServers;
|
|
239
|
+
this.ownedServers = [];
|
|
240
|
+
await Promise.all(owned.map((httpServer) => new Promise((resolve) => {
|
|
241
|
+
httpServer.close(() => resolve());
|
|
242
|
+
httpServer.closeAllConnections();
|
|
243
|
+
})));
|
|
215
244
|
this.started = false;
|
|
216
245
|
this.endpoints = [];
|
|
246
|
+
this.wsTransports = [];
|
|
217
247
|
}
|
|
218
248
|
getEndpoints() {
|
|
219
249
|
return [...this.endpoints];
|
|
@@ -221,6 +251,15 @@ class PeerImpl {
|
|
|
221
251
|
getServer() {
|
|
222
252
|
return this.server;
|
|
223
253
|
}
|
|
254
|
+
connections() {
|
|
255
|
+
return this.wsTransports.flatMap((transport) => transport.getTrackedConnections().map((connection) => connection.id));
|
|
256
|
+
}
|
|
257
|
+
clientFor(connectionId) {
|
|
258
|
+
const transport = this.wsTransports.find((ws) => ws.getTrackedConnection(connectionId) !== undefined);
|
|
259
|
+
if (!transport)
|
|
260
|
+
throw new Error(`Connection not found: ${connectionId}`);
|
|
261
|
+
return new Client({ transport: transport.transportFor(connectionId), throwOnError: true });
|
|
262
|
+
}
|
|
224
263
|
}
|
|
225
264
|
// =============================================================================
|
|
226
265
|
// Factory
|
package/dist/peer/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/peer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EAExB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/peer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.generate.d.ts","sourceRoot":"","sources":["../../src/procedures/manifest.generate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"manifest.generate.d.ts","sourceRoot":"","sources":["../../src/procedures/manifest.generate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAwD,KAAK,OAAO,EAAE,KAAK,SAAS,EAA6C,MAAM,oBAAoB,CAAC;AAKnK,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAiB,MAAM,aAAa,CAAC;AAShG,eAAO,MAAM,yBAAyB,EAAE,SAAS,CAC/C,qBAAqB,EACrB,sBAAsB,EACtB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA0DjC,CAAC;AAaX,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Procedure: manifest.generate
|
|
3
3
|
* Generates procedure manifests in various formats
|
|
4
4
|
*/
|
|
5
|
-
import { createProcedure,
|
|
5
|
+
import { createProcedure, describeRegistry, PROCEDURE_REGISTRY } from "@procedures/client";
|
|
6
|
+
import { infoOf } from "../discovery/index.js";
|
|
6
7
|
import { wrapSchema } from "../schema.js";
|
|
7
8
|
import { ManifestGenerateOutputSchema } from "../output-schemas.js";
|
|
8
9
|
import { manifestGenerateInputSchema } from "../input-schemas.js";
|
|
@@ -21,40 +22,16 @@ export const manifestGenerateProcedure = createProcedure()
|
|
|
21
22
|
// With `outputDir`, it overwrites procedures.json and procedures.d.ts there
|
|
22
23
|
effects: { reads: ["registry"], writes: ["fs"], idempotent: true },
|
|
23
24
|
})
|
|
24
|
-
.handler(async (input) => {
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
for (let i = 0; i < input.namespace.length; i++) {
|
|
33
|
-
if (proc.path[i] !== input.namespace[i]) {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return true;
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
// Convert to ProcedureInfo format
|
|
41
|
-
const procedureInfos = procedures.map((proc) => {
|
|
42
|
-
const meta = proc.metadata;
|
|
43
|
-
const info = {
|
|
44
|
-
path: proc.path,
|
|
45
|
-
};
|
|
46
|
-
if (meta?.description !== undefined) {
|
|
47
|
-
info.description = meta.description;
|
|
48
|
-
}
|
|
49
|
-
// The JSON Schemas of the input and the output, when the schemas can describe themselves
|
|
50
|
-
const inputSchema = jsonSchemaOf(proc.input, { io: "input" });
|
|
51
|
-
const outputSchema = jsonSchemaOf(proc.output, { io: "output" });
|
|
52
|
-
if (inputSchema)
|
|
53
|
-
info.inputSchema = inputSchema;
|
|
54
|
-
if (outputSchema)
|
|
55
|
-
info.outputSchema = outputSchema;
|
|
56
|
-
return info;
|
|
25
|
+
.handler(async (input, ctx) => {
|
|
26
|
+
// The one manifest of the core (roadmap R17): the procedures that the host exposes, with
|
|
27
|
+
// their JSON Schemas, under the namespace when the input gives one
|
|
28
|
+
const namespace = input.namespace ?? [];
|
|
29
|
+
const manifest = describeRegistry(ctx?.registry ?? PROCEDURE_REGISTRY, {
|
|
30
|
+
...(ctx?.expose ? { expose: ctx.expose } : {}),
|
|
31
|
+
withoutHandler: true,
|
|
32
|
+
include: (proc) => namespace.every((segment, index) => proc.path[index] === segment),
|
|
57
33
|
});
|
|
34
|
+
const procedureInfos = manifest.procedures.map(infoOf);
|
|
58
35
|
// Determine formats to generate
|
|
59
36
|
const formats = input.formats ?? ["json"];
|
|
60
37
|
const result = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.generate.js","sourceRoot":"","sources":["../../src/procedures/manifest.generate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"manifest.generate.js","sourceRoot":"","sources":["../../src/procedures/manifest.generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.call.d.ts","sourceRoot":"","sources":["../../src/procedures/server.call.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"server.call.d.ts","sourceRoot":"","sources":["../../src/procedures/server.call.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAuD,KAAK,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,oBAAoB,CAAC;AAU9I,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,wEAAwE;IACxE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAQD,eAAO,MAAM,mBAAmB,EAAE,SAAS,CACzC,eAAe,EACf,gBAAgB,EAChB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA0DjG,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Procedure: server.call
|
|
3
3
|
* Call a procedure on a remote peer through an outbound connection
|
|
4
4
|
*/
|
|
5
|
-
import { createProcedure, pathToMethod } from "@procedures/client";
|
|
5
|
+
import { TIMEOUT_METADATA_KEY, createProcedure, pathToMethod } from "@procedures/client";
|
|
6
6
|
import { wrapSchema } from "../schema.js";
|
|
7
7
|
import { ServerCallOutputSchema } from "../output-schemas.js";
|
|
8
8
|
import { serverCallInputSchema } from "../input-schemas.js";
|
|
@@ -23,7 +23,7 @@ export const serverCallProcedure = createProcedure()
|
|
|
23
23
|
shorts: { connectionId: "c", address: "a" },
|
|
24
24
|
output: "json",
|
|
25
25
|
})
|
|
26
|
-
.handler(async (input) => {
|
|
26
|
+
.handler(async (input, ctx) => {
|
|
27
27
|
// Normalize path: accept dot-separated string or array
|
|
28
28
|
const pathArray = typeof input.path === "string"
|
|
29
29
|
? input.path.split(".")
|
|
@@ -51,7 +51,12 @@ export const serverCallProcedure = createProcedure()
|
|
|
51
51
|
// Convert procedure path to Method format for client.call: the core mapping of every host
|
|
52
52
|
// (deep dive architecture review 3.3)
|
|
53
53
|
const method = pathToMethod(pathArray);
|
|
54
|
-
|
|
54
|
+
// The signal and the remaining time of this call go with the relayed call (roadmap R14)
|
|
55
|
+
const deadline = ctx?.capability?.deadline;
|
|
56
|
+
const result = await client.call(method, input.input ?? {}, {
|
|
57
|
+
...(ctx?.signal ? { signal: ctx.signal } : {}),
|
|
58
|
+
...(deadline !== undefined ? { context: { [TIMEOUT_METADATA_KEY]: Math.max(0, deadline - Date.now()) } } : {}),
|
|
59
|
+
});
|
|
55
60
|
return {
|
|
56
61
|
result,
|
|
57
62
|
connectionId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.call.js","sourceRoot":"","sources":["../../src/procedures/server.call.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"server.call.js","sourceRoot":"","sources":["../../src/procedures/server.call.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,EAAuD,MAAM,oBAAoB,CAAC;AAC9I,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AA0BhE,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,sBAAsB,GAAG,UAAU,CAAmB,sBAAsB,CAAC,CAAC;AAEpF,MAAM,CAAC,MAAM,mBAAmB,GAI5B,eAAe,EAAE;KAClB,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KACxB,KAAK,CAAC,qBAAqB,CAAC;KAC5B,MAAM,CAAC,sBAAsB,CAAC;KAC9B,IAAI,CAAC;IACJ,WAAW,EAAE,kEAAkE;IAC/E,uDAAuD;IACvD,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;IACpD,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;IAC3C,MAAM,EAAE,MAAM;CACf,CAAC;KACD,OAAO,CAAC,KAAK,EAAE,KAAsB,EAAE,GAAsB,EAA6B,EAAE;IAC3F,uDAAuD;IACvD,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9C,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACvB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAEf,6DAA6D;IAC7D,IAAI,YAAoB,CAAC;IACzB,IAAI,MAA2C,CAAC;IAEhD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,CAAC,YAAY,kDAAkD,CAC9F,CAAC;QACJ,CAAC;QACD,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC7B,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,iCAAiC;QACjC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,0FAA0F;IAC1F,sCAAsC;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAEvC,wFAAwF;IACxF,MAAM,QAAQ,GAAG,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAC1D,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/G,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,YAAY;QACZ,IAAI,EAAE,SAAS;KAChB,CAAC;AACJ,CAAC,CAAC;KACD,KAAK,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.connect.d.ts","sourceRoot":"","sources":["../../src/procedures/server.connect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmB,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAInF,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.connect.d.ts","sourceRoot":"","sources":["../../src/procedures/server.connect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmB,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAInF,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAO3E,eAAO,MAAM,sBAAsB,EAAE,SAAS,CAC5C,kBAAkB,EAClB,mBAAmB,EACnB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA8BjC,CAAC;AAEX,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { wrapSchema } from "../schema.js";
|
|
|
7
7
|
import { ServerConnectOutputSchema } from "../output-schemas.js";
|
|
8
8
|
import { serverConnectInputSchema } from "../input-schemas.js";
|
|
9
9
|
import { connect } from "../connection/index.js";
|
|
10
|
+
import { ms } from "@procedures/client";
|
|
10
11
|
// Use pass-through schemas
|
|
11
12
|
const serverConnectOutputSchema = wrapSchema(ServerConnectOutputSchema);
|
|
12
13
|
export const serverConnectProcedure = createProcedure()
|
|
@@ -27,7 +28,8 @@ export const serverConnectProcedure = createProcedure()
|
|
|
27
28
|
connectOptions.transport = input.transport;
|
|
28
29
|
}
|
|
29
30
|
if (input.timeout !== undefined) {
|
|
30
|
-
|
|
31
|
+
// The input is data: a number of milliseconds
|
|
32
|
+
connectOptions.timeout = ms(input.timeout);
|
|
31
33
|
}
|
|
32
34
|
const connection = await connect(connectOptions);
|
|
33
35
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.connect.js","sourceRoot":"","sources":["../../src/procedures/server.connect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAgC,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.connect.js","sourceRoot":"","sources":["../../src/procedures/server.connect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAgC,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,2BAA2B;AAC3B,MAAM,yBAAyB,GAAG,UAAU,CAAsB,yBAAyB,CAAC,CAAC;AAE7F,MAAM,CAAC,MAAM,sBAAsB,GAI/B,eAAe,EAAE;KAClB,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;KAC3B,KAAK,CAAC,wBAAwB,CAAC;KAC/B,MAAM,CAAC,yBAAyB,CAAC;KACjC,IAAI,CAAC;IACJ,WAAW,EAAE,gDAAgD;IAC7D,mFAAmF;IACnF,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE;IACxE,IAAI,EAAE,CAAC,SAAS,CAAC;CAClB,CAAC;KACD,OAAO,CAAC,KAAK,EAAE,KAAyB,EAAE,EAAE;IAC3C,MAAM,cAAc,GAAkC;QACpD,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;IACF,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,cAAc,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,8CAA8C;QAC9C,cAAc,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IAEjD,OAAO;QACL,YAAY,EAAE,UAAU,CAAC,EAAE;QAC3B,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY;QAC5C,gBAAgB,EAAE,UAAU,CAAC,MAAM,CAAC,gBAAgB;KACrD,CAAC;AACJ,CAAC,CAAC;KACD,KAAK,EAAE,CAAC"}
|