@milaboratories/pl-client 2.16.8 → 2.16.9
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/__external/.pnpm/{@rollup_plugin-typescript@12.1.4_rollup@4.52.4_tslib@2.7.0_typescript@5.6.3 → @rollup_plugin-typescript@12.1.4_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3}/__external/tslib/tslib.es6.cjs +2 -2
- package/dist/__external/.pnpm/{@rollup_plugin-typescript@12.1.4_rollup@4.52.4_tslib@2.7.0_typescript@5.6.3 → @rollup_plugin-typescript@12.1.4_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3}/__external/tslib/tslib.es6.cjs.map +1 -1
- package/dist/__external/.pnpm/{@rollup_plugin-typescript@12.1.4_rollup@4.52.4_tslib@2.7.0_typescript@5.6.3 → @rollup_plugin-typescript@12.1.4_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3}/__external/tslib/tslib.es6.js +2 -2
- package/dist/__external/.pnpm/{@rollup_plugin-typescript@12.1.4_rollup@4.52.4_tslib@2.7.0_typescript@5.6.3 → @rollup_plugin-typescript@12.1.4_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3}/__external/tslib/tslib.es6.js.map +1 -1
- package/dist/core/abstract_stream.d.ts +18 -0
- package/dist/core/abstract_stream.d.ts.map +1 -0
- package/dist/core/client.cjs +6 -6
- package/dist/core/client.cjs.map +1 -1
- package/dist/core/client.d.ts +3 -3
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +6 -6
- package/dist/core/client.js.map +1 -1
- package/dist/core/config.cjs +3 -0
- package/dist/core/config.cjs.map +1 -1
- package/dist/core/config.d.ts +4 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +3 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/driver.cjs +11 -0
- package/dist/core/driver.cjs.map +1 -1
- package/dist/core/driver.d.ts +8 -2
- package/dist/core/driver.d.ts.map +1 -1
- package/dist/core/driver.js +11 -1
- package/dist/core/driver.js.map +1 -1
- package/dist/core/errors.cjs +9 -0
- package/dist/core/errors.cjs.map +1 -1
- package/dist/core/errors.d.ts +1 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +9 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/ll_client.cjs +194 -39
- package/dist/core/ll_client.cjs.map +1 -1
- package/dist/core/ll_client.d.ts +36 -15
- package/dist/core/ll_client.d.ts.map +1 -1
- package/dist/core/ll_client.js +195 -40
- package/dist/core/ll_client.js.map +1 -1
- package/dist/core/ll_transaction.cjs.map +1 -1
- package/dist/core/ll_transaction.d.ts +3 -3
- package/dist/core/ll_transaction.d.ts.map +1 -1
- package/dist/core/ll_transaction.js.map +1 -1
- package/dist/core/transaction.cjs +2 -2
- package/dist/core/transaction.cjs.map +1 -1
- package/dist/core/transaction.js +2 -2
- package/dist/core/transaction.js.map +1 -1
- package/dist/core/type_conversion.cjs +2 -2
- package/dist/core/type_conversion.cjs.map +1 -1
- package/dist/core/type_conversion.d.ts +2 -2
- package/dist/core/type_conversion.d.ts.map +1 -1
- package/dist/core/type_conversion.js +2 -2
- package/dist/core/type_conversion.js.map +1 -1
- package/dist/core/unauth_client.cjs +4 -8
- package/dist/core/unauth_client.cjs.map +1 -1
- package/dist/core/unauth_client.d.ts +1 -1
- package/dist/core/unauth_client.d.ts.map +1 -1
- package/dist/core/unauth_client.js +4 -8
- package/dist/core/unauth_client.js.map +1 -1
- package/dist/core/wire.d.ts +34 -0
- package/dist/core/wire.d.ts.map +1 -0
- package/dist/index.cjs +4 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs.map +1 -0
- package/dist/{proto → proto-grpc}/github.com/googleapis/googleapis/google/rpc/status.d.ts +4 -2
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js.map +1 -0
- package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api.cjs +25 -25
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +1 -0
- package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api.js +25 -25
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/import.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.d.ts +73 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.d.ts.map +1 -0
- package/dist/{proto → proto-grpc}/google/api/http.d.ts +28 -32
- package/dist/proto-grpc/google/api/http.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/any.cjs.map +1 -0
- package/dist/proto-grpc/google/protobuf/any.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/any.js.map +1 -0
- package/dist/{proto → proto-grpc}/google/protobuf/descriptor.d.ts +6 -152
- package/dist/proto-grpc/google/protobuf/descriptor.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/duration.cjs.map +1 -0
- package/dist/proto-grpc/google/protobuf/duration.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/duration.js.map +1 -0
- package/dist/proto-grpc/google/protobuf/empty.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/struct.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/timestamp.cjs.map +1 -0
- package/dist/proto-grpc/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/timestamp.js.map +1 -0
- package/dist/{proto → proto-grpc}/google/protobuf/wrappers.d.ts +0 -27
- package/dist/proto-grpc/google/protobuf/wrappers.d.ts.map +1 -0
- package/dist/proto-grpc/google/rpc/code.cjs +240 -0
- package/dist/proto-grpc/google/rpc/code.cjs.map +1 -0
- package/dist/proto-grpc/google/rpc/code.d.ts +219 -0
- package/dist/proto-grpc/google/rpc/code.d.ts.map +1 -0
- package/dist/proto-grpc/google/rpc/code.js +240 -0
- package/dist/proto-grpc/google/rpc/code.js.map +1 -0
- package/dist/proto-grpc/google/rpc/error_details.d.ts +654 -0
- package/dist/proto-grpc/google/rpc/error_details.d.ts.map +1 -0
- package/dist/proto-grpc/google/rpc/http.d.ts +121 -0
- package/dist/proto-grpc/google/rpc/http.d.ts.map +1 -0
- package/dist/proto-grpc/google/rpc/status.d.ts +55 -0
- package/dist/proto-grpc/google/rpc/status.d.ts.map +1 -0
- package/dist/proto-rest/index.cjs +64 -0
- package/dist/proto-rest/index.cjs.map +1 -0
- package/dist/proto-rest/index.d.ts +23 -0
- package/dist/proto-rest/index.d.ts.map +1 -0
- package/dist/proto-rest/index.js +61 -0
- package/dist/proto-rest/index.js.map +1 -0
- package/dist/proto-rest/plapi.d.ts +1488 -0
- package/dist/proto-rest/plapi.d.ts.map +1 -0
- package/package.json +7 -4
- package/src/core/abstract_stream.ts +25 -0
- package/src/core/client.ts +8 -8
- package/src/core/config.ts +9 -0
- package/src/core/driver.ts +13 -2
- package/src/core/errors.ts +7 -1
- package/src/core/ll_client.test.ts +1 -1
- package/src/core/ll_client.ts +212 -42
- package/src/core/ll_transaction.test.ts +1 -1
- package/src/core/ll_transaction.ts +4 -4
- package/src/core/transaction.ts +1 -1
- package/src/core/type_conversion.ts +3 -3
- package/src/core/unauth_client.test.ts +6 -0
- package/src/core/unauth_client.ts +8 -12
- package/src/core/wire.ts +40 -0
- package/src/index.ts +3 -1
- package/src/{proto → proto-grpc}/github.com/googleapis/googleapis/google/rpc/status.ts +5 -3
- package/src/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api.ts +25 -25
- package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.ts +209 -0
- package/src/{proto → proto-grpc}/google/api/http.ts +29 -33
- package/src/{proto → proto-grpc}/google/protobuf/descriptor.ts +11 -221
- package/src/{proto → proto-grpc}/google/protobuf/wrappers.ts +4 -38
- package/src/proto-grpc/google/rpc/code.ts +236 -0
- package/src/proto-grpc/google/rpc/error_details.ts +1386 -0
- package/src/proto-grpc/google/rpc/http.ts +307 -0
- package/src/proto-grpc/google/rpc/status.ts +127 -0
- package/src/proto-rest/index.ts +83 -0
- package/src/proto-rest/plapi.ts +1488 -0
- package/dist/core/grpc.d.ts +0 -16
- package/dist/core/grpc.d.ts.map +0 -1
- package/dist/core/http.d.ts +0 -2
- package/dist/core/http.d.ts.map +0 -1
- package/dist/proto/github.com/googleapis/googleapis/google/rpc/status.cjs.map +0 -1
- package/dist/proto/github.com/googleapis/googleapis/google/rpc/status.d.ts.map +0 -1
- package/dist/proto/github.com/googleapis/googleapis/google/rpc/status.js.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.d.ts +0 -40
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.d.ts +0 -116
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.d.ts +0 -46
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.d.ts +0 -170
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.d.ts +0 -51
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.d.ts +0 -176
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.d.ts +0 -131
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.d.ts +0 -320
- package/dist/proto/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/api.cjs.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/api.client.js.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/api.js.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/api_types.js.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/base_types.js.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/import.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts.map +0 -1
- package/dist/proto/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js.map +0 -1
- package/dist/proto/google/api/http.d.ts.map +0 -1
- package/dist/proto/google/protobuf/any.cjs.map +0 -1
- package/dist/proto/google/protobuf/any.d.ts.map +0 -1
- package/dist/proto/google/protobuf/any.js.map +0 -1
- package/dist/proto/google/protobuf/descriptor.d.ts.map +0 -1
- package/dist/proto/google/protobuf/duration.cjs.map +0 -1
- package/dist/proto/google/protobuf/duration.d.ts.map +0 -1
- package/dist/proto/google/protobuf/duration.js.map +0 -1
- package/dist/proto/google/protobuf/empty.d.ts.map +0 -1
- package/dist/proto/google/protobuf/struct.d.ts.map +0 -1
- package/dist/proto/google/protobuf/timestamp.cjs.map +0 -1
- package/dist/proto/google/protobuf/timestamp.d.ts.map +0 -1
- package/dist/proto/google/protobuf/timestamp.js.map +0 -1
- package/dist/proto/google/protobuf/wrappers.d.ts.map +0 -1
- package/src/core/grpc.ts +0 -17
- package/src/core/http.ts +0 -178
- package/src/proto/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.ts +0 -45
- package/src/proto/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.ts +0 -313
- package/src/proto/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.ts +0 -51
- package/src/proto/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.ts +0 -406
- package/src/proto/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.ts +0 -59
- package/src/proto/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.ts +0 -489
- package/src/proto/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.ts +0 -148
- package/src/proto/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.ts +0 -719
- /package/dist/{proto → proto-grpc}/github.com/googleapis/googleapis/google/rpc/status.cjs +0 -0
- /package/dist/{proto → proto-grpc}/github.com/googleapis/googleapis/google/rpc/status.js +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api.client.js +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api_types.js +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/base_types.js +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/import.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/any.cjs +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/any.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/any.js +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/duration.cjs +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/duration.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/duration.js +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/empty.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/struct.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/timestamp.cjs +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/timestamp.d.ts +0 -0
- /package/dist/{proto → proto-grpc}/google/protobuf/timestamp.js +0 -0
- /package/src/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api.client.ts +0 -0
- /package/src/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/api_types.ts +0 -0
- /package/src/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/base_types.ts +0 -0
- /package/src/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/import.ts +0 -0
- /package/src/{proto → proto-grpc}/github.com/milaboratory/pl/plapi/plapiproto/resource_types.ts +0 -0
- /package/src/{proto → proto-grpc}/google/protobuf/any.ts +0 -0
- /package/src/{proto → proto-grpc}/google/protobuf/duration.ts +0 -0
- /package/src/{proto → proto-grpc}/google/protobuf/empty.ts +0 -0
- /package/src/{proto → proto-grpc}/google/protobuf/struct.ts +0 -0
- /package/src/{proto → proto-grpc}/google/protobuf/timestamp.ts +0 -0
package/dist/core/ll_client.cjs
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var api_client = require('../proto/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs');
|
|
3
|
+
var api_client = require('../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs');
|
|
4
4
|
var grpcJs = require('@grpc/grpc-js');
|
|
5
5
|
var config = require('./config.cjs');
|
|
6
6
|
var grpcTransport = require('@protobuf-ts/grpc-transport');
|
|
7
7
|
var ll_transaction = require('./ll_transaction.cjs');
|
|
8
8
|
var pl = require('../util/pl.cjs');
|
|
9
|
+
var undici = require('undici');
|
|
9
10
|
var auth = require('./auth.cjs');
|
|
10
11
|
var plHttp = require('@milaboratories/pl-http');
|
|
11
12
|
var plModelCommon = require('@milaboratories/pl-model-common');
|
|
13
|
+
var index = require('../proto-rest/index.cjs');
|
|
14
|
+
var tsHelpers = require('@milaboratories/ts-helpers');
|
|
15
|
+
var code = require('../proto-grpc/google/rpc/code.cjs');
|
|
12
16
|
|
|
13
|
-
class
|
|
14
|
-
|
|
17
|
+
class WireClientProviderImpl {
|
|
18
|
+
wireOpts;
|
|
15
19
|
clientConstructor;
|
|
16
20
|
client = undefined;
|
|
17
|
-
constructor(
|
|
18
|
-
this.
|
|
21
|
+
constructor(wireOpts, clientConstructor) {
|
|
22
|
+
this.wireOpts = wireOpts;
|
|
19
23
|
this.clientConstructor = clientConstructor;
|
|
20
24
|
}
|
|
21
25
|
reset() {
|
|
@@ -23,7 +27,7 @@ class GrpcClientProviderImpl {
|
|
|
23
27
|
}
|
|
24
28
|
get() {
|
|
25
29
|
if (this.client === undefined)
|
|
26
|
-
this.client = this.clientConstructor(this.
|
|
30
|
+
this.client = this.clientConstructor(this.wireOpts());
|
|
27
31
|
return this.client;
|
|
28
32
|
}
|
|
29
33
|
}
|
|
@@ -43,44 +47,87 @@ class LLPlClient {
|
|
|
43
47
|
refreshTimestamp;
|
|
44
48
|
_status = 'OK';
|
|
45
49
|
statusListener;
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
_wireProto = undefined;
|
|
51
|
+
_wireConn;
|
|
52
|
+
_restInterceptors;
|
|
53
|
+
_restMiddlewares;
|
|
54
|
+
_grpcInterceptors;
|
|
48
55
|
providers = [];
|
|
49
|
-
|
|
56
|
+
clientProvider;
|
|
50
57
|
httpDispatcher;
|
|
51
58
|
constructor(configOrAddress, ops = {}) {
|
|
52
59
|
this.ops = ops;
|
|
53
60
|
this.conf = typeof configOrAddress === 'string'
|
|
54
61
|
? config.plAddressToConfig(configOrAddress)
|
|
55
62
|
: configOrAddress;
|
|
56
|
-
|
|
57
|
-
const { auth: auth$1, statusListener, shouldUseGzip } = ops;
|
|
63
|
+
const { auth: auth$1, statusListener } = ops;
|
|
58
64
|
if (auth$1 !== undefined) {
|
|
59
65
|
this.refreshTimestamp = auth.inferAuthRefreshTime(auth$1.authInformation, this.conf.authMaxRefreshSeconds);
|
|
60
|
-
this.grpcInterceptors.push(this.createAuthInterceptor());
|
|
61
66
|
this.authInformation = auth$1.authInformation;
|
|
62
67
|
this.onAuthUpdate = auth$1.onUpdate;
|
|
63
68
|
this.onAuthRefreshProblem = auth$1.onUpdateError;
|
|
64
69
|
this.onAuthError = auth$1.onAuthError;
|
|
65
70
|
}
|
|
66
|
-
this.
|
|
67
|
-
|
|
68
|
-
this.
|
|
71
|
+
this._restInterceptors = [];
|
|
72
|
+
this._restMiddlewares = [];
|
|
73
|
+
this._grpcInterceptors = [];
|
|
74
|
+
if (auth$1 !== undefined) {
|
|
75
|
+
this._restInterceptors.push(this.createRestAuthInterceptor());
|
|
76
|
+
this._grpcInterceptors.push(this.createGrpcAuthInterceptor());
|
|
77
|
+
}
|
|
78
|
+
this._restInterceptors.push(undici.interceptors.retry({ statusCodes: [] })); // Handle errors with openapi-fetch middleware.
|
|
79
|
+
this._restMiddlewares.push(this.createRestErrorMiddleware());
|
|
80
|
+
this._grpcInterceptors.push(this.createGrpcErrorInterceptor());
|
|
69
81
|
this.httpDispatcher = plHttp.defaultHttpDispatcher(this.conf.httpProxy);
|
|
82
|
+
this.initWireConnection();
|
|
70
83
|
if (statusListener !== undefined) {
|
|
71
84
|
this.statusListener = statusListener;
|
|
72
85
|
statusListener(this._status);
|
|
73
86
|
}
|
|
74
|
-
this.
|
|
87
|
+
this.clientProvider = this.createWireClientProvider((wireConn) => {
|
|
88
|
+
if (wireConn.type === 'grpc') {
|
|
89
|
+
return new api_client.PlatformClient(wireConn.Transport);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return index.createClient({
|
|
93
|
+
hostAndPort: wireConn.Config.hostAndPort,
|
|
94
|
+
ssl: wireConn.Config.ssl,
|
|
95
|
+
dispatcher: wireConn.Dispatcher,
|
|
96
|
+
middlewares: wireConn.Middlewares,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
initWireConnection() {
|
|
102
|
+
if (this._wireProto === undefined) {
|
|
103
|
+
// TODO: implement automatic server mode detection
|
|
104
|
+
this._wireProto = this.conf.wireProtocol ?? 'grpc';
|
|
105
|
+
}
|
|
106
|
+
switch (this._wireProto) {
|
|
107
|
+
case 'rest':
|
|
108
|
+
this.initRestConnection();
|
|
109
|
+
return;
|
|
110
|
+
case 'grpc':
|
|
111
|
+
this.initGrpcConnection(this.ops.shouldUseGzip ?? false);
|
|
112
|
+
return;
|
|
113
|
+
default:
|
|
114
|
+
((v) => {
|
|
115
|
+
throw new Error(`Unsupported wire protocol '${v}'. Use one of: ${config.SUPPORTED_WIRE_PROTOCOLS.join(', ')}`);
|
|
116
|
+
})(this._wireProto);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
initRestConnection() {
|
|
120
|
+
const dispatcher = plHttp.defaultHttpDispatcher(this.conf.httpProxy, this._restInterceptors);
|
|
121
|
+
this._replaceWireConnection({ type: 'rest', Config: this.conf, Dispatcher: dispatcher, Middlewares: this._restMiddlewares });
|
|
75
122
|
}
|
|
76
123
|
/**
|
|
77
|
-
* Initializes (or reinitializes) _grpcTransport
|
|
124
|
+
* Initializes (or reinitializes) _grpcTransport
|
|
78
125
|
* @param gzip - whether to enable gzip compression
|
|
79
126
|
*/
|
|
80
|
-
|
|
127
|
+
initGrpcConnection(gzip) {
|
|
81
128
|
const clientOptions = {
|
|
82
129
|
'grpc.keepalive_time_ms': 30_000, // 30 seconds
|
|
83
|
-
'interceptors': this.
|
|
130
|
+
'interceptors': this._grpcInterceptors,
|
|
84
131
|
};
|
|
85
132
|
if (gzip)
|
|
86
133
|
clientOptions['grpc.default_compression_algorithm'] = grpcJs.compressionAlgorithms.gzip;
|
|
@@ -117,8 +164,11 @@ class LLPlClient {
|
|
|
117
164
|
else {
|
|
118
165
|
delete process.env.grpc_proxy;
|
|
119
166
|
}
|
|
120
|
-
|
|
121
|
-
|
|
167
|
+
this._replaceWireConnection({ type: 'grpc', Transport: new grpcTransport.GrpcTransport(grpcOptions) });
|
|
168
|
+
}
|
|
169
|
+
_replaceWireConnection(newConn) {
|
|
170
|
+
const oldConn = this._wireConn;
|
|
171
|
+
this._wireConn = newConn;
|
|
122
172
|
// Reset all providers to let them reinitialize their clients
|
|
123
173
|
for (let i = 0; i < this.providers.length; i++) {
|
|
124
174
|
const provider = this.providers[i].deref();
|
|
@@ -131,8 +181,8 @@ class LLPlClient {
|
|
|
131
181
|
provider.reset();
|
|
132
182
|
}
|
|
133
183
|
}
|
|
134
|
-
if (
|
|
135
|
-
|
|
184
|
+
if (oldConn !== undefined && oldConn.type === 'grpc')
|
|
185
|
+
oldConn.Transport.close();
|
|
136
186
|
}
|
|
137
187
|
providerCleanupCounter = 0;
|
|
138
188
|
/**
|
|
@@ -140,7 +190,7 @@ class LLPlClient {
|
|
|
140
190
|
*
|
|
141
191
|
* @param clientConstructor - a factory function that creates a grpc client
|
|
142
192
|
*/
|
|
143
|
-
|
|
193
|
+
createWireClientProvider(clientConstructor) {
|
|
144
194
|
// We need to cleanup providers periodically to avoid memory leaks.
|
|
145
195
|
// This is a simple heuristic to avoid memory leaks.
|
|
146
196
|
// We could use a more sophisticated algorithm, but this is good enough for now.
|
|
@@ -155,12 +205,12 @@ class LLPlClient {
|
|
|
155
205
|
}
|
|
156
206
|
this.providerCleanupCounter = 0;
|
|
157
207
|
}
|
|
158
|
-
const provider = new
|
|
208
|
+
const provider = new WireClientProviderImpl(() => this._wireConn, clientConstructor);
|
|
159
209
|
this.providers.push(new WeakRef(provider));
|
|
160
210
|
return provider;
|
|
161
211
|
}
|
|
162
|
-
get
|
|
163
|
-
return this.
|
|
212
|
+
get wireConnection() {
|
|
213
|
+
return this._wireConn;
|
|
164
214
|
}
|
|
165
215
|
/** Returns true if client is authenticated. Even with anonymous auth information
|
|
166
216
|
* connection is considered authenticated. Unauthenticated clients are used for
|
|
@@ -202,13 +252,8 @@ class LLPlClient {
|
|
|
202
252
|
this.authRefreshInProgress = true;
|
|
203
253
|
void (async () => {
|
|
204
254
|
try {
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
seconds: BigInt(this.conf.authTTLSeconds),
|
|
208
|
-
nanos: 0,
|
|
209
|
-
},
|
|
210
|
-
}).response;
|
|
211
|
-
this.authInformation = { jwtToken: response.token };
|
|
255
|
+
const token = await this.getJwtToken(BigInt(this.conf.authTTLSeconds));
|
|
256
|
+
this.authInformation = { jwtToken: token };
|
|
212
257
|
this.refreshTimestamp = auth.inferAuthRefreshTime(this.authInformation, this.conf.authMaxRefreshSeconds);
|
|
213
258
|
if (this.onAuthUpdate)
|
|
214
259
|
this.onAuthUpdate(this.authInformation);
|
|
@@ -222,8 +267,39 @@ class LLPlClient {
|
|
|
222
267
|
}
|
|
223
268
|
})();
|
|
224
269
|
}
|
|
225
|
-
/**
|
|
226
|
-
|
|
270
|
+
/**
|
|
271
|
+
* Creates middleware that parses error responses and handles them centrally.
|
|
272
|
+
* This middleware runs before openapi-fetch parses the response, so we need to
|
|
273
|
+
* manually parse the response body for error responses.
|
|
274
|
+
*/
|
|
275
|
+
createRestErrorMiddleware() {
|
|
276
|
+
return {
|
|
277
|
+
onResponse: async ({ request: _request, response, options: _options }) => {
|
|
278
|
+
const { body: body, ...resOptions } = response;
|
|
279
|
+
if ([502, 503, 504].includes(response.status)) {
|
|
280
|
+
// Service unavailable, bad gateway, gateway timeout
|
|
281
|
+
this.updateStatus('Disconnected');
|
|
282
|
+
return new Response(body, { ...resOptions, status: response.status });
|
|
283
|
+
}
|
|
284
|
+
const respErr = await index.parseResponseError(response);
|
|
285
|
+
if (!respErr.error) {
|
|
286
|
+
// No error: nice!
|
|
287
|
+
return new Response(respErr.origBody ?? body, { ...resOptions, status: response.status });
|
|
288
|
+
}
|
|
289
|
+
if (typeof respErr.error === 'string') {
|
|
290
|
+
// Non-standard error or normal response: let later middleware to deal wit it.
|
|
291
|
+
return new Response(respErr.error, { ...resOptions, status: response.status });
|
|
292
|
+
}
|
|
293
|
+
if (respErr.error.code === code.Code.UNAUTHENTICATED) {
|
|
294
|
+
this.updateStatus('Unauthenticated');
|
|
295
|
+
}
|
|
296
|
+
// Let later middleware to deal with standard gRPC error.
|
|
297
|
+
return new Response(respErr.origBody, { ...resOptions, status: response.status });
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/** Detects certain errors and update client status accordingly when using GRPC wire connection */
|
|
302
|
+
createGrpcErrorInterceptor() {
|
|
227
303
|
return (options, nextCall) => {
|
|
228
304
|
return new grpcJs.InterceptingCall(nextCall(options), {
|
|
229
305
|
start: (metadata, listener, next) => {
|
|
@@ -242,8 +318,20 @@ class LLPlClient {
|
|
|
242
318
|
});
|
|
243
319
|
};
|
|
244
320
|
}
|
|
321
|
+
createRestAuthInterceptor() {
|
|
322
|
+
return (dispatch) => {
|
|
323
|
+
return (options, handler) => {
|
|
324
|
+
if (this.authInformation?.jwtToken !== undefined) {
|
|
325
|
+
// TODO: check this magic really works and gets called
|
|
326
|
+
options.headers = { ...options.headers, authorization: 'Bearer ' + this.authInformation.jwtToken };
|
|
327
|
+
this.refreshAuthInformationIfNeeded();
|
|
328
|
+
}
|
|
329
|
+
return dispatch(options, handler);
|
|
330
|
+
};
|
|
331
|
+
};
|
|
332
|
+
}
|
|
245
333
|
/** Injects authentication information if needed */
|
|
246
|
-
|
|
334
|
+
createGrpcAuthInterceptor() {
|
|
247
335
|
return (options, nextCall) => {
|
|
248
336
|
return new grpcJs.InterceptingCall(nextCall(options), {
|
|
249
337
|
start: (metadata, listener, next) => {
|
|
@@ -259,12 +347,77 @@ class LLPlClient {
|
|
|
259
347
|
});
|
|
260
348
|
};
|
|
261
349
|
}
|
|
350
|
+
async getJwtToken(ttlSeconds, options) {
|
|
351
|
+
const cl = this.clientProvider.get();
|
|
352
|
+
if (cl instanceof api_client.PlatformClient) {
|
|
353
|
+
const meta = {};
|
|
354
|
+
if (options?.authorization)
|
|
355
|
+
meta.authorization = options.authorization;
|
|
356
|
+
return (await cl.getJWTToken({ expiration: { seconds: ttlSeconds, nanos: 0 } }, { meta }).response).token;
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
const headers = {};
|
|
360
|
+
if (options?.authorization)
|
|
361
|
+
headers.authorization = options.authorization;
|
|
362
|
+
const resp = cl.POST('/v1/auth/jwt-token', {
|
|
363
|
+
body: { expiration: `${ttlSeconds}s` },
|
|
364
|
+
headers,
|
|
365
|
+
});
|
|
366
|
+
return tsHelpers.notEmpty((await resp).data).token;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
async ping() {
|
|
370
|
+
const cl = this.clientProvider.get();
|
|
371
|
+
if (cl instanceof api_client.PlatformClient) {
|
|
372
|
+
return (await cl.ping({})).response;
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
return tsHelpers.notEmpty((await cl.GET('/v1/ping')).data);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
async license() {
|
|
379
|
+
const cl = this.clientProvider.get();
|
|
380
|
+
if (cl instanceof api_client.PlatformClient) {
|
|
381
|
+
return (await cl.license({})).response;
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
const resp = tsHelpers.notEmpty((await cl.GET('/v1/license')).data);
|
|
385
|
+
return {
|
|
386
|
+
status: resp.status,
|
|
387
|
+
isOk: resp.isOk,
|
|
388
|
+
responseBody: Uint8Array.from(Buffer.from(resp.responseBody)),
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
async authMethods() {
|
|
393
|
+
const cl = this.clientProvider.get();
|
|
394
|
+
if (cl instanceof api_client.PlatformClient) {
|
|
395
|
+
return (await cl.authMethods({})).response;
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
return tsHelpers.notEmpty((await cl.GET('/v1/auth/methods')).data);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
async txSync(txId) {
|
|
402
|
+
const cl = this.clientProvider.get();
|
|
403
|
+
if (cl instanceof api_client.PlatformClient) {
|
|
404
|
+
await cl.txSync({ txId: BigInt(txId) });
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
(await cl.POST('/v1/tx-sync', { body: { txId: txId.toString() } }));
|
|
408
|
+
}
|
|
409
|
+
}
|
|
262
410
|
createTx(rw, ops = {}) {
|
|
263
411
|
return new ll_transaction.LLPlTransaction((abortSignal) => {
|
|
264
412
|
let totalAbortSignal = abortSignal;
|
|
265
413
|
if (ops.abortSignal)
|
|
266
414
|
totalAbortSignal = AbortSignal.any([totalAbortSignal, ops.abortSignal]);
|
|
267
|
-
|
|
415
|
+
const cl = this.clientProvider.get();
|
|
416
|
+
if (!(cl instanceof api_client.PlatformClient)) {
|
|
417
|
+
// TODO: add WebSockets
|
|
418
|
+
throw new Error('tx is not supported for REST client');
|
|
419
|
+
}
|
|
420
|
+
return cl.tx({
|
|
268
421
|
abort: totalAbortSignal,
|
|
269
422
|
timeout: ops.timeout
|
|
270
423
|
?? (rw ? this.conf.defaultRWTransactionTimeout : this.conf.defaultROTransactionTimeout),
|
|
@@ -273,7 +426,9 @@ class LLPlClient {
|
|
|
273
426
|
}
|
|
274
427
|
/** Closes underlying transport */
|
|
275
428
|
async close() {
|
|
276
|
-
this.
|
|
429
|
+
if (this.wireConnection.type === 'grpc') {
|
|
430
|
+
this.wireConnection.Transport.close();
|
|
431
|
+
}
|
|
277
432
|
await this.httpDispatcher.destroy();
|
|
278
433
|
}
|
|
279
434
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ll_client.cjs","sources":["../../src/core/ll_client.ts"],"sourcesContent":["import { PlatformClient } from '../proto/github.com/milaboratory/pl/plapi/plapiproto/api.client';\nimport type { ClientOptions, Interceptor } from '@grpc/grpc-js';\nimport {\n ChannelCredentials,\n InterceptingCall,\n status as GrpcStatus,\n compressionAlgorithms,\n} from '@grpc/grpc-js';\nimport type {\n AuthInformation,\n AuthOps,\n PlClientConfig,\n PlConnectionStatus,\n PlConnectionStatusListener,\n} from './config';\nimport { plAddressToConfig } from './config';\nimport type { GrpcOptions } from '@protobuf-ts/grpc-transport';\nimport { GrpcTransport } from '@protobuf-ts/grpc-transport';\nimport { LLPlTransaction } from './ll_transaction';\nimport { parsePlJwt } from '../util/pl';\nimport type { Dispatcher } from 'undici';\nimport { inferAuthRefreshTime } from './auth';\nimport { defaultHttpDispatcher } from '@milaboratories/pl-http';\nimport type { GrpcClientProvider, GrpcClientProviderFactory } from './grpc';\nimport { parseHttpAuth } from '@milaboratories/pl-model-common';\n\nexport interface PlCallOps {\n timeout?: number;\n abortSignal?: AbortSignal;\n}\n\nclass GrpcClientProviderImpl<Client> implements GrpcClientProvider<Client> {\n private client: Client | undefined = undefined;\n\n constructor(private readonly grpcTransport: () => GrpcTransport, private readonly clientConstructor: (transport: GrpcTransport) => Client) {}\n\n public reset(): void {\n this.client = undefined;\n }\n\n public get(): Client {\n if (this.client === undefined)\n this.client = this.clientConstructor(this.grpcTransport());\n return this.client;\n }\n}\n\n/** Abstract out low level networking and authorization details */\nexport class LLPlClient implements GrpcClientProviderFactory {\n public readonly conf: PlClientConfig;\n\n /** Initial authorization information */\n private authInformation?: AuthInformation;\n /** Will be executed by the client when it is required */\n private readonly onAuthUpdate?: (newInfo: AuthInformation) => void;\n /** Will be executed if auth-related error happens during normal client operation */\n private readonly onAuthError?: () => void;\n /** Will be executed by the client when it is required */\n private readonly onAuthRefreshProblem?: (error: unknown) => void;\n /** Threshold after which auth info refresh is required */\n private refreshTimestamp?: number;\n\n private _status: PlConnectionStatus = 'OK';\n private readonly statusListener?: PlConnectionStatusListener;\n\n private readonly grpcInterceptors: Interceptor[];\n private _grpcTransport!: GrpcTransport;\n private readonly providers: WeakRef<GrpcClientProviderImpl<any>>[] = [];\n\n public readonly grpcPl: GrpcClientProvider<PlatformClient>;\n\n public readonly httpDispatcher: Dispatcher;\n\n constructor(\n configOrAddress: PlClientConfig | string,\n private readonly ops: {\n auth?: AuthOps;\n statusListener?: PlConnectionStatusListener;\n shouldUseGzip?: boolean;\n } = {},\n ) {\n this.conf = typeof configOrAddress === 'string'\n ? plAddressToConfig(configOrAddress)\n : configOrAddress;\n\n this.grpcInterceptors = [];\n\n const { auth, statusListener, shouldUseGzip } = ops;\n\n if (auth !== undefined) {\n this.refreshTimestamp = inferAuthRefreshTime(\n auth.authInformation,\n this.conf.authMaxRefreshSeconds,\n );\n this.grpcInterceptors.push(this.createAuthInterceptor());\n this.authInformation = auth.authInformation;\n this.onAuthUpdate = auth.onUpdate;\n this.onAuthRefreshProblem = auth.onUpdateError;\n this.onAuthError = auth.onAuthError;\n }\n\n this.grpcInterceptors.push(this.createErrorInterceptor());\n\n // initialize _grpcTransport and _grpcPl\n this.initGrpc(shouldUseGzip ?? false);\n\n this.httpDispatcher = defaultHttpDispatcher(this.conf.httpProxy);\n\n if (statusListener !== undefined) {\n this.statusListener = statusListener;\n statusListener(this._status);\n }\n\n this.grpcPl = this.createGrpcClientProvider((transport) => new PlatformClient(transport));\n }\n\n /**\n * Initializes (or reinitializes) _grpcTransport and _grpcPl\n * @param gzip - whether to enable gzip compression\n */\n private initGrpc(gzip: boolean) {\n const clientOptions: ClientOptions = {\n 'grpc.keepalive_time_ms': 30_000, // 30 seconds\n 'interceptors': this.grpcInterceptors,\n };\n\n if (gzip) clientOptions['grpc.default_compression_algorithm'] = compressionAlgorithms.gzip;\n\n //\n // Leaving it here for now\n // https://github.com/grpc/grpc-node/issues/2788\n //\n // We should implement message pooling algorithm to overcome hardcoded NO_DELAY behaviour\n // of HTTP/2 and allow our small messages to batch together.\n //\n const grpcOptions: GrpcOptions = {\n host: this.conf.hostAndPort,\n timeout: this.conf.defaultRequestTimeout,\n channelCredentials: this.conf.ssl\n ? ChannelCredentials.createSsl()\n : ChannelCredentials.createInsecure(),\n clientOptions,\n };\n\n const grpcProxy = typeof this.conf.grpcProxy === 'string'\n ? { url: this.conf.grpcProxy }\n : this.conf.grpcProxy;\n\n if (grpcProxy?.url) {\n const url = new URL(grpcProxy.url);\n if (grpcProxy.auth) {\n const parsed = parseHttpAuth(grpcProxy.auth);\n if (parsed.scheme !== 'Basic') {\n throw new Error(`Unsupported auth scheme: ${parsed.scheme as string}.`);\n }\n url.username = parsed.username;\n url.password = parsed.password;\n }\n process.env.grpc_proxy = url.toString();\n } else {\n delete process.env.grpc_proxy;\n }\n\n const oldTransport = this._grpcTransport;\n\n this._grpcTransport = new GrpcTransport(grpcOptions);\n\n // Reset all providers to let them reinitialize their clients\n for (let i = 0; i < this.providers.length; i++) {\n const provider = this.providers[i].deref();\n if (provider === undefined) {\n // at the same time we need to remove providers that are no longer valid\n this.providers.splice(i, 1);\n i--;\n } else {\n provider.reset();\n }\n }\n\n if (oldTransport !== undefined) oldTransport.close();\n }\n\n private providerCleanupCounter = 0;\n\n /**\n * Creates a provider for a grpc client. Returned provider will create fresh client whenever the underlying transport is reset.\n *\n * @param clientConstructor - a factory function that creates a grpc client\n */\n public createGrpcClientProvider<Client>(clientConstructor: (transport: GrpcTransport) => Client): GrpcClientProvider<Client> {\n // We need to cleanup providers periodically to avoid memory leaks.\n // This is a simple heuristic to avoid memory leaks.\n // We could use a more sophisticated algorithm, but this is good enough for now.\n this.providerCleanupCounter++;\n if (this.providerCleanupCounter >= 16) {\n for (let i = 0; i < this.providers.length; i++) {\n const provider = this.providers[i].deref();\n if (provider === undefined) {\n this.providers.splice(i, 1);\n i--;\n }\n }\n this.providerCleanupCounter = 0;\n }\n\n const provider = new GrpcClientProviderImpl<Client>(() => this._grpcTransport, clientConstructor);\n this.providers.push(new WeakRef(provider));\n return provider;\n }\n\n public get grpcTransport(): GrpcTransport {\n return this._grpcTransport;\n }\n\n /** Returns true if client is authenticated. Even with anonymous auth information\n * connection is considered authenticated. Unauthenticated clients are used for\n * login and similar tasks, see {@link UnauthenticatedPlClient}. */\n public get authenticated(): boolean {\n return this.authInformation !== undefined;\n }\n\n /** null means anonymous connection */\n public get authUser(): string | null {\n if (!this.authenticated) throw new Error('Client is not authenticated');\n if (this.authInformation?.jwtToken)\n return parsePlJwt(this.authInformation?.jwtToken).user.login;\n else return null;\n }\n\n private updateStatus(newStatus: PlConnectionStatus) {\n process.nextTick(() => {\n if (this._status !== newStatus) {\n this._status = newStatus;\n if (this.statusListener !== undefined) this.statusListener(this._status);\n if (this.onAuthError !== undefined) this.onAuthError();\n }\n });\n }\n\n public get status(): PlConnectionStatus {\n return this._status;\n }\n\n private authRefreshInProgress: boolean = false;\n\n private refreshAuthInformationIfNeeded(): void {\n if (\n this.refreshTimestamp === undefined\n || Date.now() < this.refreshTimestamp\n || this.authRefreshInProgress\n || this._status === 'Unauthenticated'\n )\n return;\n\n // Running refresh in background`\n this.authRefreshInProgress = true;\n void (async () => {\n try {\n const response = await this.grpcPl.get().getJWTToken({\n expiration: {\n seconds: BigInt(this.conf.authTTLSeconds),\n nanos: 0,\n },\n }).response;\n this.authInformation = { jwtToken: response.token };\n this.refreshTimestamp = inferAuthRefreshTime(\n this.authInformation,\n this.conf.authMaxRefreshSeconds,\n );\n if (this.onAuthUpdate) this.onAuthUpdate(this.authInformation);\n } catch (e: unknown) {\n if (this.onAuthRefreshProblem) this.onAuthRefreshProblem(e);\n } finally {\n this.authRefreshInProgress = false;\n }\n })();\n }\n\n /** Detects certain errors and update client status accordingly */\n private createErrorInterceptor(): Interceptor {\n return (options, nextCall) => {\n return new InterceptingCall(nextCall(options), {\n start: (metadata, listener, next) => {\n next(metadata, {\n onReceiveStatus: (status, next) => {\n if (status.code == GrpcStatus.UNAUTHENTICATED)\n // (!!!) don't change to \"===\"\n this.updateStatus('Unauthenticated');\n if (status.code == GrpcStatus.UNAVAILABLE)\n // (!!!) don't change to \"===\"\n this.updateStatus('Disconnected');\n next(status);\n },\n });\n },\n });\n };\n }\n\n /** Injects authentication information if needed */\n private createAuthInterceptor(): Interceptor {\n return (options, nextCall) => {\n return new InterceptingCall(nextCall(options), {\n start: (metadata, listener, next) => {\n if (this.authInformation?.jwtToken !== undefined) {\n metadata.set('authorization', 'Bearer ' + this.authInformation.jwtToken);\n this.refreshAuthInformationIfNeeded();\n next(metadata, listener);\n } else {\n next(metadata, listener);\n }\n },\n });\n };\n }\n\n createTx(rw: boolean, ops: PlCallOps = {}): LLPlTransaction {\n return new LLPlTransaction((abortSignal) => {\n let totalAbortSignal = abortSignal;\n if (ops.abortSignal) totalAbortSignal = AbortSignal.any([totalAbortSignal, ops.abortSignal]);\n return this.grpcPl.get().tx({\n abort: totalAbortSignal,\n timeout: ops.timeout\n ?? (rw ? this.conf.defaultRWTransactionTimeout : this.conf.defaultROTransactionTimeout),\n });\n });\n }\n\n /** Closes underlying transport */\n public async close() {\n this.grpcTransport.close();\n await this.httpDispatcher.destroy();\n }\n}\n"],"names":["plAddressToConfig","auth","inferAuthRefreshTime","defaultHttpDispatcher","PlatformClient","compressionAlgorithms","ChannelCredentials","parseHttpAuth","GrpcTransport","parsePlJwt","InterceptingCall","GrpcStatus","LLPlTransaction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ll_client.cjs","sources":["../../src/core/ll_client.ts"],"sourcesContent":["import { PlatformClient as GrpcPlApiClient } from '../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client';\nimport type { ClientOptions, Interceptor } from '@grpc/grpc-js';\nimport {\n ChannelCredentials,\n InterceptingCall,\n status as GrpcStatus,\n compressionAlgorithms,\n} from '@grpc/grpc-js';\nimport type {\n AuthInformation,\n AuthOps,\n PlClientConfig,\n PlConnectionStatus,\n PlConnectionStatusListener,\n} from './config';\nimport { plAddressToConfig, type wireProtocol, SUPPORTED_WIRE_PROTOCOLS } from './config';\nimport type { GrpcOptions } from '@protobuf-ts/grpc-transport';\nimport { GrpcTransport } from '@protobuf-ts/grpc-transport';\nimport { LLPlTransaction } from './ll_transaction';\nimport { parsePlJwt } from '../util/pl';\nimport { type Dispatcher, interceptors } from 'undici';\nimport type { Middleware } from 'openapi-fetch';\nimport { inferAuthRefreshTime } from './auth';\nimport { defaultHttpDispatcher } from '@milaboratories/pl-http';\nimport type { WireClientProvider, WireClientProviderFactory, WireConnection } from './wire';\nimport { parseHttpAuth } from '@milaboratories/pl-model-common';\nimport type * as grpcTypes from '../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api';\nimport { type PlApiPaths, type PlRestClientType, createClient, parseResponseError } from '../proto-rest';\nimport { notEmpty } from '@milaboratories/ts-helpers';\nimport { Code } from '../proto-grpc/google/rpc/code';\n\nexport interface PlCallOps {\n timeout?: number;\n abortSignal?: AbortSignal;\n}\n\nclass WireClientProviderImpl<Client> implements WireClientProvider<Client> {\n private client: Client | undefined = undefined;\n\n constructor(private readonly wireOpts: () => WireConnection, private readonly clientConstructor: (wireOpts: WireConnection) => Client) {}\n\n public reset(): void {\n this.client = undefined;\n }\n\n public get(): Client {\n if (this.client === undefined)\n this.client = this.clientConstructor(this.wireOpts());\n return this.client;\n }\n}\n\n/** Abstract out low level networking and authorization details */\nexport class LLPlClient implements WireClientProviderFactory {\n public readonly conf: PlClientConfig;\n\n /** Initial authorization information */\n private authInformation?: AuthInformation;\n /** Will be executed by the client when it is required */\n private readonly onAuthUpdate?: (newInfo: AuthInformation) => void;\n /** Will be executed if auth-related error happens during normal client operation */\n private readonly onAuthError?: () => void;\n /** Will be executed by the client when it is required */\n private readonly onAuthRefreshProblem?: (error: unknown) => void;\n /** Threshold after which auth info refresh is required */\n private refreshTimestamp?: number;\n\n private _status: PlConnectionStatus = 'OK';\n private readonly statusListener?: PlConnectionStatusListener;\n\n private _wireProto: wireProtocol | undefined = undefined;\n private _wireConn!: WireConnection;\n\n private readonly _restInterceptors: Dispatcher.DispatcherComposeInterceptor[];\n private readonly _restMiddlewares: Middleware[];\n private readonly _grpcInterceptors: Interceptor[];\n private readonly providers: WeakRef<WireClientProviderImpl<any>>[] = [];\n\n public readonly clientProvider: WireClientProvider<PlRestClientType | GrpcPlApiClient>;\n\n public readonly httpDispatcher: Dispatcher;\n\n constructor(\n configOrAddress: PlClientConfig | string,\n private readonly ops: {\n auth?: AuthOps;\n statusListener?: PlConnectionStatusListener;\n shouldUseGzip?: boolean;\n } = {},\n ) {\n this.conf = typeof configOrAddress === 'string'\n ? plAddressToConfig(configOrAddress)\n : configOrAddress;\n\n const { auth, statusListener } = ops;\n\n if (auth !== undefined) {\n this.refreshTimestamp = inferAuthRefreshTime(\n auth.authInformation,\n this.conf.authMaxRefreshSeconds,\n );\n this.authInformation = auth.authInformation;\n this.onAuthUpdate = auth.onUpdate;\n this.onAuthRefreshProblem = auth.onUpdateError;\n this.onAuthError = auth.onAuthError;\n }\n\n this._restInterceptors = [];\n this._restMiddlewares = [];\n this._grpcInterceptors = [];\n\n if (auth !== undefined) {\n this._restInterceptors.push(this.createRestAuthInterceptor());\n this._grpcInterceptors.push(this.createGrpcAuthInterceptor());\n }\n this._restInterceptors.push(interceptors.retry({ statusCodes: [] })); // Handle errors with openapi-fetch middleware.\n this._restMiddlewares.push(this.createRestErrorMiddleware());\n this._grpcInterceptors.push(this.createGrpcErrorInterceptor());\n\n this.httpDispatcher = defaultHttpDispatcher(this.conf.httpProxy);\n\n this.initWireConnection();\n\n if (statusListener !== undefined) {\n this.statusListener = statusListener;\n statusListener(this._status);\n }\n\n this.clientProvider = this.createWireClientProvider((wireConn) => {\n if (wireConn.type === 'grpc') {\n return new GrpcPlApiClient(wireConn.Transport);\n } else {\n return createClient<PlApiPaths>({\n hostAndPort: wireConn.Config.hostAndPort,\n ssl: wireConn.Config.ssl,\n dispatcher: wireConn.Dispatcher,\n middlewares: wireConn.Middlewares,\n });\n }\n });\n }\n\n private initWireConnection() {\n if (this._wireProto === undefined) {\n // TODO: implement automatic server mode detection\n this._wireProto = this.conf.wireProtocol ?? 'grpc';\n }\n\n switch (this._wireProto) {\n case 'rest':\n this.initRestConnection();\n return;\n case 'grpc':\n this.initGrpcConnection(this.ops.shouldUseGzip ?? false);\n return;\n default:\n ((v: never) => {\n throw new Error(`Unsupported wire protocol '${v as string}'. Use one of: ${SUPPORTED_WIRE_PROTOCOLS.join(', ')}`);\n })(this._wireProto);\n }\n }\n\n private initRestConnection(): void {\n const dispatcher = defaultHttpDispatcher(this.conf.httpProxy, this._restInterceptors);\n this._replaceWireConnection({ type: 'rest', Config: this.conf, Dispatcher: dispatcher, Middlewares: this._restMiddlewares });\n }\n\n /**\n * Initializes (or reinitializes) _grpcTransport\n * @param gzip - whether to enable gzip compression\n */\n private initGrpcConnection(gzip: boolean) {\n const clientOptions: ClientOptions = {\n 'grpc.keepalive_time_ms': 30_000, // 30 seconds\n 'interceptors': this._grpcInterceptors,\n };\n\n if (gzip) clientOptions['grpc.default_compression_algorithm'] = compressionAlgorithms.gzip;\n\n //\n // Leaving it here for now\n // https://github.com/grpc/grpc-node/issues/2788\n //\n // We should implement message pooling algorithm to overcome hardcoded NO_DELAY behaviour\n // of HTTP/2 and allow our small messages to batch together.\n //\n const grpcOptions: GrpcOptions = {\n host: this.conf.hostAndPort,\n timeout: this.conf.defaultRequestTimeout,\n channelCredentials: this.conf.ssl\n ? ChannelCredentials.createSsl()\n : ChannelCredentials.createInsecure(),\n clientOptions,\n };\n\n const grpcProxy = typeof this.conf.grpcProxy === 'string'\n ? { url: this.conf.grpcProxy }\n : this.conf.grpcProxy;\n\n if (grpcProxy?.url) {\n const url = new URL(grpcProxy.url);\n if (grpcProxy.auth) {\n const parsed = parseHttpAuth(grpcProxy.auth);\n if (parsed.scheme !== 'Basic') {\n throw new Error(`Unsupported auth scheme: ${parsed.scheme as string}.`);\n }\n url.username = parsed.username;\n url.password = parsed.password;\n }\n process.env.grpc_proxy = url.toString();\n } else {\n delete process.env.grpc_proxy;\n }\n\n this._replaceWireConnection({ type: 'grpc', Transport: new GrpcTransport(grpcOptions) });\n }\n\n private _replaceWireConnection(newConn: WireConnection): void {\n const oldConn = this._wireConn;\n this._wireConn = newConn;\n\n // Reset all providers to let them reinitialize their clients\n for (let i = 0; i < this.providers.length; i++) {\n const provider = this.providers[i].deref();\n if (provider === undefined) {\n // at the same time we need to remove providers that are no longer valid\n this.providers.splice(i, 1);\n i--;\n } else {\n provider.reset();\n }\n }\n\n if (oldConn !== undefined && oldConn.type === 'grpc') oldConn.Transport.close();\n }\n\n private providerCleanupCounter = 0;\n\n /**\n * Creates a provider for a grpc client. Returned provider will create fresh client whenever the underlying transport is reset.\n *\n * @param clientConstructor - a factory function that creates a grpc client\n */\n public createWireClientProvider<Client>(clientConstructor: (transport: WireConnection) => Client): WireClientProvider<Client> {\n // We need to cleanup providers periodically to avoid memory leaks.\n // This is a simple heuristic to avoid memory leaks.\n // We could use a more sophisticated algorithm, but this is good enough for now.\n this.providerCleanupCounter++;\n if (this.providerCleanupCounter >= 16) {\n for (let i = 0; i < this.providers.length; i++) {\n const provider = this.providers[i].deref();\n if (provider === undefined) {\n this.providers.splice(i, 1);\n i--;\n }\n }\n this.providerCleanupCounter = 0;\n }\n\n const provider = new WireClientProviderImpl<Client>(() => this._wireConn, clientConstructor);\n this.providers.push(new WeakRef(provider));\n return provider;\n }\n\n public get wireConnection(): WireConnection {\n return this._wireConn;\n }\n\n /** Returns true if client is authenticated. Even with anonymous auth information\n * connection is considered authenticated. Unauthenticated clients are used for\n * login and similar tasks, see {@link UnauthenticatedPlClient}. */\n public get authenticated(): boolean {\n return this.authInformation !== undefined;\n }\n\n /** null means anonymous connection */\n public get authUser(): string | null {\n if (!this.authenticated) throw new Error('Client is not authenticated');\n if (this.authInformation?.jwtToken)\n return parsePlJwt(this.authInformation?.jwtToken).user.login;\n else return null;\n }\n\n private updateStatus(newStatus: PlConnectionStatus) {\n process.nextTick(() => {\n if (this._status !== newStatus) {\n this._status = newStatus;\n if (this.statusListener !== undefined) this.statusListener(this._status);\n if (this.onAuthError !== undefined) this.onAuthError();\n }\n });\n }\n\n public get status(): PlConnectionStatus {\n return this._status;\n }\n\n private authRefreshInProgress: boolean = false;\n\n private refreshAuthInformationIfNeeded(): void {\n if (\n this.refreshTimestamp === undefined\n || Date.now() < this.refreshTimestamp\n || this.authRefreshInProgress\n || this._status === 'Unauthenticated'\n )\n return;\n\n // Running refresh in background`\n this.authRefreshInProgress = true;\n void (async () => {\n try {\n const token = await this.getJwtToken(BigInt(this.conf.authTTLSeconds));\n this.authInformation = { jwtToken: token };\n this.refreshTimestamp = inferAuthRefreshTime(\n this.authInformation,\n this.conf.authMaxRefreshSeconds,\n );\n if (this.onAuthUpdate) this.onAuthUpdate(this.authInformation);\n } catch (e: unknown) {\n if (this.onAuthRefreshProblem) this.onAuthRefreshProblem(e);\n } finally {\n this.authRefreshInProgress = false;\n }\n })();\n }\n\n /**\n * Creates middleware that parses error responses and handles them centrally.\n * This middleware runs before openapi-fetch parses the response, so we need to\n * manually parse the response body for error responses.\n */\n private createRestErrorMiddleware(): Middleware {\n return {\n onResponse: async ({ request: _request, response, options: _options }) => {\n const { body: body, ...resOptions } = response;\n\n if ([502, 503, 504].includes(response.status)) {\n // Service unavailable, bad gateway, gateway timeout\n this.updateStatus('Disconnected');\n return new Response(body, { ...resOptions, status: response.status });\n }\n\n const respErr = await parseResponseError(response);\n if (!respErr.error) {\n // No error: nice!\n return new Response(respErr.origBody ?? body, { ...resOptions, status: response.status });\n }\n\n if (typeof respErr.error === 'string') {\n // Non-standard error or normal response: let later middleware to deal wit it.\n return new Response(respErr.error, { ...resOptions, status: response.status });\n }\n\n if (respErr.error.code === Code.UNAUTHENTICATED) {\n this.updateStatus('Unauthenticated');\n }\n\n // Let later middleware to deal with standard gRPC error.\n return new Response(respErr.origBody, { ...resOptions, status: response.status });\n },\n };\n }\n\n /** Detects certain errors and update client status accordingly when using GRPC wire connection */\n private createGrpcErrorInterceptor(): Interceptor {\n return (options, nextCall) => {\n return new InterceptingCall(nextCall(options), {\n start: (metadata, listener, next) => {\n next(metadata, {\n onReceiveStatus: (status, next) => {\n if (status.code == GrpcStatus.UNAUTHENTICATED)\n // (!!!) don't change to \"===\"\n this.updateStatus('Unauthenticated');\n if (status.code == GrpcStatus.UNAVAILABLE)\n // (!!!) don't change to \"===\"\n this.updateStatus('Disconnected');\n next(status);\n },\n });\n },\n });\n };\n }\n\n private createRestAuthInterceptor(): Dispatcher.DispatcherComposeInterceptor {\n return (dispatch) => {\n return (options, handler) => {\n if (this.authInformation?.jwtToken !== undefined) {\n // TODO: check this magic really works and gets called\n options.headers = { ...options.headers, authorization: 'Bearer ' + this.authInformation.jwtToken };\n this.refreshAuthInformationIfNeeded();\n }\n\n return dispatch(options, handler);\n };\n };\n }\n\n /** Injects authentication information if needed */\n private createGrpcAuthInterceptor(): Interceptor {\n return (options, nextCall) => {\n return new InterceptingCall(nextCall(options), {\n start: (metadata, listener, next) => {\n if (this.authInformation?.jwtToken !== undefined) {\n metadata.set('authorization', 'Bearer ' + this.authInformation.jwtToken);\n this.refreshAuthInformationIfNeeded();\n next(metadata, listener);\n } else {\n next(metadata, listener);\n }\n },\n });\n };\n }\n\n public async getJwtToken(ttlSeconds: bigint, options?: { authorization?: string }): Promise<string> {\n const cl = this.clientProvider.get();\n\n if (cl instanceof GrpcPlApiClient) {\n const meta: Record<string, string> = {};\n if (options?.authorization) meta.authorization = options.authorization;\n return (await cl.getJWTToken({ expiration: { seconds: ttlSeconds, nanos: 0 } }, { meta }).response).token;\n } else {\n const headers: Record<string, string> = {};\n if (options?.authorization) headers.authorization = options.authorization;\n const resp = cl.POST('/v1/auth/jwt-token', {\n body: { expiration: `${ttlSeconds}s` },\n headers,\n });\n return notEmpty((await resp).data).token;\n }\n }\n\n public async ping(): Promise<grpcTypes.MaintenanceAPI_Ping_Response> {\n const cl = this.clientProvider.get();\n if (cl instanceof GrpcPlApiClient) {\n return (await cl.ping({})).response;\n } else {\n return notEmpty((await cl.GET('/v1/ping')).data);\n }\n }\n\n public async license(): Promise<grpcTypes.MaintenanceAPI_License_Response> {\n const cl = this.clientProvider.get();\n if (cl instanceof GrpcPlApiClient) {\n return (await cl.license({})).response;\n } else {\n const resp = notEmpty((await cl.GET('/v1/license')).data);\n return {\n status: resp.status,\n isOk: resp.isOk,\n responseBody: Uint8Array.from(Buffer.from(resp.responseBody)),\n };\n }\n }\n\n public async authMethods(): Promise<grpcTypes.AuthAPI_ListMethods_Response> {\n const cl = this.clientProvider.get();\n if (cl instanceof GrpcPlApiClient) {\n return (await cl.authMethods({})).response;\n } else {\n return notEmpty((await cl.GET('/v1/auth/methods')).data);\n }\n }\n\n public async txSync(txId: bigint): Promise<void> {\n const cl = this.clientProvider.get();\n if (cl instanceof GrpcPlApiClient) {\n await cl.txSync({ txId: BigInt(txId) });\n } else {\n (await cl.POST('/v1/tx-sync', { body: { txId: txId.toString() } }));\n }\n }\n\n createTx(rw: boolean, ops: PlCallOps = {}): LLPlTransaction {\n return new LLPlTransaction((abortSignal) => {\n let totalAbortSignal = abortSignal;\n if (ops.abortSignal) totalAbortSignal = AbortSignal.any([totalAbortSignal, ops.abortSignal]);\n\n const cl = this.clientProvider.get();\n if (!(cl instanceof GrpcPlApiClient)) {\n // TODO: add WebSockets\n throw new Error('tx is not supported for REST client');\n }\n\n return cl.tx({\n abort: totalAbortSignal,\n timeout: ops.timeout\n ?? (rw ? this.conf.defaultRWTransactionTimeout : this.conf.defaultROTransactionTimeout),\n });\n });\n }\n\n /** Closes underlying transport */\n public async close() {\n if (this.wireConnection.type === 'grpc') {\n this.wireConnection.Transport.close();\n } else {\n // TODO: close all WS connections\n }\n await this.httpDispatcher.destroy();\n }\n}\n"],"names":["plAddressToConfig","auth","inferAuthRefreshTime","interceptors","defaultHttpDispatcher","GrpcPlApiClient","createClient","SUPPORTED_WIRE_PROTOCOLS","compressionAlgorithms","ChannelCredentials","parseHttpAuth","GrpcTransport","parsePlJwt","parseResponseError","Code","InterceptingCall","GrpcStatus","notEmpty","LLPlTransaction"],"mappings":"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"}
|
package/dist/core/ll_client.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { PlatformClient } from '../proto/github.com/milaboratory/pl/plapi/plapiproto/api.client';
|
|
1
|
+
import { PlatformClient as GrpcPlApiClient } from '../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client';
|
|
2
2
|
import type { AuthOps, PlClientConfig, PlConnectionStatus, PlConnectionStatusListener } from './config';
|
|
3
|
-
import { GrpcTransport } from '@protobuf-ts/grpc-transport';
|
|
4
3
|
import { LLPlTransaction } from './ll_transaction';
|
|
5
|
-
import type
|
|
6
|
-
import type {
|
|
4
|
+
import { type Dispatcher } from 'undici';
|
|
5
|
+
import type { WireClientProvider, WireClientProviderFactory, WireConnection } from './wire';
|
|
6
|
+
import type * as grpcTypes from '../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api';
|
|
7
|
+
import { type PlRestClientType } from '../proto-rest';
|
|
7
8
|
export interface PlCallOps {
|
|
8
9
|
timeout?: number;
|
|
9
10
|
abortSignal?: AbortSignal;
|
|
10
11
|
}
|
|
11
12
|
/** Abstract out low level networking and authorization details */
|
|
12
|
-
export declare class LLPlClient implements
|
|
13
|
+
export declare class LLPlClient implements WireClientProviderFactory {
|
|
13
14
|
private readonly ops;
|
|
14
15
|
readonly conf: PlClientConfig;
|
|
15
16
|
/** Initial authorization information */
|
|
@@ -24,29 +25,35 @@ export declare class LLPlClient implements GrpcClientProviderFactory {
|
|
|
24
25
|
private refreshTimestamp?;
|
|
25
26
|
private _status;
|
|
26
27
|
private readonly statusListener?;
|
|
27
|
-
private
|
|
28
|
-
private
|
|
28
|
+
private _wireProto;
|
|
29
|
+
private _wireConn;
|
|
30
|
+
private readonly _restInterceptors;
|
|
31
|
+
private readonly _restMiddlewares;
|
|
32
|
+
private readonly _grpcInterceptors;
|
|
29
33
|
private readonly providers;
|
|
30
|
-
readonly
|
|
34
|
+
readonly clientProvider: WireClientProvider<PlRestClientType | GrpcPlApiClient>;
|
|
31
35
|
readonly httpDispatcher: Dispatcher;
|
|
32
36
|
constructor(configOrAddress: PlClientConfig | string, ops?: {
|
|
33
37
|
auth?: AuthOps;
|
|
34
38
|
statusListener?: PlConnectionStatusListener;
|
|
35
39
|
shouldUseGzip?: boolean;
|
|
36
40
|
});
|
|
41
|
+
private initWireConnection;
|
|
42
|
+
private initRestConnection;
|
|
37
43
|
/**
|
|
38
|
-
* Initializes (or reinitializes) _grpcTransport
|
|
44
|
+
* Initializes (or reinitializes) _grpcTransport
|
|
39
45
|
* @param gzip - whether to enable gzip compression
|
|
40
46
|
*/
|
|
41
|
-
private
|
|
47
|
+
private initGrpcConnection;
|
|
48
|
+
private _replaceWireConnection;
|
|
42
49
|
private providerCleanupCounter;
|
|
43
50
|
/**
|
|
44
51
|
* Creates a provider for a grpc client. Returned provider will create fresh client whenever the underlying transport is reset.
|
|
45
52
|
*
|
|
46
53
|
* @param clientConstructor - a factory function that creates a grpc client
|
|
47
54
|
*/
|
|
48
|
-
|
|
49
|
-
get
|
|
55
|
+
createWireClientProvider<Client>(clientConstructor: (transport: WireConnection) => Client): WireClientProvider<Client>;
|
|
56
|
+
get wireConnection(): WireConnection;
|
|
50
57
|
/** Returns true if client is authenticated. Even with anonymous auth information
|
|
51
58
|
* connection is considered authenticated. Unauthenticated clients are used for
|
|
52
59
|
* login and similar tasks, see {@link UnauthenticatedPlClient}. */
|
|
@@ -57,10 +64,24 @@ export declare class LLPlClient implements GrpcClientProviderFactory {
|
|
|
57
64
|
get status(): PlConnectionStatus;
|
|
58
65
|
private authRefreshInProgress;
|
|
59
66
|
private refreshAuthInformationIfNeeded;
|
|
60
|
-
/**
|
|
61
|
-
|
|
67
|
+
/**
|
|
68
|
+
* Creates middleware that parses error responses and handles them centrally.
|
|
69
|
+
* This middleware runs before openapi-fetch parses the response, so we need to
|
|
70
|
+
* manually parse the response body for error responses.
|
|
71
|
+
*/
|
|
72
|
+
private createRestErrorMiddleware;
|
|
73
|
+
/** Detects certain errors and update client status accordingly when using GRPC wire connection */
|
|
74
|
+
private createGrpcErrorInterceptor;
|
|
75
|
+
private createRestAuthInterceptor;
|
|
62
76
|
/** Injects authentication information if needed */
|
|
63
|
-
private
|
|
77
|
+
private createGrpcAuthInterceptor;
|
|
78
|
+
getJwtToken(ttlSeconds: bigint, options?: {
|
|
79
|
+
authorization?: string;
|
|
80
|
+
}): Promise<string>;
|
|
81
|
+
ping(): Promise<grpcTypes.MaintenanceAPI_Ping_Response>;
|
|
82
|
+
license(): Promise<grpcTypes.MaintenanceAPI_License_Response>;
|
|
83
|
+
authMethods(): Promise<grpcTypes.AuthAPI_ListMethods_Response>;
|
|
84
|
+
txSync(txId: bigint): Promise<void>;
|
|
64
85
|
createTx(rw: boolean, ops?: PlCallOps): LLPlTransaction;
|
|
65
86
|
/** Closes underlying transport */
|
|
66
87
|
close(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ll_client.d.ts","sourceRoot":"","sources":["../../src/core/ll_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ll_client.d.ts","sourceRoot":"","sources":["../../src/core/ll_client.ts"],"names":[],"mappings":"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"}
|