@comapeo/ipc 6.1.0 → 6.2.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/dist/client.d.ts +20 -0
- package/dist/client.js +27 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/lib/sub-channel.d.ts +1 -0
- package/dist/lib/sub-channel.js +1 -0
- package/dist/server.d.ts +28 -0
- package/dist/server.js +25 -1
- package/package.json +2 -1
package/dist/client.d.ts
CHANGED
|
@@ -10,6 +10,26 @@ export function createMapeoClient(messagePort: import("./lib/sub-channel.js").Me
|
|
|
10
10
|
* @returns {Promise<void>}
|
|
11
11
|
*/
|
|
12
12
|
export function closeMapeoClient(client: MapeoClientApi): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {import('rpc-reflector/client.js').ClientApi<import('./server.js').RpcApi>} AppRpcApi
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Create an rpc client for application RPC messages that are not part of core,
|
|
18
|
+
* e.g. the different servers for maps, and in the future for serving blobs and
|
|
19
|
+
* icons (once extracted from core)
|
|
20
|
+
*
|
|
21
|
+
* @param {import('./lib/sub-channel.js').MessagePortLike} messagePort
|
|
22
|
+
* @param {Parameters<typeof createClient>[1]} [opts]
|
|
23
|
+
* @return {AppRpcApi}
|
|
24
|
+
*/
|
|
25
|
+
export function createAppRpcClient(messagePort: import("./lib/sub-channel.js").MessagePortLike, opts?: Parameters<typeof createClient>[1]): AppRpcApi;
|
|
26
|
+
/**
|
|
27
|
+
* Close the app RPC client (removes listeners but does not close the message port)
|
|
28
|
+
*
|
|
29
|
+
* @param {AppRpcApi} appRpcClient client created with `createAppRpcClient`
|
|
30
|
+
*/
|
|
31
|
+
export function closeAppRpcClient(appRpcClient: AppRpcApi): void;
|
|
32
|
+
export type AppRpcApi = import("rpc-reflector/client.js").ClientApi<import("./server.js").RpcApi>;
|
|
13
33
|
export type MapeoProjectApi = import("rpc-reflector/client.js").ClientApi<import("@comapeo/core").MapeoProject>;
|
|
14
34
|
export type MapeoClientApi = import("rpc-reflector/client.js").ClientApi<Omit<import("@comapeo/core").MapeoManager, "getProject"> & {
|
|
15
35
|
getProject: (projectPublicId: string) => Promise<MapeoProjectApi>;
|
package/dist/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createClient } from 'rpc-reflector/client.js';
|
|
2
2
|
import pDefer from 'p-defer';
|
|
3
|
-
import { MANAGER_CHANNEL_ID, MAPEO_RPC_ID, SubChannel, } from './lib/sub-channel.js';
|
|
3
|
+
import { APP_RPC_ID, MANAGER_CHANNEL_ID, MAPEO_RPC_ID, SubChannel, } from './lib/sub-channel.js';
|
|
4
4
|
/**
|
|
5
5
|
* @typedef {import('rpc-reflector/client.js').ClientApi<import('@comapeo/core').MapeoProject>} MapeoProjectApi
|
|
6
6
|
*/
|
|
@@ -87,3 +87,29 @@ export async function closeMapeoClient(client) {
|
|
|
87
87
|
// @ts-expect-error
|
|
88
88
|
return client[CLOSE]();
|
|
89
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* @typedef {import('rpc-reflector/client.js').ClientApi<import('./server.js').RpcApi>} AppRpcApi
|
|
92
|
+
*/
|
|
93
|
+
/**
|
|
94
|
+
* Create an rpc client for application RPC messages that are not part of core,
|
|
95
|
+
* e.g. the different servers for maps, and in the future for serving blobs and
|
|
96
|
+
* icons (once extracted from core)
|
|
97
|
+
*
|
|
98
|
+
* @param {import('./lib/sub-channel.js').MessagePortLike} messagePort
|
|
99
|
+
* @param {Parameters<typeof createClient>[1]} [opts]
|
|
100
|
+
* @return {AppRpcApi}
|
|
101
|
+
*/
|
|
102
|
+
export function createAppRpcClient(messagePort, opts = {}) {
|
|
103
|
+
const appRpcChannel = new SubChannel(messagePort, APP_RPC_ID);
|
|
104
|
+
const appRpcClient = /** @type {AppRpcApi} */ (createClient(appRpcChannel, opts));
|
|
105
|
+
appRpcChannel.start();
|
|
106
|
+
return appRpcClient;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Close the app RPC client (removes listeners but does not close the message port)
|
|
110
|
+
*
|
|
111
|
+
* @param {AppRpcApi} appRpcClient client created with `createAppRpcClient`
|
|
112
|
+
*/
|
|
113
|
+
export function closeAppRpcClient(appRpcClient) {
|
|
114
|
+
createClient.close(appRpcClient);
|
|
115
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { createMapeoServer } from "./server.js";
|
|
2
1
|
export type MapeoClientApi = import("./client.js").MapeoClientApi;
|
|
3
2
|
export type MapeoProjectApi = import("./client.js").MapeoProjectApi;
|
|
4
|
-
export
|
|
3
|
+
export type AppRpcApi = import("./client.js").AppRpcApi;
|
|
4
|
+
export { createMapeoClient, closeMapeoClient, createAppRpcClient, closeAppRpcClient } from "./client.js";
|
|
5
|
+
export { createMapeoServer, createAppRpcServer } from "./server.js";
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { createMapeoClient, closeMapeoClient } from './client.js';
|
|
2
|
-
export { createMapeoServer } from './server.js';
|
|
1
|
+
export { createMapeoClient, closeMapeoClient, createAppRpcClient, closeAppRpcClient, } from './client.js';
|
|
2
|
+
export { createMapeoServer, createAppRpcServer } from './server.js';
|
|
3
3
|
/** @typedef {import('./client.js').MapeoClientApi} MapeoClientApi */
|
|
4
4
|
/** @typedef {import('./client.js').MapeoProjectApi} MapeoProjectApi */
|
|
5
|
+
/** @typedef {import('./client.js').AppRpcApi} AppRpcApi */
|
package/dist/lib/sub-channel.js
CHANGED
|
@@ -2,6 +2,7 @@ import { EventEmitter } from 'eventemitter3';
|
|
|
2
2
|
import { extractMessageEventData } from './utils.js';
|
|
3
3
|
// Ideally unique ID used for identifying "global" Mapeo IPC messages
|
|
4
4
|
export const MAPEO_RPC_ID = '@@mapeo-rpc';
|
|
5
|
+
export const APP_RPC_ID = '@@app-rpc';
|
|
5
6
|
export const MANAGER_CHANNEL_ID = '@@manager';
|
|
6
7
|
/**
|
|
7
8
|
* @typedef {Object} Events
|
package/dist/server.d.ts
CHANGED
|
@@ -6,6 +6,22 @@
|
|
|
6
6
|
export function createMapeoServer(manager: import("@comapeo/core").MapeoManager, messagePort: import("./lib/sub-channel.js").MessagePortLike, opts?: Parameters<typeof createServer>[2]): {
|
|
7
7
|
close(): void;
|
|
8
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* @typedef {object} RpcApi
|
|
11
|
+
* @property {object} mapServer
|
|
12
|
+
* @property {(options?: { localPort?: number, remotePort?: number }) => Promise<{ localPort: number, remotePort: number }>} mapServer.listen
|
|
13
|
+
* @property {() => Promise<void>} mapServer.close
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* RPC messages that are not part of core, e.g. the different servers for maps,
|
|
17
|
+
* and in the future for serving blobs and icons (once extracted from core)
|
|
18
|
+
* @param {RpcApi} rpc
|
|
19
|
+
* @param {import('./lib/sub-channel.js').MessagePortLike} messagePort
|
|
20
|
+
* @param {Parameters<typeof createServer>[2]} [opts]
|
|
21
|
+
*/
|
|
22
|
+
export function createAppRpcServer(rpc: RpcApi, messagePort: import("./lib/sub-channel.js").MessagePortLike, opts?: Parameters<typeof createServer>[2]): {
|
|
23
|
+
close(): void;
|
|
24
|
+
};
|
|
9
25
|
export class MapeoRpcApi {
|
|
10
26
|
/**
|
|
11
27
|
* @param {import('@comapeo/core').MapeoManager} manager
|
|
@@ -18,4 +34,16 @@ export class MapeoRpcApi {
|
|
|
18
34
|
assertProjectExists(projectId: string): Promise<boolean>;
|
|
19
35
|
#private;
|
|
20
36
|
}
|
|
37
|
+
export type RpcApi = {
|
|
38
|
+
mapServer: {
|
|
39
|
+
listen: (options?: {
|
|
40
|
+
localPort?: number;
|
|
41
|
+
remotePort?: number;
|
|
42
|
+
}) => Promise<{
|
|
43
|
+
localPort: number;
|
|
44
|
+
remotePort: number;
|
|
45
|
+
}>;
|
|
46
|
+
close: () => Promise<void>;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
21
49
|
import { createServer } from 'rpc-reflector/server.js';
|
package/dist/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createServer } from 'rpc-reflector/server.js';
|
|
2
|
-
import { MANAGER_CHANNEL_ID, MAPEO_RPC_ID, SubChannel, } from './lib/sub-channel.js';
|
|
2
|
+
import { APP_RPC_ID, MANAGER_CHANNEL_ID, MAPEO_RPC_ID, SubChannel, } from './lib/sub-channel.js';
|
|
3
3
|
import { extractMessageEventData } from './lib/utils.js';
|
|
4
4
|
/**
|
|
5
5
|
* @param {import('@comapeo/core').MapeoManager} manager
|
|
@@ -92,3 +92,27 @@ export class MapeoRpcApi {
|
|
|
92
92
|
return !!project;
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* @typedef {object} RpcApi
|
|
97
|
+
* @property {object} mapServer
|
|
98
|
+
* @property {(options?: { localPort?: number, remotePort?: number }) => Promise<{ localPort: number, remotePort: number }>} mapServer.listen
|
|
99
|
+
* @property {() => Promise<void>} mapServer.close
|
|
100
|
+
*/
|
|
101
|
+
/**
|
|
102
|
+
* RPC messages that are not part of core, e.g. the different servers for maps,
|
|
103
|
+
* and in the future for serving blobs and icons (once extracted from core)
|
|
104
|
+
* @param {RpcApi} rpc
|
|
105
|
+
* @param {import('./lib/sub-channel.js').MessagePortLike} messagePort
|
|
106
|
+
* @param {Parameters<typeof createServer>[2]} [opts]
|
|
107
|
+
*/
|
|
108
|
+
export function createAppRpcServer(rpc, messagePort, opts) {
|
|
109
|
+
const appRpcChannel = new SubChannel(messagePort, APP_RPC_ID);
|
|
110
|
+
const appRpcServer = createServer(rpc, appRpcChannel, opts);
|
|
111
|
+
appRpcChannel.start();
|
|
112
|
+
return {
|
|
113
|
+
close() {
|
|
114
|
+
appRpcServer.close();
|
|
115
|
+
appRpcChannel.close();
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comapeo/ipc",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.2.0",
|
|
4
4
|
"description": "IPC wrappers for CoMapeo Core",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@comapeo/core": "5.2.1",
|
|
65
|
+
"@comapeo/map-server": "1.0.0",
|
|
65
66
|
"@digidem/types": "2.3.0",
|
|
66
67
|
"@eslint/js": "9.39.2",
|
|
67
68
|
"@mapeo/crypto": "1.0.0-alpha.10",
|