@peerbit/rpc 2.0.1 → 2.1.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.
@@ -1,30 +1,25 @@
1
1
  import { AbstractType } from "@dao-xyz/borsh";
2
2
  import { PublicSignKey } from "@peerbit/crypto";
3
3
  import { RPCOptions, RPCResponse, PublishOptions } from "./io.js";
4
- import { Address } from "@peerbit/program";
5
4
  import { DataEvent } from "@peerbit/pubsub-interface";
6
5
  import { Program } from "@peerbit/program";
7
- export type SearchContext = (() => Address) | Program;
8
- export type CanRead = (key?: PublicSignKey) => Promise<boolean> | boolean;
9
6
  export type RPCSetupOptions<Q, R> = {
10
7
  topic: string;
11
8
  queryType: AbstractType<Q>;
12
9
  responseType: AbstractType<R>;
13
- canRead?: CanRead;
14
10
  responseHandler?: ResponseHandler<Q, R>;
15
11
  subscriptionData?: Uint8Array;
16
12
  };
17
- export type QueryContext = {
13
+ export type RequestContext = {
18
14
  from?: PublicSignKey;
19
- address: string;
20
15
  };
21
- export type ResponseHandler<Q, R> = (query: Q, context: QueryContext) => Promise<R | undefined> | R | undefined;
16
+ export type ResponseHandler<Q, R> = (query: Q, context: RequestContext) => Promise<R | undefined> | R | undefined;
22
17
  export declare class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
23
- canRead: CanRead;
24
18
  private _subscribed;
25
19
  private _responseHandler?;
26
20
  private _responseResolver;
27
21
  private _requestType;
22
+ private _requestTypeIsUint8Array;
28
23
  private _responseType;
29
24
  private _rpcTopic;
30
25
  private _onMessageBinded;
@@ -37,7 +32,7 @@ export declare class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
37
32
  close(from?: Program): Promise<boolean>;
38
33
  drop(from?: Program): Promise<boolean>;
39
34
  private _subscribing;
40
- private _subscribe;
35
+ subscribe(data?: Uint8Array | undefined): Promise<void>;
41
36
  _onMessage(evt: CustomEvent<DataEvent>): Promise<void>;
42
37
  private seal;
43
38
  private getPublishOptions;
@@ -11,6 +11,7 @@ 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";
14
15
  const createValueResolver = (type) => {
15
16
  if (type === Uint8Array) {
16
17
  return (decrypted) => decrypted._data;
@@ -20,11 +21,11 @@ const createValueResolver = (type) => {
20
21
  }
21
22
  };
22
23
  export let RPC = class RPC extends Program {
23
- canRead;
24
24
  _subscribed = false;
25
25
  _responseHandler;
26
26
  _responseResolver;
27
27
  _requestType;
28
+ _requestTypeIsUint8Array;
28
29
  _responseType;
29
30
  _rpcTopic;
30
31
  _onMessageBinded = undefined;
@@ -36,14 +37,13 @@ export let RPC = class RPC extends Program {
36
37
  this._rpcTopic = args.topic ?? this._rpcTopic;
37
38
  this._responseHandler = args.responseHandler;
38
39
  this._requestType = args.queryType;
40
+ this._requestTypeIsUint8Array = this._requestType === Uint8Array;
39
41
  this._responseType = args.responseType;
40
42
  this._responseResolver = new Map();
41
- this._subscriptionMetaData = args.subscriptionData;
42
- this.canRead = args.canRead || (() => Promise.resolve(true));
43
43
  this._getResponseValueFn = createValueResolver(this._responseType);
44
44
  this._getRequestValueFn = createValueResolver(this._requestType);
45
45
  this._keypair = await X25519Keypair.create();
46
- await this._subscribe();
46
+ await this.subscribe(args.subscriptionData);
47
47
  }
48
48
  async _close(from) {
49
49
  if (this._subscribed) {
@@ -69,20 +69,36 @@ export let RPC = class RPC extends Program {
69
69
  return true;
70
70
  }
71
71
  _subscribing;
72
- async _subscribe() {
72
+ async subscribe(data = this._subscriptionMetaData) {
73
73
  await this._subscribing;
74
- if (this._subscribed) {
74
+ if (this._subscribed &&
75
+ (this._subscriptionMetaData === data ||
76
+ (this._subscriptionMetaData &&
77
+ data &&
78
+ equals(this._subscriptionMetaData, data)))) {
75
79
  return;
76
80
  }
81
+ const prevSubscriptionData = this._subscriptionMetaData;
82
+ this._subscriptionMetaData = data;
83
+ const wasSubscribed = this._subscribed;
77
84
  this._subscribed = true;
78
85
  this._onMessageBinded = this._onMessageBinded || this._onMessage.bind(this);
86
+ if (wasSubscribed) {
87
+ await this.node.services.pubsub.unsubscribe(this.rpcTopic, {
88
+ data: prevSubscriptionData,
89
+ });
90
+ }
79
91
  this._subscribing = this.node.services.pubsub
80
- .subscribe(this.rpcTopic, { data: this._subscriptionMetaData })
92
+ .subscribe(this.rpcTopic, { data })
81
93
  .then(() => {
82
- return this.node.services.pubsub.addEventListener("data", this._onMessageBinded);
94
+ if (!wasSubscribed) {
95
+ this.node.services.pubsub.addEventListener("data", this._onMessageBinded);
96
+ }
83
97
  });
84
98
  await this._subscribing;
85
- await this.node.services.pubsub.requestSubscribers(this.rpcTopic);
99
+ if (!wasSubscribed) {
100
+ await this.node.services.pubsub.requestSubscribers(this.rpcTopic);
101
+ }
86
102
  logger.debug("subscribing to query topic (responses): " + this.rpcTopic);
87
103
  }
88
104
  async _onMessage(evt) {
@@ -94,18 +110,14 @@ export let RPC = class RPC extends Program {
94
110
  if (this._responseHandler) {
95
111
  const maybeEncrypted = rpcMessage.request;
96
112
  const decrypted = await maybeEncrypted.decrypt(this.node.keychain);
97
- if (!(await this.canRead(message.sender))) {
98
- throw new AccessError();
99
- }
100
113
  const response = await this._responseHandler(this._getRequestValueFn(decrypted), {
101
- address: this.rpcTopic,
102
114
  from: message.sender,
103
115
  });
104
116
  if (response && rpcMessage.respondTo) {
105
117
  // send query and wait for replies in a generator like behaviour
106
118
  const serializedResponse = serialize(response);
107
119
  // we use the peerId/libp2p identity for signatures, since we want to be able to send a message
108
- // with pubsub with a certain reciever. If we use (this.identity) we are going to use an identity
120
+ // with pubsub with a certain receiver. If we use (this.identity) we are going to use an identity
109
121
  // that is now known in the .pubsub network, hence the message might not be delivired if we
110
122
  // send with { to: [RECIEVER] } param
111
123
  const decryptedMessage = new DecryptedThing({
@@ -151,7 +163,7 @@ export let RPC = class RPC extends Program {
151
163
  }
152
164
  }
153
165
  async seal(request, respondTo, options) {
154
- const requestData = this._requestType === Uint8Array
166
+ const requestData = this._requestTypeIsUint8Array
155
167
  ? request
156
168
  : serialize(request);
157
169
  const decryptedMessage = new DecryptedThing({
@@ -232,7 +244,7 @@ export let RPC = class RPC extends Program {
232
244
  */
233
245
  async request(request, options) {
234
246
  // We are generatinga new encryption keypair for each send, so we now that when we get the responses, they are encrypted specifcally for me, and for this request
235
- // this allows us to easily disregard a bunch of message just beacuse they are for a different reciever!
247
+ // this allows us to easily disregard a bunch of message just beacuse they are for a different receiver!
236
248
  const keypair = await X25519Keypair.create();
237
249
  // send query and wait for replies in a generator like behaviour
238
250
  let timeoutFn = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/controller.ts"],"names":[],"mappings":"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"}
package/lib/esm/utils.js CHANGED
@@ -49,7 +49,7 @@ export const queryAll = (rpc, groups, request, responseHandler, options) => {
49
49
  }
50
50
  }
51
51
  if (missingReponses) {
52
- throw new MissingResponsesError("Did not recieve responses from all shards");
52
+ throw new MissingResponsesError("Did not receive responses from all shards");
53
53
  }
54
54
  };
55
55
  return fn();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/rpc",
3
- "version": "2.0.1",
3
+ "version": "2.1.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.5",
35
- "@peerbit/crypto": "1.0.4",
35
+ "@peerbit/crypto": "1.0.5",
36
36
  "@peerbit/logger": "1.0.1",
37
- "@peerbit/program": "2.1.0",
37
+ "@peerbit/program": "2.2.1",
38
38
  "@peerbit/time": "1.0.2"
39
39
  },
40
40
  "devDependencies": {
41
- "@peerbit/test-utils": "^1.0.15"
41
+ "@peerbit/test-utils": "^1.0.17"
42
42
  },
43
- "gitHead": "4752c301fb49b2f937b4039533ff5bc3537da3e0"
43
+ "gitHead": "06d341c4ea81b70c76018899b029f4419c311500"
44
44
  }
package/src/controller.ts CHANGED
@@ -26,25 +26,21 @@ import { Program } from "@peerbit/program";
26
26
  import { DataMessage } from "@peerbit/stream-interface";
27
27
  import pDefer, { DeferredPromise } from "p-defer";
28
28
  import { waitFor } from "@peerbit/time";
29
-
30
- export type SearchContext = (() => Address) | Program;
31
- export type CanRead = (key?: PublicSignKey) => Promise<boolean> | boolean;
29
+ import { equals } from "uint8arrays";
32
30
 
33
31
  export type RPCSetupOptions<Q, R> = {
34
32
  topic: string;
35
33
  queryType: AbstractType<Q>;
36
34
  responseType: AbstractType<R>;
37
- canRead?: CanRead;
38
35
  responseHandler?: ResponseHandler<Q, R>;
39
36
  subscriptionData?: Uint8Array;
40
37
  };
41
- export type QueryContext = {
38
+ export type RequestContext = {
42
39
  from?: PublicSignKey;
43
- address: string;
44
40
  };
45
41
  export type ResponseHandler<Q, R> = (
46
42
  query: Q,
47
- context: QueryContext
43
+ context: RequestContext
48
44
  ) => Promise<R | undefined> | R | undefined;
49
45
 
50
46
  const createValueResolver = <T>(
@@ -59,8 +55,6 @@ const createValueResolver = <T>(
59
55
 
60
56
  @variant("rpc")
61
57
  export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
62
- canRead: CanRead;
63
-
64
58
  private _subscribed = false;
65
59
  private _responseHandler?: ResponseHandler<Q, (R | undefined) | R>;
66
60
  private _responseResolver: Map<
@@ -68,6 +62,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
68
62
  (properties: { response: ResponseV0; message: DataMessage }) => any
69
63
  >;
70
64
  private _requestType: AbstractType<Q> | Uint8ArrayConstructor;
65
+ private _requestTypeIsUint8Array: boolean;
71
66
  private _responseType: AbstractType<R>;
72
67
  private _rpcTopic: string | undefined;
73
68
  private _onMessageBinded: ((arg: any) => any) | undefined = undefined;
@@ -77,21 +72,18 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
77
72
 
78
73
  private _getResponseValueFn: (decrypted: DecryptedThing<R>) => R;
79
74
  private _getRequestValueFn: (decrypted: DecryptedThing<Q>) => Q;
80
-
81
75
  async open(args: RPCSetupOptions<Q, R>): Promise<void> {
82
76
  this._rpcTopic = args.topic ?? this._rpcTopic;
83
77
  this._responseHandler = args.responseHandler;
84
78
  this._requestType = args.queryType;
79
+ this._requestTypeIsUint8Array = (this._requestType as any) === Uint8Array;
85
80
  this._responseType = args.responseType;
86
81
  this._responseResolver = new Map();
87
- this._subscriptionMetaData = args.subscriptionData;
88
- this.canRead = args.canRead || (() => Promise.resolve(true));
89
-
90
82
  this._getResponseValueFn = createValueResolver(this._responseType);
91
83
  this._getRequestValueFn = createValueResolver(this._requestType);
92
84
 
93
85
  this._keypair = await X25519Keypair.create();
94
- await this._subscribe();
86
+ await this.subscribe(args.subscriptionData);
95
87
  }
96
88
 
97
89
  private async _close(from?: Program): Promise<void> {
@@ -123,25 +115,46 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
123
115
  }
124
116
 
125
117
  private _subscribing: Promise<void>;
126
- private async _subscribe(): Promise<void> {
118
+ async subscribe(data = this._subscriptionMetaData): Promise<void> {
127
119
  await this._subscribing;
128
- if (this._subscribed) {
120
+ if (
121
+ this._subscribed &&
122
+ (this._subscriptionMetaData === data ||
123
+ (this._subscriptionMetaData &&
124
+ data &&
125
+ equals(this._subscriptionMetaData, data)))
126
+ ) {
129
127
  return;
130
128
  }
129
+
130
+ const prevSubscriptionData = this._subscriptionMetaData;
131
+ this._subscriptionMetaData = data;
132
+ const wasSubscribed = this._subscribed;
131
133
  this._subscribed = true;
134
+
132
135
  this._onMessageBinded = this._onMessageBinded || this._onMessage.bind(this);
136
+
137
+ if (wasSubscribed) {
138
+ await this.node.services.pubsub.unsubscribe(this.rpcTopic, {
139
+ data: prevSubscriptionData,
140
+ });
141
+ }
142
+
133
143
  this._subscribing = this.node.services.pubsub
134
- .subscribe(this.rpcTopic, { data: this._subscriptionMetaData })
144
+ .subscribe(this.rpcTopic, { data })
135
145
  .then(() => {
136
- return this.node.services.pubsub.addEventListener(
137
- "data",
138
- this._onMessageBinded!
139
- );
146
+ if (!wasSubscribed) {
147
+ this.node.services.pubsub.addEventListener(
148
+ "data",
149
+ this._onMessageBinded!
150
+ );
151
+ }
140
152
  });
141
153
 
142
154
  await this._subscribing;
143
- await this.node.services.pubsub.requestSubscribers(this.rpcTopic);
144
-
155
+ if (!wasSubscribed) {
156
+ await this.node.services.pubsub.requestSubscribers(this.rpcTopic);
157
+ }
145
158
  logger.debug("subscribing to query topic (responses): " + this.rpcTopic);
146
159
  }
147
160
 
@@ -155,15 +168,9 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
155
168
  if (this._responseHandler) {
156
169
  const maybeEncrypted = rpcMessage.request;
157
170
  const decrypted = await maybeEncrypted.decrypt(this.node.keychain);
158
-
159
- if (!(await this.canRead(message.sender))) {
160
- throw new AccessError();
161
- }
162
-
163
171
  const response = await this._responseHandler(
164
172
  this._getRequestValueFn(decrypted),
165
173
  {
166
- address: this.rpcTopic,
167
174
  from: message.sender,
168
175
  }
169
176
  );
@@ -173,7 +180,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
173
180
  const serializedResponse = serialize(response);
174
181
 
175
182
  // we use the peerId/libp2p identity for signatures, since we want to be able to send a message
176
- // with pubsub with a certain reciever. If we use (this.identity) we are going to use an identity
183
+ // with pubsub with a certain receiver. If we use (this.identity) we are going to use an identity
177
184
  // that is now known in the .pubsub network, hence the message might not be delivired if we
178
185
  // send with { to: [RECIEVER] } param
179
186
 
@@ -237,14 +244,14 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
237
244
  respondTo?: X25519PublicKey,
238
245
  options?: PublishOptions
239
246
  ) {
240
- const requestData =
241
- (this._requestType as any) === Uint8Array
242
- ? (request as Uint8Array)
243
- : serialize(request);
247
+ const requestData = this._requestTypeIsUint8Array
248
+ ? (request as Uint8Array)
249
+ : serialize(request);
244
250
 
245
251
  const decryptedMessage = new DecryptedThing<Uint8Array>({
246
252
  data: requestData,
247
253
  });
254
+
248
255
  let maybeEncryptedMessage: MaybeEncrypted<Uint8Array> = decryptedMessage;
249
256
 
250
257
  if (
@@ -353,7 +360,7 @@ export class RPC<Q, R> extends Program<RPCSetupOptions<Q, R>> {
353
360
  options?: RPCOptions<R>
354
361
  ): Promise<RPCResponse<R>[]> {
355
362
  // We are generatinga new encryption keypair for each send, so we now that when we get the responses, they are encrypted specifcally for me, and for this request
356
- // this allows us to easily disregard a bunch of message just beacuse they are for a different reciever!
363
+ // this allows us to easily disregard a bunch of message just beacuse they are for a different receiver!
357
364
  const keypair = await X25519Keypair.create();
358
365
 
359
366
  // send query and wait for replies in a generator like behaviour
package/src/utils.ts CHANGED
@@ -65,7 +65,7 @@ export const queryAll = <Q, R>(
65
65
  }
66
66
  if (missingReponses) {
67
67
  throw new MissingResponsesError(
68
- "Did not recieve responses from all shards"
68
+ "Did not receive responses from all shards"
69
69
  );
70
70
  }
71
71
  };