@comapeo/ipc 6.0.2 → 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 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 { createMapeoClient, closeMapeoClient } from "./client.js";
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 */
@@ -1,4 +1,5 @@
1
1
  export const MAPEO_RPC_ID: "@@mapeo-rpc";
2
+ export const APP_RPC_ID: "@@app-rpc";
2
3
  export const MANAGER_CHANNEL_ID: "@@manager";
3
4
  /**
4
5
  * @typedef {Object} Events
@@ -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.0.2",
3
+ "version": "6.2.0",
4
4
  "description": "IPC wrappers for CoMapeo Core",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -61,21 +61,22 @@
61
61
  "@comapeo/core": "^5.0.0"
62
62
  },
63
63
  "devDependencies": {
64
- "@comapeo/core": "5.0.0",
64
+ "@comapeo/core": "5.2.1",
65
+ "@comapeo/map-server": "1.0.0",
65
66
  "@digidem/types": "2.3.0",
66
- "@eslint/js": "9.35.0",
67
+ "@eslint/js": "9.39.2",
67
68
  "@mapeo/crypto": "1.0.0-alpha.10",
68
69
  "@types/nanobench": "3.0.0",
69
- "@types/node": "22.18.6",
70
- "eslint": "9.35.0",
70
+ "@types/node": "22.19.3",
71
+ "eslint": "9.39.2",
71
72
  "fastify": "4.29.1",
72
- "globals": "16.4.0",
73
+ "globals": "16.5.0",
73
74
  "husky": "9.1.7",
74
75
  "lint-staged": "15.5.2",
75
76
  "nanobench": "3.0.0",
76
77
  "npm-run-all2": "7.0.2",
77
- "prettier": "3.6.2",
78
+ "prettier": "3.7.4",
78
79
  "random-access-memory": "6.2.1",
79
- "typescript": "5.9.2"
80
+ "typescript": "5.9.3"
80
81
  }
81
82
  }