@tdxvolt/volt-client-grpc 0.20.10 → 0.20.12
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/index.cjs +456 -189
- package/package.json +2 -2
- package/src/grpc-call.js +7 -8
- package/src/volt-client-internal.js +2 -2
- package/src/volt-client.js +117 -32
- package/src/volt-connection.js +3 -3
- package/src/volt-proto-literals.js +327 -144
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.20.
|
|
6
|
+
"version": "0.20.12",
|
|
7
7
|
"description": "tdx Volt library for nodejs clients",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"exports": {
|
|
@@ -43,4 +43,4 @@
|
|
|
43
43
|
"protobufjs": "^7.4.0",
|
|
44
44
|
"uuid": "^8.1.0"
|
|
45
45
|
}
|
|
46
|
-
}
|
|
46
|
+
}
|
package/src/grpc-call.js
CHANGED
|
@@ -361,11 +361,6 @@ export default class GRPCCall extends EventEmitter {
|
|
|
361
361
|
);
|
|
362
362
|
|
|
363
363
|
this._call.on("data", (streamResponse) => {
|
|
364
|
-
if (this._ended) {
|
|
365
|
-
log("ignoring data after end on %s", this._methodName);
|
|
366
|
-
return;
|
|
367
|
-
}
|
|
368
|
-
|
|
369
364
|
try {
|
|
370
365
|
const parsedResponse = _parseResponse.call(
|
|
371
366
|
this,
|
|
@@ -373,6 +368,13 @@ export default class GRPCCall extends EventEmitter {
|
|
|
373
368
|
this._initialRequest.meta,
|
|
374
369
|
streamResponse
|
|
375
370
|
);
|
|
371
|
+
|
|
372
|
+
if (this._ended && !parsedResponse.ended) {
|
|
373
|
+
log("ignoring data after end on %s", this._methodName);
|
|
374
|
+
log(parsedResponse);
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
|
|
376
378
|
if (parsedResponse.key_exchange) {
|
|
377
379
|
const peerKey = keyFromPem(
|
|
378
380
|
parsedResponse.key_exchange.encryption_key
|
|
@@ -404,9 +406,6 @@ export default class GRPCCall extends EventEmitter {
|
|
|
404
406
|
} else if (parsedResponse.ended) {
|
|
405
407
|
if (parsedResponse.error) {
|
|
406
408
|
this.emit("error", new Error(parsedResponse.error));
|
|
407
|
-
} else {
|
|
408
|
-
// Not sure this is necessary - we should receive "end" from grpc soon...
|
|
409
|
-
this.emit("end");
|
|
410
409
|
}
|
|
411
410
|
} else {
|
|
412
411
|
log("method id is %s", parsedResponse.methodId);
|
|
@@ -265,18 +265,18 @@ export function connectInternal(helloPayload) {
|
|
|
265
265
|
this._voltConnection.on("connected", (session) => {
|
|
266
266
|
this._session = session;
|
|
267
267
|
this._connected = !!session;
|
|
268
|
+
this.emit("connected", session);
|
|
268
269
|
if (!this._connected) {
|
|
269
270
|
onDisconnected();
|
|
270
271
|
}
|
|
271
|
-
this.emit("connected", session);
|
|
272
272
|
});
|
|
273
273
|
|
|
274
274
|
this._voltConnection.on("error", (err) => {
|
|
275
275
|
// Should auto-reconnect.
|
|
276
276
|
log("Volt connection error [%s]", err.message);
|
|
277
277
|
if (this._connected) {
|
|
278
|
-
onDisconnected();
|
|
279
278
|
this.emit("connected", false);
|
|
279
|
+
onDisconnected();
|
|
280
280
|
}
|
|
281
281
|
|
|
282
282
|
if (err.message.endsWith("session invalid")) {
|
package/src/volt-client.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveVoltConfig } from "@tdxvolt/volt-utility";
|
|
1
2
|
import debug from "debug";
|
|
2
3
|
import EventEmitter from "events";
|
|
3
4
|
import fs from "fs";
|
|
@@ -11,7 +12,6 @@ import {
|
|
|
11
12
|
unaryCallInternal
|
|
12
13
|
} from "./volt-client-internal.js";
|
|
13
14
|
import { VoltCredential } from "./volt-credential.js";
|
|
14
|
-
import { resolveVoltConfig } from "@tdxvolt/volt-utility";
|
|
15
15
|
|
|
16
16
|
const { readFile } = fs.promises;
|
|
17
17
|
const log = debug("volt-client-grpc:volt-client");
|
|
@@ -86,12 +86,19 @@ export class VoltClient extends EventEmitter {
|
|
|
86
86
|
* instead of a DID-based authentication session.
|
|
87
87
|
* @param {string} [options.exchangeToken] - optional token to exchange in return for an authenticated session.
|
|
88
88
|
* @param {boolean} [options.waitForAuth] - whether to block and poll on 'prompt' authenticate decisions. Default is true.
|
|
89
|
+
* @param {boolean} [options.noResolve] - whether to skip resolving the Volt configuration. Default is false.
|
|
89
90
|
*/
|
|
90
91
|
async initialise(config, options = {}) {
|
|
91
92
|
log("initialise ", config, options);
|
|
92
93
|
|
|
93
|
-
const {
|
|
94
|
-
|
|
94
|
+
const {
|
|
95
|
+
ownDID,
|
|
96
|
+
noDID,
|
|
97
|
+
didRegistryList,
|
|
98
|
+
exchangeToken,
|
|
99
|
+
extraConfig,
|
|
100
|
+
noResolve
|
|
101
|
+
} = options;
|
|
95
102
|
const waitForAuth =
|
|
96
103
|
options.waitForAuth === undefined ? true : !!options.waitForAuth;
|
|
97
104
|
|
|
@@ -141,10 +148,12 @@ export class VoltClient extends EventEmitter {
|
|
|
141
148
|
throw new Error("client_name property required in config");
|
|
142
149
|
}
|
|
143
150
|
|
|
144
|
-
|
|
145
|
-
this._config.volt
|
|
146
|
-
|
|
147
|
-
|
|
151
|
+
if (!noResolve) {
|
|
152
|
+
this._config.volt = await resolveVoltConfig(
|
|
153
|
+
this._config.volt,
|
|
154
|
+
didRegistryList
|
|
155
|
+
);
|
|
156
|
+
}
|
|
148
157
|
|
|
149
158
|
this._voltConfig = this._config.volt;
|
|
150
159
|
|
|
@@ -207,7 +216,7 @@ export class VoltClient extends EventEmitter {
|
|
|
207
216
|
this._credential.saveCache();
|
|
208
217
|
}
|
|
209
218
|
|
|
210
|
-
return Promise.resolve(this.
|
|
219
|
+
return Promise.resolve(this.credential.config);
|
|
211
220
|
} catch (err) {
|
|
212
221
|
log("failure starting Volt client [%s]", err.message);
|
|
213
222
|
throw err;
|
|
@@ -322,10 +331,18 @@ export class VoltClient extends EventEmitter {
|
|
|
322
331
|
* VoltAPI - resource management
|
|
323
332
|
*/
|
|
324
333
|
|
|
334
|
+
AddRelay(request) {
|
|
335
|
+
return unaryCallInternal.call(this, "AddRelay", request);
|
|
336
|
+
}
|
|
337
|
+
|
|
325
338
|
CanAccessResource(request) {
|
|
326
339
|
return unaryCallInternal.call(this, "CanAccessResource", request);
|
|
327
340
|
}
|
|
328
341
|
|
|
342
|
+
CopyResource(request) {
|
|
343
|
+
return unaryCallInternal.call(this, "CopyResource", request);
|
|
344
|
+
}
|
|
345
|
+
|
|
329
346
|
DeleteResource(request) {
|
|
330
347
|
return unaryCallInternal.call(this, "DeleteResource", request);
|
|
331
348
|
}
|
|
@@ -350,6 +367,10 @@ export class VoltClient extends EventEmitter {
|
|
|
350
367
|
return unaryCallInternal.call(this, "GetResourceDescendants", request);
|
|
351
368
|
}
|
|
352
369
|
|
|
370
|
+
MoveResource(request) {
|
|
371
|
+
return unaryCallInternal.call(this, "MoveResource", request);
|
|
372
|
+
}
|
|
373
|
+
|
|
353
374
|
RequestAccess(request) {
|
|
354
375
|
return unaryCallInternal.call(this, "RequestAccess", request);
|
|
355
376
|
}
|
|
@@ -358,8 +379,44 @@ export class VoltClient extends EventEmitter {
|
|
|
358
379
|
return unaryCallInternal.call(this, "SaveResource", request);
|
|
359
380
|
}
|
|
360
381
|
|
|
361
|
-
|
|
362
|
-
return unaryCallInternal.call(this, "
|
|
382
|
+
SaveDatabase(request) {
|
|
383
|
+
return unaryCallInternal.call(this, "SaveDatabase", request);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
SaveHttpFileServer(request) {
|
|
387
|
+
return unaryCallInternal.call(this, "SaveHttpFileServer", request);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
SaveHttpForwarder(request) {
|
|
391
|
+
return unaryCallInternal.call(this, "SaveHttpForwarder", request);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
SaveHttpRestApiServer(request) {
|
|
395
|
+
return unaryCallInternal.call(this, "SaveHttpRestApiServer", request);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
SaveHttpRestApiNode(request) {
|
|
399
|
+
return unaryCallInternal.call(this, "SaveHttpRestApiNode", request);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
SaveMirroredLink(request) {
|
|
403
|
+
return unaryCallInternal.call(this, "SaveMirroredLink", request);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
SaveSyncDatabase(request) {
|
|
407
|
+
return unaryCallInternal.call(this, "SaveSyncDatabase", request);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
SaveSynapse(request) {
|
|
411
|
+
return unaryCallInternal.call(this, "SaveSynapse", request);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
CreateSynapseConnection(request) {
|
|
415
|
+
return unaryCallInternal.call(this, "CreateSynapseConnection", request);
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
SaveSymbolicLink(request) {
|
|
419
|
+
return unaryCallInternal.call(this, "SaveSymbolicLink", request);
|
|
363
420
|
}
|
|
364
421
|
|
|
365
422
|
SetServiceStatus(request) {
|
|
@@ -374,26 +431,18 @@ export class VoltClient extends EventEmitter {
|
|
|
374
431
|
return unaryCallInternal.call(this, "Authenticate", request);
|
|
375
432
|
}
|
|
376
433
|
|
|
377
|
-
|
|
378
|
-
return unaryCallInternal.call(this, "
|
|
434
|
+
CheckCompatibility(request) {
|
|
435
|
+
return unaryCallInternal.call(this, "CheckCompatibility", request);
|
|
379
436
|
}
|
|
380
437
|
|
|
381
438
|
DeleteAccess(request) {
|
|
382
439
|
return unaryCallInternal.call(this, "DeleteAccess", request);
|
|
383
440
|
}
|
|
384
441
|
|
|
385
|
-
DeleteVolt(request) {
|
|
386
|
-
return unaryCallInternal.call(this, "DeleteVolt", request);
|
|
387
|
-
}
|
|
388
|
-
|
|
389
442
|
GetAccess(request) {
|
|
390
443
|
return unaryCallInternal.call(this, "GetAccess", request);
|
|
391
444
|
}
|
|
392
445
|
|
|
393
|
-
GetBindings(request) {
|
|
394
|
-
return unaryCallInternal.call(this, "GetBindings", request);
|
|
395
|
-
}
|
|
396
|
-
|
|
397
446
|
GetIdentities(request) {
|
|
398
447
|
return unaryCallInternal.call(this, "GetIdentities", request);
|
|
399
448
|
}
|
|
@@ -402,40 +451,44 @@ export class VoltClient extends EventEmitter {
|
|
|
402
451
|
return unaryCallInternal.call(this, "GetIdentity", request);
|
|
403
452
|
}
|
|
404
453
|
|
|
405
|
-
|
|
406
|
-
return unaryCallInternal.call(this, "
|
|
454
|
+
GetOneTimeToken(request) {
|
|
455
|
+
return unaryCallInternal.call(this, "GetOneTimeToken", request);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
GetParameters(request) {
|
|
459
|
+
return unaryCallInternal.call(this, "GetParameters", request);
|
|
407
460
|
}
|
|
408
461
|
|
|
409
462
|
GetPolicy(request) {
|
|
410
463
|
return unaryCallInternal.call(this, "GetPolicy", request);
|
|
411
464
|
}
|
|
412
465
|
|
|
413
|
-
|
|
414
|
-
return unaryCallInternal.call(this, "
|
|
466
|
+
GetSessions(request) {
|
|
467
|
+
return unaryCallInternal.call(this, "GetSessions", request);
|
|
415
468
|
}
|
|
416
469
|
|
|
417
470
|
SaveAccess(request) {
|
|
418
471
|
return unaryCallInternal.call(this, "SaveAccess", request);
|
|
419
472
|
}
|
|
420
473
|
|
|
421
|
-
SaveCloudConnection(request) {
|
|
422
|
-
return unaryCallInternal.call(this, "SaveCloudConnection", request);
|
|
423
|
-
}
|
|
424
|
-
|
|
425
474
|
SaveIdentity(request) {
|
|
426
475
|
return unaryCallInternal.call(this, "SaveIdentity", request);
|
|
427
476
|
}
|
|
428
477
|
|
|
429
|
-
|
|
430
|
-
return unaryCallInternal.call(this, "
|
|
478
|
+
SaveParameters(request) {
|
|
479
|
+
return unaryCallInternal.call(this, "SaveParameters", request);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
SaveSession(request) {
|
|
483
|
+
return unaryCallInternal.call(this, "SaveSession", request);
|
|
431
484
|
}
|
|
432
485
|
|
|
433
486
|
SetAccessRequestDecision(request) {
|
|
434
487
|
return unaryCallInternal.call(this, "SetAccessRequestDecision", request);
|
|
435
488
|
}
|
|
436
489
|
|
|
437
|
-
|
|
438
|
-
return unaryCallInternal.call(this, "
|
|
490
|
+
SetPolicy(request) {
|
|
491
|
+
return unaryCallInternal.call(this, "SetPolicy", request);
|
|
439
492
|
}
|
|
440
493
|
|
|
441
494
|
Shutdown(request) {
|
|
@@ -446,6 +499,16 @@ export class VoltClient extends EventEmitter {
|
|
|
446
499
|
return unaryCallInternal.call(this, "SignVerify", request);
|
|
447
500
|
}
|
|
448
501
|
|
|
502
|
+
/**
|
|
503
|
+
* VoltAPI - streaming (bidi). Use connect() for Connect stream.
|
|
504
|
+
* Invoke is for relay proxying; returns a duplex stream of InvokeRequest/InvokeResponse.
|
|
505
|
+
*/
|
|
506
|
+
Invoke(request) {
|
|
507
|
+
const grpcClient = this.getVoltAPIClient();
|
|
508
|
+
const invokeCall = new GRPCCall(this, "Invoke", "METHOD_TYPE_BIDI");
|
|
509
|
+
return invokeCall.start(grpcClient, request);
|
|
510
|
+
}
|
|
511
|
+
|
|
449
512
|
/**
|
|
450
513
|
* FileAPI
|
|
451
514
|
*/
|
|
@@ -662,6 +725,9 @@ export class VoltClient extends EventEmitter {
|
|
|
662
725
|
return subscribeCall.start(grpcClient, request);
|
|
663
726
|
}
|
|
664
727
|
|
|
728
|
+
/**
|
|
729
|
+
* SyncAPI
|
|
730
|
+
*/
|
|
665
731
|
SyncDocument(request) {
|
|
666
732
|
const grpcClient = this.getVoltAPIClient();
|
|
667
733
|
|
|
@@ -672,4 +738,23 @@ export class VoltClient extends EventEmitter {
|
|
|
672
738
|
);
|
|
673
739
|
return syncDocumentCall.start(grpcClient, request);
|
|
674
740
|
}
|
|
741
|
+
|
|
742
|
+
SetSynapseDocumentMetadata(request) {
|
|
743
|
+
return unaryCallInternal.call(this, "SetSynapseDocumentMetadata", request);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
WatchSynapsePath(request) {
|
|
747
|
+
const grpcClient = this.getVoltAPIClient();
|
|
748
|
+
|
|
749
|
+
const watchPathCall = new GRPCCall(
|
|
750
|
+
this,
|
|
751
|
+
"WatchSynapsePath",
|
|
752
|
+
"METHOD_TYPE_BIDI"
|
|
753
|
+
);
|
|
754
|
+
return watchPathCall.start(grpcClient, request);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
WriteSynapsePath(request) {
|
|
758
|
+
return unaryCallInternal.call(this, "WriteSynapsePath", request);
|
|
759
|
+
}
|
|
675
760
|
}
|
package/src/volt-connection.js
CHANGED
|
@@ -20,6 +20,7 @@ function _cleanUp(immediateReconnect) {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
if (this._dying) {
|
|
23
|
+
log("dying - clearing reconnect timer");
|
|
23
24
|
clearTimeout(this._reconnectTimer);
|
|
24
25
|
} else if (immediateReconnect || (this._autoRetry && !this._reconnectTimer)) {
|
|
25
26
|
this._reconnectTimer = setTimeout(
|
|
@@ -32,6 +33,7 @@ function _cleanUp(immediateReconnect) {
|
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
if (this.call?.writable) {
|
|
36
|
+
log("ending Connect call");
|
|
35
37
|
this.call.end();
|
|
36
38
|
}
|
|
37
39
|
}
|
|
@@ -122,9 +124,7 @@ function _doConnect(connectHello) {
|
|
|
122
124
|
});
|
|
123
125
|
|
|
124
126
|
this.call.on("end", () => {
|
|
125
|
-
|
|
126
|
-
this.emit("connected", false);
|
|
127
|
-
}
|
|
127
|
+
this.emit("connected", false);
|
|
128
128
|
_cleanUp.call(this);
|
|
129
129
|
});
|
|
130
130
|
|