@peerbit/rpc 2.1.17 → 3.0.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/esm/controller.d.ts +2 -3
- package/lib/esm/controller.js +19 -37
- package/lib/esm/controller.js.map +1 -1
- package/lib/esm/io.d.ts +3 -1
- package/lib/esm/io.js.map +1 -1
- package/lib/esm/utils.js.map +1 -1
- package/package.json +7 -7
- package/src/controller.ts +25 -48
- package/src/io.ts +2 -0
package/lib/esm/controller.d.ts
CHANGED
|
@@ -8,10 +8,10 @@ export type RPCSetupOptions<Q, R> = {
|
|
|
8
8
|
queryType: AbstractType<Q>;
|
|
9
9
|
responseType: AbstractType<R>;
|
|
10
10
|
responseHandler?: ResponseHandler<Q, R>;
|
|
11
|
-
subscriptionData?: Uint8Array;
|
|
12
11
|
};
|
|
13
12
|
export type RequestContext = {
|
|
14
13
|
from?: PublicSignKey;
|
|
14
|
+
timestamp: bigint;
|
|
15
15
|
};
|
|
16
16
|
export type ResponseHandler<Q, R> = (query: Q, context: RequestContext) => Promise<R | undefined> | R | undefined;
|
|
17
17
|
export declare class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
@@ -23,7 +23,6 @@ export declare class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
23
23
|
private _responseType;
|
|
24
24
|
private _rpcTopic;
|
|
25
25
|
private _onMessageBinded;
|
|
26
|
-
private _subscriptionMetaData;
|
|
27
26
|
private _keypair;
|
|
28
27
|
private _getResponseValueFn;
|
|
29
28
|
private _getRequestValueFn;
|
|
@@ -32,7 +31,7 @@ export declare class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
32
31
|
close(from?: Program): Promise<boolean>;
|
|
33
32
|
drop(from?: Program): Promise<boolean>;
|
|
34
33
|
private _subscribing;
|
|
35
|
-
subscribe(
|
|
34
|
+
subscribe(): Promise<void>;
|
|
36
35
|
_onMessage(evt: CustomEvent<DataEvent>): Promise<void>;
|
|
37
36
|
private seal;
|
|
38
37
|
private getPublishOptions;
|
package/lib/esm/controller.js
CHANGED
|
@@ -11,7 +11,6 @@ import { logger } from "./io.js";
|
|
|
11
11
|
import { Program } from "@peerbit/program";
|
|
12
12
|
import pDefer from "p-defer";
|
|
13
13
|
import { waitFor } from "@peerbit/time";
|
|
14
|
-
import { equals } from "uint8arrays";
|
|
15
14
|
const createValueResolver = (type) => {
|
|
16
15
|
if (type === Uint8Array) {
|
|
17
16
|
return (decrypted) => decrypted._data;
|
|
@@ -29,7 +28,6 @@ let RPC = class RPC extends Program {
|
|
|
29
28
|
_responseType;
|
|
30
29
|
_rpcTopic;
|
|
31
30
|
_onMessageBinded = undefined;
|
|
32
|
-
_subscriptionMetaData;
|
|
33
31
|
_keypair;
|
|
34
32
|
_getResponseValueFn;
|
|
35
33
|
_getRequestValueFn;
|
|
@@ -43,7 +41,7 @@ let RPC = class RPC extends Program {
|
|
|
43
41
|
this._getResponseValueFn = createValueResolver(this._responseType);
|
|
44
42
|
this._getRequestValueFn = createValueResolver(this._requestType);
|
|
45
43
|
this._keypair = await X25519Keypair.create();
|
|
46
|
-
await this.subscribe(
|
|
44
|
+
await this.subscribe();
|
|
47
45
|
}
|
|
48
46
|
async _close(from) {
|
|
49
47
|
if (this._subscribed) {
|
|
@@ -69,36 +67,16 @@ let RPC = class RPC extends Program {
|
|
|
69
67
|
return true;
|
|
70
68
|
}
|
|
71
69
|
_subscribing;
|
|
72
|
-
async subscribe(
|
|
70
|
+
async subscribe() {
|
|
73
71
|
await this._subscribing;
|
|
74
|
-
if (this._subscribed
|
|
75
|
-
(this._subscriptionMetaData === data ||
|
|
76
|
-
(this._subscriptionMetaData &&
|
|
77
|
-
data &&
|
|
78
|
-
equals(this._subscriptionMetaData, data)))) {
|
|
72
|
+
if (this._subscribed) {
|
|
79
73
|
return;
|
|
80
74
|
}
|
|
81
|
-
const prevSubscriptionData = this._subscriptionMetaData;
|
|
82
|
-
this._subscriptionMetaData = data;
|
|
83
|
-
const wasSubscribed = this._subscribed;
|
|
84
75
|
this._subscribed = true;
|
|
85
76
|
this._onMessageBinded = this._onMessageBinded || this._onMessage.bind(this);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
data: prevSubscriptionData
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
this._subscribing = this.node.services.pubsub
|
|
92
|
-
.subscribe(this.rpcTopic, { data })
|
|
93
|
-
.then(() => {
|
|
94
|
-
if (!wasSubscribed) {
|
|
95
|
-
this.node.services.pubsub.addEventListener("data", this._onMessageBinded);
|
|
96
|
-
}
|
|
97
|
-
});
|
|
77
|
+
this.node.services.pubsub.addEventListener("data", this._onMessageBinded);
|
|
78
|
+
this._subscribing = this.node.services.pubsub.subscribe(this.rpcTopic);
|
|
98
79
|
await this._subscribing;
|
|
99
|
-
if (!wasSubscribed) {
|
|
100
|
-
await this.node.services.pubsub.requestSubscribers(this.rpcTopic);
|
|
101
|
-
}
|
|
102
80
|
logger.debug("subscribing to query topic (responses): " + this.rpcTopic);
|
|
103
81
|
}
|
|
104
82
|
async _onMessage(evt) {
|
|
@@ -109,9 +87,10 @@ let RPC = class RPC extends Program {
|
|
|
109
87
|
if (rpcMessage instanceof RequestV0) {
|
|
110
88
|
if (this._responseHandler) {
|
|
111
89
|
const maybeEncrypted = rpcMessage.request;
|
|
112
|
-
const decrypted = await maybeEncrypted.decrypt(this.node.keychain);
|
|
90
|
+
const decrypted = await maybeEncrypted.decrypt(this.node.services.keychain);
|
|
113
91
|
const response = await this._responseHandler(this._getRequestValueFn(decrypted), {
|
|
114
|
-
from: message.
|
|
92
|
+
from: message.header.signatures.publicKeys[0],
|
|
93
|
+
timestamp: message.header.timetamp
|
|
115
94
|
});
|
|
116
95
|
if (response && rpcMessage.respondTo) {
|
|
117
96
|
// send query and wait for replies in a generator like behaviour
|
|
@@ -124,14 +103,13 @@ let RPC = class RPC extends Program {
|
|
|
124
103
|
data: serializedResponse
|
|
125
104
|
});
|
|
126
105
|
let maybeEncryptedMessage = decryptedMessage;
|
|
127
|
-
maybeEncryptedMessage = await decryptedMessage.encrypt(this._keypair, rpcMessage.respondTo);
|
|
106
|
+
maybeEncryptedMessage = await decryptedMessage.encrypt(this._keypair, [rpcMessage.respondTo]);
|
|
128
107
|
await this.node.services.pubsub.publish(serialize(new ResponseV0({
|
|
129
108
|
response: maybeEncryptedMessage,
|
|
130
109
|
requestId: message.id
|
|
131
110
|
})), {
|
|
132
111
|
topics: [this.rpcTopic],
|
|
133
|
-
to: [message.
|
|
134
|
-
strict: true
|
|
112
|
+
to: [message.header.signatures.publicKeys[0]]
|
|
135
113
|
});
|
|
136
114
|
}
|
|
137
115
|
}
|
|
@@ -172,7 +150,7 @@ let RPC = class RPC extends Program {
|
|
|
172
150
|
let maybeEncryptedMessage = decryptedMessage;
|
|
173
151
|
if (options?.encryption?.responders &&
|
|
174
152
|
options?.encryption?.responders.length > 0) {
|
|
175
|
-
maybeEncryptedMessage = await decryptedMessage.encrypt(options.encryption.key,
|
|
153
|
+
maybeEncryptedMessage = await decryptedMessage.encrypt(options.encryption.key, options.encryption.responders);
|
|
176
154
|
}
|
|
177
155
|
const requestMessage = new RequestV0({
|
|
178
156
|
request: maybeEncryptedMessage,
|
|
@@ -182,8 +160,12 @@ let RPC = class RPC extends Program {
|
|
|
182
160
|
}
|
|
183
161
|
getPublishOptions(options) {
|
|
184
162
|
return options?.to
|
|
185
|
-
? {
|
|
186
|
-
|
|
163
|
+
? {
|
|
164
|
+
mode: options?.mode,
|
|
165
|
+
to: options.to,
|
|
166
|
+
topics: [this.rpcTopic]
|
|
167
|
+
}
|
|
168
|
+
: { mode: options?.mode, topics: [this.rpcTopic] };
|
|
187
169
|
}
|
|
188
170
|
/**
|
|
189
171
|
* Send message and don't expect any response
|
|
@@ -197,7 +179,7 @@ let RPC = class RPC extends Program {
|
|
|
197
179
|
return async (properties) => {
|
|
198
180
|
try {
|
|
199
181
|
const { response, message } = properties;
|
|
200
|
-
const from = message.
|
|
182
|
+
const from = message.header.signatures.publicKeys[0];
|
|
201
183
|
if (options?.isTrusted && !(await options?.isTrusted(from))) {
|
|
202
184
|
return;
|
|
203
185
|
}
|
|
@@ -227,7 +209,7 @@ let RPC = class RPC extends Program {
|
|
|
227
209
|
if (error instanceof AccessError) {
|
|
228
210
|
return; // Ignore things we can not open
|
|
229
211
|
}
|
|
230
|
-
if (error instanceof BorshError
|
|
212
|
+
if (error instanceof BorshError) {
|
|
231
213
|
logger.debug("Namespace error");
|
|
232
214
|
return; // Name space conflict most likely
|
|
233
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAEN,UAAU,EACV,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,cAAc,EAGd,QAAQ,EACR,WAAW,EAEX,aAAa,EACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAc,MAAM,EAA+B,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/io.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { X25519PublicKey, Ed25519PublicKey, PublicSignKey, X25519Keypair } from "@peerbit/crypto";
|
|
2
|
-
|
|
2
|
+
import { DeliveryMode } from "@peerbit/stream-interface";
|
|
3
|
+
export declare const logger: import("pino").Logger<never>;
|
|
3
4
|
export type RPCOptions<R> = {
|
|
4
5
|
amount?: number;
|
|
5
6
|
timeout?: number;
|
|
@@ -15,6 +16,7 @@ export type PublishOptions = {
|
|
|
15
16
|
};
|
|
16
17
|
to?: PublicSignKey[] | string[];
|
|
17
18
|
strict?: boolean;
|
|
19
|
+
mode?: DeliveryMode;
|
|
18
20
|
};
|
|
19
21
|
export type RPCResponse<R> = {
|
|
20
22
|
response: R;
|
package/lib/esm/io.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/io.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../src/io.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC"}
|
package/lib/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;IAChB,CAAC;CACD;AACD,MAAM,CAAC,MAAM,QAAQ,GAAG,CACvB,GAAc,EACd,MAAkB,EAClB,OAAU,EACV,eAAqE,EACrE,OAAmC,EAClC,EAAE;IACH,0CAA0C;IAC1C,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CACnE,CAAC;IAEF,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,KAAK,IAAI,EAAE;QACrB,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peerbit/rpc",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "RPC calls for peers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -32,13 +32,13 @@
|
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@dao-xyz/borsh": "^5.1.8",
|
|
35
|
-
"@peerbit/crypto": "
|
|
36
|
-
"@peerbit/logger": "1.0.
|
|
37
|
-
"@peerbit/program": "
|
|
38
|
-
"@peerbit/time": "
|
|
35
|
+
"@peerbit/crypto": "2.0.0",
|
|
36
|
+
"@peerbit/logger": "1.0.2",
|
|
37
|
+
"@peerbit/program": "3.0.1",
|
|
38
|
+
"@peerbit/time": "2.0.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@peerbit/test-utils": "^
|
|
41
|
+
"@peerbit/test-utils": "^2.0.1"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "c48cb37d237a25b0bcc849482b43f6941d53e3d5"
|
|
44
44
|
}
|
package/src/controller.ts
CHANGED
|
@@ -16,27 +16,24 @@ import {
|
|
|
16
16
|
} from "@peerbit/crypto";
|
|
17
17
|
import { RequestV0, ResponseV0, RPCMessage } from "./encoding.js";
|
|
18
18
|
import { RPCOptions, logger, RPCResponse, PublishOptions } from "./io.js";
|
|
19
|
-
import { Address } from "@peerbit/program";
|
|
20
19
|
import {
|
|
21
20
|
DataEvent,
|
|
22
|
-
PubSubData,
|
|
23
21
|
PublishOptions as PubSubPublishOptions
|
|
24
22
|
} from "@peerbit/pubsub-interface";
|
|
25
23
|
import { Program } from "@peerbit/program";
|
|
26
24
|
import { DataMessage } from "@peerbit/stream-interface";
|
|
27
25
|
import pDefer, { DeferredPromise } from "p-defer";
|
|
28
26
|
import { waitFor } from "@peerbit/time";
|
|
29
|
-
import { equals } from "uint8arrays";
|
|
30
27
|
|
|
31
28
|
export type RPCSetupOptions<Q, R> = {
|
|
32
29
|
topic: string;
|
|
33
30
|
queryType: AbstractType<Q>;
|
|
34
31
|
responseType: AbstractType<R>;
|
|
35
32
|
responseHandler?: ResponseHandler<Q, R>;
|
|
36
|
-
subscriptionData?: Uint8Array;
|
|
37
33
|
};
|
|
38
34
|
export type RequestContext = {
|
|
39
35
|
from?: PublicSignKey;
|
|
36
|
+
timestamp: bigint;
|
|
40
37
|
};
|
|
41
38
|
export type ResponseHandler<Q, R> = (
|
|
42
39
|
query: Q,
|
|
@@ -66,7 +63,6 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
66
63
|
private _responseType: AbstractType<R>;
|
|
67
64
|
private _rpcTopic: string | undefined;
|
|
68
65
|
private _onMessageBinded: ((arg: any) => any) | undefined = undefined;
|
|
69
|
-
private _subscriptionMetaData: Uint8Array | undefined;
|
|
70
66
|
|
|
71
67
|
private _keypair: X25519Keypair;
|
|
72
68
|
|
|
@@ -83,7 +79,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
83
79
|
this._getRequestValueFn = createValueResolver(this._requestType);
|
|
84
80
|
|
|
85
81
|
this._keypair = await X25519Keypair.create();
|
|
86
|
-
await this.subscribe(
|
|
82
|
+
await this.subscribe();
|
|
87
83
|
}
|
|
88
84
|
|
|
89
85
|
private async _close(from?: Program): Promise<void> {
|
|
@@ -114,47 +110,22 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
114
110
|
return true;
|
|
115
111
|
}
|
|
116
112
|
|
|
117
|
-
private _subscribing: Promise<void
|
|
118
|
-
async subscribe(
|
|
113
|
+
private _subscribing: Promise<void> | void;
|
|
114
|
+
async subscribe(): Promise<void> {
|
|
119
115
|
await this._subscribing;
|
|
120
|
-
if (
|
|
121
|
-
this._subscribed &&
|
|
122
|
-
(this._subscriptionMetaData === data ||
|
|
123
|
-
(this._subscriptionMetaData &&
|
|
124
|
-
data &&
|
|
125
|
-
equals(this._subscriptionMetaData, data)))
|
|
126
|
-
) {
|
|
116
|
+
if (this._subscribed) {
|
|
127
117
|
return;
|
|
128
118
|
}
|
|
129
119
|
|
|
130
|
-
const prevSubscriptionData = this._subscriptionMetaData;
|
|
131
|
-
this._subscriptionMetaData = data;
|
|
132
|
-
const wasSubscribed = this._subscribed;
|
|
133
120
|
this._subscribed = true;
|
|
134
121
|
|
|
135
122
|
this._onMessageBinded = this._onMessageBinded || this._onMessage.bind(this);
|
|
136
123
|
|
|
137
|
-
|
|
138
|
-
await this.node.services.pubsub.unsubscribe(this.rpcTopic, {
|
|
139
|
-
data: prevSubscriptionData
|
|
140
|
-
});
|
|
141
|
-
}
|
|
124
|
+
this.node.services.pubsub.addEventListener("data", this._onMessageBinded!);
|
|
142
125
|
|
|
143
|
-
this._subscribing = this.node.services.pubsub
|
|
144
|
-
.subscribe(this.rpcTopic, { data })
|
|
145
|
-
.then(() => {
|
|
146
|
-
if (!wasSubscribed) {
|
|
147
|
-
this.node.services.pubsub.addEventListener(
|
|
148
|
-
"data",
|
|
149
|
-
this._onMessageBinded!
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
});
|
|
126
|
+
this._subscribing = this.node.services.pubsub.subscribe(this.rpcTopic);
|
|
153
127
|
|
|
154
128
|
await this._subscribing;
|
|
155
|
-
if (!wasSubscribed) {
|
|
156
|
-
await this.node.services.pubsub.requestSubscribers(this.rpcTopic);
|
|
157
|
-
}
|
|
158
129
|
logger.debug("subscribing to query topic (responses): " + this.rpcTopic);
|
|
159
130
|
}
|
|
160
131
|
|
|
@@ -167,14 +138,16 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
167
138
|
if (rpcMessage instanceof RequestV0) {
|
|
168
139
|
if (this._responseHandler) {
|
|
169
140
|
const maybeEncrypted = rpcMessage.request;
|
|
170
|
-
const decrypted = await maybeEncrypted.decrypt(
|
|
141
|
+
const decrypted = await maybeEncrypted.decrypt(
|
|
142
|
+
this.node.services.keychain
|
|
143
|
+
);
|
|
171
144
|
const response = await this._responseHandler(
|
|
172
145
|
this._getRequestValueFn(decrypted),
|
|
173
146
|
{
|
|
174
|
-
from: message.
|
|
147
|
+
from: message.header.signatures!.publicKeys[0],
|
|
148
|
+
timestamp: message.header.timetamp
|
|
175
149
|
}
|
|
176
150
|
);
|
|
177
|
-
|
|
178
151
|
if (response && rpcMessage.respondTo) {
|
|
179
152
|
// send query and wait for replies in a generator like behaviour
|
|
180
153
|
const serializedResponse = serialize(response);
|
|
@@ -192,7 +165,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
192
165
|
|
|
193
166
|
maybeEncryptedMessage = await decryptedMessage.encrypt(
|
|
194
167
|
this._keypair,
|
|
195
|
-
rpcMessage.respondTo
|
|
168
|
+
[rpcMessage.respondTo]
|
|
196
169
|
);
|
|
197
170
|
|
|
198
171
|
await this.node.services.pubsub.publish(
|
|
@@ -204,8 +177,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
204
177
|
),
|
|
205
178
|
{
|
|
206
179
|
topics: [this.rpcTopic],
|
|
207
|
-
to: [message.
|
|
208
|
-
strict: true
|
|
180
|
+
to: [message.header.signatures!.publicKeys[0]]
|
|
209
181
|
}
|
|
210
182
|
);
|
|
211
183
|
}
|
|
@@ -231,6 +203,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
231
203
|
logger.error("Got message for a different namespace");
|
|
232
204
|
return;
|
|
233
205
|
}
|
|
206
|
+
|
|
234
207
|
logger.error(
|
|
235
208
|
"Error handling query: " +
|
|
236
209
|
(error?.message ? error?.message?.toString() : error)
|
|
@@ -260,7 +233,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
260
233
|
) {
|
|
261
234
|
maybeEncryptedMessage = await decryptedMessage.encrypt(
|
|
262
235
|
options.encryption.key,
|
|
263
|
-
|
|
236
|
+
options.encryption.responders
|
|
264
237
|
);
|
|
265
238
|
}
|
|
266
239
|
|
|
@@ -274,8 +247,12 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
274
247
|
|
|
275
248
|
private getPublishOptions(options?: PublishOptions): PubSubPublishOptions {
|
|
276
249
|
return options?.to
|
|
277
|
-
? {
|
|
278
|
-
|
|
250
|
+
? {
|
|
251
|
+
mode: options?.mode,
|
|
252
|
+
to: options.to,
|
|
253
|
+
topics: [this.rpcTopic]
|
|
254
|
+
}
|
|
255
|
+
: { mode: options?.mode, topics: [this.rpcTopic] };
|
|
279
256
|
}
|
|
280
257
|
|
|
281
258
|
/**
|
|
@@ -304,7 +281,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
304
281
|
}) => {
|
|
305
282
|
try {
|
|
306
283
|
const { response, message } = properties;
|
|
307
|
-
const from = message.
|
|
284
|
+
const from = message.header.signatures!.publicKeys[0];
|
|
308
285
|
|
|
309
286
|
if (options?.isTrusted && !(await options?.isTrusted(from))) {
|
|
310
287
|
return;
|
|
@@ -338,7 +315,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
338
315
|
return; // Ignore things we can not open
|
|
339
316
|
}
|
|
340
317
|
|
|
341
|
-
if (error instanceof BorshError
|
|
318
|
+
if (error instanceof BorshError) {
|
|
342
319
|
logger.debug("Namespace error");
|
|
343
320
|
return; // Name space conflict most likely
|
|
344
321
|
}
|
|
@@ -384,7 +361,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
|
|
|
384
361
|
options?.to && options.to.length > 0
|
|
385
362
|
? new Set(
|
|
386
363
|
options.to.map((x) => (typeof x === "string" ? x : x.hashcode()))
|
|
387
|
-
|
|
364
|
+
)
|
|
388
365
|
: undefined;
|
|
389
366
|
|
|
390
367
|
const responders = new Set<string>();
|
package/src/io.ts
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
X25519Keypair
|
|
6
6
|
} from "@peerbit/crypto";
|
|
7
7
|
import { logger as loggerFn } from "@peerbit/logger";
|
|
8
|
+
import { DeliveryMode } from "@peerbit/stream-interface";
|
|
8
9
|
|
|
9
10
|
export const logger = loggerFn({ module: "rpc" });
|
|
10
11
|
export type RPCOptions<R> = {
|
|
@@ -23,6 +24,7 @@ export type PublishOptions = {
|
|
|
23
24
|
};
|
|
24
25
|
to?: PublicSignKey[] | string[];
|
|
25
26
|
strict?: boolean;
|
|
27
|
+
mode?: DeliveryMode;
|
|
26
28
|
};
|
|
27
29
|
|
|
28
30
|
export type RPCResponse<R> = { response: R; from?: PublicSignKey };
|