@milaboratories/pl-client 2.17.7 → 2.17.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/_virtual/_rolldown/runtime.cjs +43 -0
- package/dist/_virtual/_rolldown/runtime.js +18 -0
- package/dist/core/PromiseTracker.cjs +33 -33
- package/dist/core/PromiseTracker.cjs.map +1 -1
- package/dist/core/PromiseTracker.d.ts +10 -7
- package/dist/core/PromiseTracker.js +33 -31
- package/dist/core/PromiseTracker.js.map +1 -1
- package/dist/core/StatefulPromise.cjs +60 -61
- package/dist/core/StatefulPromise.cjs.map +1 -1
- package/dist/core/StatefulPromise.js +60 -60
- package/dist/core/StatefulPromise.js.map +1 -1
- package/dist/core/abstract_stream.d.ts +18 -15
- package/dist/core/advisory_locks.cjs +42 -49
- package/dist/core/advisory_locks.cjs.map +1 -1
- package/dist/core/advisory_locks.js +42 -48
- package/dist/core/advisory_locks.js.map +1 -1
- package/dist/core/auth.cjs +10 -15
- package/dist/core/auth.cjs.map +1 -1
- package/dist/core/auth.d.ts +7 -3
- package/dist/core/auth.js +10 -13
- package/dist/core/auth.js.map +1 -1
- package/dist/core/cache.d.ts +11 -7
- package/dist/core/client.cjs +255 -306
- package/dist/core/client.cjs.map +1 -1
- package/dist/core/client.d.ts +72 -68
- package/dist/core/client.js +253 -285
- package/dist/core/client.js.map +1 -1
- package/dist/core/config.cjs +81 -99
- package/dist/core/config.cjs.map +1 -1
- package/dist/core/config.d.ts +93 -90
- package/dist/core/config.js +81 -98
- package/dist/core/config.js.map +1 -1
- package/dist/core/default_client.cjs +84 -125
- package/dist/core/default_client.cjs.map +1 -1
- package/dist/core/default_client.d.ts +9 -6
- package/dist/core/default_client.js +78 -103
- package/dist/core/default_client.js.map +1 -1
- package/dist/core/driver.cjs +12 -16
- package/dist/core/driver.cjs.map +1 -1
- package/dist/core/driver.d.ts +18 -14
- package/dist/core/driver.js +12 -15
- package/dist/core/driver.js.map +1 -1
- package/dist/core/error_resource.cjs +5 -4
- package/dist/core/error_resource.cjs.map +1 -1
- package/dist/core/error_resource.js +5 -3
- package/dist/core/error_resource.js.map +1 -1
- package/dist/core/errors.cjs +104 -140
- package/dist/core/errors.cjs.map +1 -1
- package/dist/core/errors.d.ts +34 -30
- package/dist/core/errors.js +102 -137
- package/dist/core/errors.js.map +1 -1
- package/dist/core/final.cjs +63 -89
- package/dist/core/final.cjs.map +1 -1
- package/dist/core/final.d.ts +8 -4
- package/dist/core/final.js +63 -87
- package/dist/core/final.js.map +1 -1
- package/dist/core/ll_client.cjs +416 -521
- package/dist/core/ll_client.cjs.map +1 -1
- package/dist/core/ll_client.d.ts +100 -97
- package/dist/core/ll_client.js +415 -519
- package/dist/core/ll_client.js.map +1 -1
- package/dist/core/ll_transaction.cjs +206 -240
- package/dist/core/ll_transaction.cjs.map +1 -1
- package/dist/core/ll_transaction.d.ts +50 -52
- package/dist/core/ll_transaction.js +205 -238
- package/dist/core/ll_transaction.js.map +1 -1
- package/dist/core/stat.cjs +64 -63
- package/dist/core/stat.cjs.map +1 -1
- package/dist/core/stat.d.ts +35 -36
- package/dist/core/stat.js +64 -62
- package/dist/core/stat.js.map +1 -1
- package/dist/core/transaction.cjs +613 -650
- package/dist/core/transaction.cjs.map +1 -1
- package/dist/core/transaction.d.ts +165 -162
- package/dist/core/transaction.js +612 -648
- package/dist/core/transaction.js.map +1 -1
- package/dist/core/type_conversion.cjs +62 -83
- package/dist/core/type_conversion.cjs.map +1 -1
- package/dist/core/type_conversion.js +61 -81
- package/dist/core/type_conversion.js.map +1 -1
- package/dist/core/types.cjs +56 -86
- package/dist/core/types.cjs.map +1 -1
- package/dist/core/types.d.ts +63 -62
- package/dist/core/types.js +54 -83
- package/dist/core/types.js.map +1 -1
- package/dist/core/unauth_client.cjs +35 -41
- package/dist/core/unauth_client.cjs.map +1 -1
- package/dist/core/unauth_client.d.ts +18 -14
- package/dist/core/unauth_client.js +34 -39
- package/dist/core/unauth_client.js.map +1 -1
- package/dist/core/websocket_stream.cjs +280 -349
- package/dist/core/websocket_stream.cjs.map +1 -1
- package/dist/core/websocket_stream.js +278 -347
- package/dist/core/websocket_stream.js.map +1 -1
- package/dist/core/wire.d.ts +21 -17
- package/dist/helpers/pl.cjs +71 -73
- package/dist/helpers/pl.cjs.map +1 -1
- package/dist/helpers/pl.d.ts +40 -41
- package/dist/helpers/pl.js +66 -46
- package/dist/helpers/pl.js.map +1 -1
- package/dist/helpers/poll.cjs +99 -134
- package/dist/helpers/poll.cjs.map +1 -1
- package/dist/helpers/poll.d.ts +37 -34
- package/dist/helpers/poll.js +97 -113
- package/dist/helpers/poll.js.map +1 -1
- package/dist/helpers/retry_strategy.cjs +82 -87
- package/dist/helpers/retry_strategy.cjs.map +1 -1
- package/dist/helpers/retry_strategy.js +83 -86
- package/dist/helpers/retry_strategy.js.map +1 -1
- package/dist/helpers/tx_helpers.cjs +21 -20
- package/dist/helpers/tx_helpers.cjs.map +1 -1
- package/dist/helpers/tx_helpers.d.ts +11 -7
- package/dist/helpers/tx_helpers.js +20 -18
- package/dist/helpers/tx_helpers.js.map +1 -1
- package/dist/index.cjs +117 -106
- package/dist/index.d.ts +17 -17
- package/dist/index.js +17 -19
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs +72 -66
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs.map +1 -1
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts +35 -37
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js +71 -64
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs +12611 -12866
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs +226 -226
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts +281 -330
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js +225 -224
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts +2640 -4294
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js +12608 -12706
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs +1230 -1089
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts +393 -420
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js +1228 -1083
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs +142 -143
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts +62 -64
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js +140 -141
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs +572 -487
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts +125 -228
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js +572 -485
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js.map +1 -1
- package/dist/proto-grpc/google/protobuf/any.cjs +131 -146
- package/dist/proto-grpc/google/protobuf/any.cjs.map +1 -1
- package/dist/proto-grpc/google/protobuf/any.d.ts +78 -84
- package/dist/proto-grpc/google/protobuf/any.js +130 -144
- package/dist/proto-grpc/google/protobuf/any.js.map +1 -1
- package/dist/proto-grpc/google/protobuf/duration.cjs +92 -100
- package/dist/proto-grpc/google/protobuf/duration.cjs.map +1 -1
- package/dist/proto-grpc/google/protobuf/duration.d.ts +38 -43
- package/dist/proto-grpc/google/protobuf/duration.js +91 -98
- package/dist/proto-grpc/google/protobuf/duration.js.map +1 -1
- package/dist/proto-grpc/google/protobuf/timestamp.cjs +117 -128
- package/dist/proto-grpc/google/protobuf/timestamp.cjs.map +1 -1
- package/dist/proto-grpc/google/protobuf/timestamp.d.ts +50 -55
- package/dist/proto-grpc/google/protobuf/timestamp.js +116 -126
- package/dist/proto-grpc/google/protobuf/timestamp.js.map +1 -1
- package/dist/proto-grpc/google/rpc/code.cjs +223 -238
- package/dist/proto-grpc/google/rpc/code.cjs.map +1 -1
- package/dist/proto-grpc/google/rpc/code.d.ts +209 -206
- package/dist/proto-grpc/google/rpc/code.js +221 -237
- package/dist/proto-grpc/google/rpc/code.js.map +1 -1
- package/dist/proto-rest/index.cjs +67 -66
- package/dist/proto-rest/index.cjs.map +1 -1
- package/dist/proto-rest/index.d.ts +24 -18
- package/dist/proto-rest/index.js +61 -65
- package/dist/proto-rest/index.js.map +1 -1
- package/dist/proto-rest/plapi.d.ts +1400 -1477
- package/dist/test/tcp-proxy.cjs +100 -126
- package/dist/test/tcp-proxy.cjs.map +1 -1
- package/dist/test/tcp-proxy.d.ts +17 -13
- package/dist/test/tcp-proxy.js +97 -104
- package/dist/test/tcp-proxy.js.map +1 -1
- package/dist/test/test_config.cjs +145 -194
- package/dist/test/test_config.cjs.map +1 -1
- package/dist/test/test_config.d.ts +34 -30
- package/dist/test/test_config.js +138 -166
- package/dist/test/test_config.js.map +1 -1
- package/dist/util/pl.cjs +4 -3
- package/dist/util/pl.cjs.map +1 -1
- package/dist/util/pl.js +4 -2
- package/dist/util/pl.js.map +1 -1
- package/dist/util/util.cjs +7 -10
- package/dist/util/util.cjs.map +1 -1
- package/dist/util/util.js +7 -9
- package/dist/util/util.js.map +1 -1
- package/package.json +8 -8
- package/src/core/errors.ts +1 -1
- package/src/core/transaction.ts +123 -133
- package/src/core/websocket_stream.ts +10 -1
- package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs +0 -61
- package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.cjs.map +0 -1
- package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js +0 -58
- package/dist/__external/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.52.4_tslib@2.8.1_typescript@5.6.3/__external/tslib/tslib.es6.js.map +0 -1
- package/dist/core/PromiseTracker.d.ts.map +0 -1
- package/dist/core/StatefulPromise.d.ts +0 -39
- package/dist/core/StatefulPromise.d.ts.map +0 -1
- package/dist/core/abstract_stream.d.ts.map +0 -1
- package/dist/core/advisory_locks.d.ts +0 -10
- package/dist/core/advisory_locks.d.ts.map +0 -1
- package/dist/core/auth.d.ts.map +0 -1
- package/dist/core/cache.d.ts.map +0 -1
- package/dist/core/client.d.ts.map +0 -1
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/default_client.d.ts.map +0 -1
- package/dist/core/driver.d.ts.map +0 -1
- package/dist/core/error_resource.d.ts +0 -6
- package/dist/core/error_resource.d.ts.map +0 -1
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/final.d.ts.map +0 -1
- package/dist/core/ll_client.d.ts.map +0 -1
- package/dist/core/ll_transaction.d.ts.map +0 -1
- package/dist/core/stat.d.ts.map +0 -1
- package/dist/core/transaction.d.ts.map +0 -1
- package/dist/core/type_conversion.d.ts +0 -8
- package/dist/core/type_conversion.d.ts.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/unauth_client.d.ts.map +0 -1
- package/dist/core/websocket_stream.d.ts +0 -67
- package/dist/core/websocket_stream.d.ts.map +0 -1
- package/dist/core/wire.d.ts.map +0 -1
- package/dist/helpers/pl.d.ts.map +0 -1
- package/dist/helpers/poll.d.ts.map +0 -1
- package/dist/helpers/retry_strategy.d.ts +0 -24
- package/dist/helpers/retry_strategy.d.ts.map +0 -1
- package/dist/helpers/state_helpers.d.ts +0 -3
- package/dist/helpers/state_helpers.d.ts.map +0 -1
- package/dist/helpers/tx_helpers.d.ts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/import.d.ts +0 -106
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/import.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts.map +0 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.d.ts +0 -73
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/ws-test.d.ts.map +0 -1
- package/dist/proto-grpc/google/api/http.d.ts +0 -456
- package/dist/proto-grpc/google/api/http.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/any.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/descriptor.d.ts +0 -2340
- package/dist/proto-grpc/google/protobuf/descriptor.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/duration.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/empty.d.ts +0 -32
- package/dist/proto-grpc/google/protobuf/empty.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/struct.d.ts +0 -187
- package/dist/proto-grpc/google/protobuf/struct.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/timestamp.d.ts.map +0 -1
- package/dist/proto-grpc/google/protobuf/wrappers.d.ts +0 -308
- package/dist/proto-grpc/google/protobuf/wrappers.d.ts.map +0 -1
- package/dist/proto-grpc/google/rpc/code.d.ts.map +0 -1
- package/dist/proto-grpc/google/rpc/error_details.d.ts +0 -654
- package/dist/proto-grpc/google/rpc/error_details.d.ts.map +0 -1
- package/dist/proto-grpc/google/rpc/http.d.ts +0 -121
- package/dist/proto-grpc/google/rpc/http.d.ts.map +0 -1
- package/dist/proto-grpc/google/rpc/status.d.ts +0 -55
- package/dist/proto-grpc/google/rpc/status.d.ts.map +0 -1
- package/dist/proto-rest/index.d.ts.map +0 -1
- package/dist/proto-rest/plapi.d.ts.map +0 -1
- package/dist/test/tcp-proxy.d.ts.map +0 -1
- package/dist/test/test_config.d.ts.map +0 -1
- package/dist/util/branding.d.ts +0 -7
- package/dist/util/branding.d.ts.map +0 -1
- package/dist/util/pl.d.ts +0 -9
- package/dist/util/pl.d.ts.map +0 -1
- package/dist/util/util.d.ts +0 -2
- package/dist/util/util.d.ts.map +0 -1
|
@@ -1,77 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_errors = require('../core/errors.cjs');
|
|
3
|
+
let undici = require("undici");
|
|
4
|
+
let openapi_fetch = require("openapi-fetch");
|
|
5
|
+
openapi_fetch = require_runtime.__toESM(openapi_fetch);
|
|
2
6
|
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// This file is NOT autogenerated!
|
|
9
|
-
//
|
|
10
|
-
// After generating new clients from openapi specifications, add client types here.
|
|
11
|
-
//
|
|
7
|
+
//#region src/proto-rest/index.ts
|
|
8
|
+
var proto_rest_exports = /* @__PURE__ */ require_runtime.__exportAll({
|
|
9
|
+
createClient: () => createClient,
|
|
10
|
+
parseResponseError: () => parseResponseError
|
|
11
|
+
});
|
|
12
12
|
function createClient(opts) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
client.use(errorHandlerMiddleware(), ...opts.middlewares);
|
|
38
|
-
return client;
|
|
13
|
+
const client = (0, openapi_fetch.default)({
|
|
14
|
+
baseUrl: `${opts.ssl ? "https://" : "http://"}${opts.hostAndPort}`,
|
|
15
|
+
fetch: (input) => {
|
|
16
|
+
const request = input.bodyUsed ? input.clone() : input;
|
|
17
|
+
return (0, undici.fetch)(request.url, {
|
|
18
|
+
body: request.body,
|
|
19
|
+
cache: request.cache,
|
|
20
|
+
credentials: request.credentials,
|
|
21
|
+
dispatcher: opts.dispatcher,
|
|
22
|
+
duplex: request.duplex,
|
|
23
|
+
headers: request.headers,
|
|
24
|
+
integrity: request.integrity,
|
|
25
|
+
keepalive: request.keepalive,
|
|
26
|
+
method: request.method,
|
|
27
|
+
mode: request.mode,
|
|
28
|
+
redirect: request.redirect,
|
|
29
|
+
referrer: request.referrer,
|
|
30
|
+
referrerPolicy: request.referrerPolicy,
|
|
31
|
+
signal: request.signal
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
client.use(errorHandlerMiddleware(), ...opts.middlewares);
|
|
36
|
+
return client;
|
|
39
37
|
}
|
|
40
38
|
async function parseResponseError(response) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
error: error,
|
|
52
|
-
origBody,
|
|
53
|
-
};
|
|
39
|
+
if (response.status < 400) return {};
|
|
40
|
+
let error = await response.clone().text();
|
|
41
|
+
const origBody = error;
|
|
42
|
+
try {
|
|
43
|
+
error = JSON.parse(error);
|
|
44
|
+
} catch {}
|
|
45
|
+
return {
|
|
46
|
+
error,
|
|
47
|
+
origBody
|
|
48
|
+
};
|
|
54
49
|
}
|
|
55
50
|
/**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
* Parses all API responses and thrown error in case of error response.
|
|
52
|
+
* Allows all callers to not bother about .error response field checking.
|
|
53
|
+
*/
|
|
59
54
|
function errorHandlerMiddleware() {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
};
|
|
55
|
+
return { onResponse: async ({ request: _request, response, options: _options }) => {
|
|
56
|
+
const respErr = await parseResponseError(response);
|
|
57
|
+
if (!respErr.error) {
|
|
58
|
+
const { body, ...resOptions } = response;
|
|
59
|
+
return new Response(body, {
|
|
60
|
+
...resOptions,
|
|
61
|
+
status: response.status
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (typeof respErr.error === "string") throw new Error(respErr.error);
|
|
65
|
+
require_errors.rethrowMeaningfulError(new require_errors.RESTError(respErr.error));
|
|
66
|
+
} };
|
|
73
67
|
}
|
|
74
68
|
|
|
69
|
+
//#endregion
|
|
75
70
|
exports.createClient = createClient;
|
|
76
71
|
exports.parseResponseError = parseResponseError;
|
|
77
|
-
|
|
72
|
+
Object.defineProperty(exports, 'proto_rest_exports', {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
get: function () {
|
|
75
|
+
return proto_rest_exports;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/proto-rest/index.ts"],"sourcesContent":["//\n// This file is NOT autogenerated!\n//\n// After generating new clients from openapi specifications, add client types here.\n//\n\nimport type { paths as PlApiPaths } from \"./plapi\";\nimport { default as createOpenApiClient, type Middleware, type Client } from \"openapi-fetch\";\nimport { Dispatcher, fetch as undiciFetch } from \"undici\";\nimport { RESTError, rethrowMeaningfulError } from \"../core/errors\";\nimport { Code } from \"../proto-grpc/google/rpc/code\";\n\nexport { PlApiPaths };\nexport type PlRestClientType = Client<PlApiPaths>;\n\nexport type RestClientConfig = {\n hostAndPort: string;\n ssl: boolean;\n dispatcher: Dispatcher;\n middlewares: Middleware[];\n};\n\nexport function createClient<Paths extends {}>(opts: RestClientConfig): Client<Paths> {\n const scheme = opts.ssl ? \"https://\" : \"http://\";\n const client = createOpenApiClient<Paths>({\n baseUrl: `${scheme}${opts.hostAndPort}`,\n fetch: (input: Request): Promise<Response> => {\n // If body has already been consumed, clone the request\n const request = input.bodyUsed ? input.clone() : input;\n\n return undiciFetch(request.url, {\n body: request.body,\n cache: request.cache,\n credentials: request.credentials,\n dispatcher: opts.dispatcher,\n duplex: request.duplex,\n headers: request.headers,\n integrity: request.integrity,\n keepalive: request.keepalive,\n method: request.method,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n signal: request.signal,\n });\n },\n });\n client.use(errorHandlerMiddleware(), ...opts.middlewares);\n return client;\n}\n\nexport type ErrorResponse = {\n code: Code;\n message: string;\n details: any[];\n};\nexport async function parseResponseError(response: Response): Promise<{\n error?: ErrorResponse | string;\n origBody?: string;\n}> {\n if (response.status < 400) {\n return {};\n }\n\n let error: any = await response.clone().text();\n const origBody = error;\n try {\n error = JSON.parse(error) as ErrorResponse;\n } catch {}\n return {\n error: error,\n origBody,\n };\n}\n\n/**\n * Parses all API responses and thrown error in case of error response.\n * Allows all callers to not bother about .error response field checking.\n */\nfunction errorHandlerMiddleware(): Middleware {\n return {\n onResponse: async ({ request: _request, response, options: _options }) => {\n const respErr = await parseResponseError(response);\n if (!respErr.error) {\n const { body, ...resOptions } = response;\n return new Response(body, { ...resOptions, status: response.status });\n }\n\n if (typeof respErr.error === \"string\") {\n throw new Error(respErr.error);\n }\n\n rethrowMeaningfulError(new RESTError(respErr.error));\n },\n };\n}\n"],"
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["RESTError"],"sources":["../../src/proto-rest/index.ts"],"sourcesContent":["//\n// This file is NOT autogenerated!\n//\n// After generating new clients from openapi specifications, add client types here.\n//\n\nimport type { paths as PlApiPaths } from \"./plapi\";\nimport { default as createOpenApiClient, type Middleware, type Client } from \"openapi-fetch\";\nimport { Dispatcher, fetch as undiciFetch } from \"undici\";\nimport { RESTError, rethrowMeaningfulError } from \"../core/errors\";\nimport { Code } from \"../proto-grpc/google/rpc/code\";\n\nexport { PlApiPaths };\nexport type PlRestClientType = Client<PlApiPaths>;\n\nexport type RestClientConfig = {\n hostAndPort: string;\n ssl: boolean;\n dispatcher: Dispatcher;\n middlewares: Middleware[];\n};\n\nexport function createClient<Paths extends {}>(opts: RestClientConfig): Client<Paths> {\n const scheme = opts.ssl ? \"https://\" : \"http://\";\n const client = createOpenApiClient<Paths>({\n baseUrl: `${scheme}${opts.hostAndPort}`,\n fetch: (input: Request): Promise<Response> => {\n // If body has already been consumed, clone the request\n const request = input.bodyUsed ? input.clone() : input;\n\n return undiciFetch(request.url, {\n body: request.body,\n cache: request.cache,\n credentials: request.credentials,\n dispatcher: opts.dispatcher,\n duplex: request.duplex,\n headers: request.headers,\n integrity: request.integrity,\n keepalive: request.keepalive,\n method: request.method,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n signal: request.signal,\n });\n },\n });\n client.use(errorHandlerMiddleware(), ...opts.middlewares);\n return client;\n}\n\nexport type ErrorResponse = {\n code: Code;\n message: string;\n details: any[];\n};\nexport async function parseResponseError(response: Response): Promise<{\n error?: ErrorResponse | string;\n origBody?: string;\n}> {\n if (response.status < 400) {\n return {};\n }\n\n let error: any = await response.clone().text();\n const origBody = error;\n try {\n error = JSON.parse(error) as ErrorResponse;\n } catch {}\n return {\n error: error,\n origBody,\n };\n}\n\n/**\n * Parses all API responses and thrown error in case of error response.\n * Allows all callers to not bother about .error response field checking.\n */\nfunction errorHandlerMiddleware(): Middleware {\n return {\n onResponse: async ({ request: _request, response, options: _options }) => {\n const respErr = await parseResponseError(response);\n if (!respErr.error) {\n const { body, ...resOptions } = response;\n return new Response(body, { ...resOptions, status: response.status });\n }\n\n if (typeof respErr.error === \"string\") {\n throw new Error(respErr.error);\n }\n\n rethrowMeaningfulError(new RESTError(respErr.error));\n },\n };\n}\n"],"mappings":";;;;;;;;;;;AAsBA,SAAgB,aAA+B,MAAuC;CAEpF,MAAM,oCAAoC;EACxC,SAAS,GAFI,KAAK,MAAM,aAAa,YAEhB,KAAK;EAC1B,QAAQ,UAAsC;GAE5C,MAAM,UAAU,MAAM,WAAW,MAAM,OAAO,GAAG;AAEjD,4BAAmB,QAAQ,KAAK;IAC9B,MAAM,QAAQ;IACd,OAAO,QAAQ;IACf,aAAa,QAAQ;IACrB,YAAY,KAAK;IACjB,QAAQ,QAAQ;IAChB,SAAS,QAAQ;IACjB,WAAW,QAAQ;IACnB,WAAW,QAAQ;IACnB,QAAQ,QAAQ;IAChB,MAAM,QAAQ;IACd,UAAU,QAAQ;IAClB,UAAU,QAAQ;IAClB,gBAAgB,QAAQ;IACxB,QAAQ,QAAQ;IACjB,CAAC;;EAEL,CAAC;AACF,QAAO,IAAI,wBAAwB,EAAE,GAAG,KAAK,YAAY;AACzD,QAAO;;AAQT,eAAsB,mBAAmB,UAGtC;AACD,KAAI,SAAS,SAAS,IACpB,QAAO,EAAE;CAGX,IAAI,QAAa,MAAM,SAAS,OAAO,CAAC,MAAM;CAC9C,MAAM,WAAW;AACjB,KAAI;AACF,UAAQ,KAAK,MAAM,MAAM;SACnB;AACR,QAAO;EACE;EACP;EACD;;;;;;AAOH,SAAS,yBAAqC;AAC5C,QAAO,EACL,YAAY,OAAO,EAAE,SAAS,UAAU,UAAU,SAAS,eAAe;EACxE,MAAM,UAAU,MAAM,mBAAmB,SAAS;AAClD,MAAI,CAAC,QAAQ,OAAO;GAClB,MAAM,EAAE,MAAM,GAAG,eAAe;AAChC,UAAO,IAAI,SAAS,MAAM;IAAE,GAAG;IAAY,QAAQ,SAAS;IAAQ,CAAC;;AAGvE,MAAI,OAAO,QAAQ,UAAU,SAC3B,OAAM,IAAI,MAAM,QAAQ,MAAM;AAGhC,wCAAuB,IAAIA,yBAAU,QAAQ,MAAM,CAAC;IAEvD"}
|
|
@@ -1,23 +1,29 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { paths } from "./plapi.js";
|
|
2
|
+
import { Code } from "../proto-grpc/google/rpc/code.js";
|
|
3
3
|
import { Dispatcher } from "undici";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
import { Client, Middleware } from "openapi-fetch";
|
|
5
|
+
|
|
6
|
+
//#region src/proto-rest/index.d.ts
|
|
7
|
+
declare namespace index_d_exports {
|
|
8
|
+
export { ErrorResponse, paths as PlApiPaths, PlRestClientType, RestClientConfig, createClient, parseResponseError };
|
|
9
|
+
}
|
|
10
|
+
type PlRestClientType = Client<paths>;
|
|
11
|
+
type RestClientConfig = {
|
|
12
|
+
hostAndPort: string;
|
|
13
|
+
ssl: boolean;
|
|
14
|
+
dispatcher: Dispatcher;
|
|
15
|
+
middlewares: Middleware[];
|
|
12
16
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
declare function createClient<Paths extends {}>(opts: RestClientConfig): Client<Paths>;
|
|
18
|
+
type ErrorResponse = {
|
|
19
|
+
code: Code;
|
|
20
|
+
message: string;
|
|
21
|
+
details: any[];
|
|
18
22
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
declare function parseResponseError(response: Response): Promise<{
|
|
24
|
+
error?: ErrorResponse | string;
|
|
25
|
+
origBody?: string;
|
|
22
26
|
}>;
|
|
27
|
+
//#endregion
|
|
28
|
+
export { PlRestClientType, index_d_exports };
|
|
23
29
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/proto-rest/index.js
CHANGED
|
@@ -1,74 +1,70 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { RESTError, rethrowMeaningfulError } from "../core/errors.js";
|
|
3
|
+
import { fetch } from "undici";
|
|
4
|
+
import createOpenApiClient from "openapi-fetch";
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
//#region src/proto-rest/index.ts
|
|
7
|
+
var proto_rest_exports = /* @__PURE__ */ __exportAll({
|
|
8
|
+
createClient: () => createClient,
|
|
9
|
+
parseResponseError: () => parseResponseError
|
|
10
|
+
});
|
|
10
11
|
function createClient(opts) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
client.use(errorHandlerMiddleware(), ...opts.middlewares);
|
|
36
|
-
return client;
|
|
12
|
+
const client = createOpenApiClient({
|
|
13
|
+
baseUrl: `${opts.ssl ? "https://" : "http://"}${opts.hostAndPort}`,
|
|
14
|
+
fetch: (input) => {
|
|
15
|
+
const request = input.bodyUsed ? input.clone() : input;
|
|
16
|
+
return fetch(request.url, {
|
|
17
|
+
body: request.body,
|
|
18
|
+
cache: request.cache,
|
|
19
|
+
credentials: request.credentials,
|
|
20
|
+
dispatcher: opts.dispatcher,
|
|
21
|
+
duplex: request.duplex,
|
|
22
|
+
headers: request.headers,
|
|
23
|
+
integrity: request.integrity,
|
|
24
|
+
keepalive: request.keepalive,
|
|
25
|
+
method: request.method,
|
|
26
|
+
mode: request.mode,
|
|
27
|
+
redirect: request.redirect,
|
|
28
|
+
referrer: request.referrer,
|
|
29
|
+
referrerPolicy: request.referrerPolicy,
|
|
30
|
+
signal: request.signal
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
client.use(errorHandlerMiddleware(), ...opts.middlewares);
|
|
35
|
+
return client;
|
|
37
36
|
}
|
|
38
37
|
async function parseResponseError(response) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
error: error,
|
|
50
|
-
origBody,
|
|
51
|
-
};
|
|
38
|
+
if (response.status < 400) return {};
|
|
39
|
+
let error = await response.clone().text();
|
|
40
|
+
const origBody = error;
|
|
41
|
+
try {
|
|
42
|
+
error = JSON.parse(error);
|
|
43
|
+
} catch {}
|
|
44
|
+
return {
|
|
45
|
+
error,
|
|
46
|
+
origBody
|
|
47
|
+
};
|
|
52
48
|
}
|
|
53
49
|
/**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
* Parses all API responses and thrown error in case of error response.
|
|
51
|
+
* Allows all callers to not bother about .error response field checking.
|
|
52
|
+
*/
|
|
57
53
|
function errorHandlerMiddleware() {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
};
|
|
54
|
+
return { onResponse: async ({ request: _request, response, options: _options }) => {
|
|
55
|
+
const respErr = await parseResponseError(response);
|
|
56
|
+
if (!respErr.error) {
|
|
57
|
+
const { body, ...resOptions } = response;
|
|
58
|
+
return new Response(body, {
|
|
59
|
+
...resOptions,
|
|
60
|
+
status: response.status
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (typeof respErr.error === "string") throw new Error(respErr.error);
|
|
64
|
+
rethrowMeaningfulError(new RESTError(respErr.error));
|
|
65
|
+
} };
|
|
71
66
|
}
|
|
72
67
|
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
//#endregion
|
|
69
|
+
export { createClient, parseResponseError, proto_rest_exports };
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/proto-rest/index.ts"],"sourcesContent":["//\n// This file is NOT autogenerated!\n//\n// After generating new clients from openapi specifications, add client types here.\n//\n\nimport type { paths as PlApiPaths } from \"./plapi\";\nimport { default as createOpenApiClient, type Middleware, type Client } from \"openapi-fetch\";\nimport { Dispatcher, fetch as undiciFetch } from \"undici\";\nimport { RESTError, rethrowMeaningfulError } from \"../core/errors\";\nimport { Code } from \"../proto-grpc/google/rpc/code\";\n\nexport { PlApiPaths };\nexport type PlRestClientType = Client<PlApiPaths>;\n\nexport type RestClientConfig = {\n hostAndPort: string;\n ssl: boolean;\n dispatcher: Dispatcher;\n middlewares: Middleware[];\n};\n\nexport function createClient<Paths extends {}>(opts: RestClientConfig): Client<Paths> {\n const scheme = opts.ssl ? \"https://\" : \"http://\";\n const client = createOpenApiClient<Paths>({\n baseUrl: `${scheme}${opts.hostAndPort}`,\n fetch: (input: Request): Promise<Response> => {\n // If body has already been consumed, clone the request\n const request = input.bodyUsed ? input.clone() : input;\n\n return undiciFetch(request.url, {\n body: request.body,\n cache: request.cache,\n credentials: request.credentials,\n dispatcher: opts.dispatcher,\n duplex: request.duplex,\n headers: request.headers,\n integrity: request.integrity,\n keepalive: request.keepalive,\n method: request.method,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n signal: request.signal,\n });\n },\n });\n client.use(errorHandlerMiddleware(), ...opts.middlewares);\n return client;\n}\n\nexport type ErrorResponse = {\n code: Code;\n message: string;\n details: any[];\n};\nexport async function parseResponseError(response: Response): Promise<{\n error?: ErrorResponse | string;\n origBody?: string;\n}> {\n if (response.status < 400) {\n return {};\n }\n\n let error: any = await response.clone().text();\n const origBody = error;\n try {\n error = JSON.parse(error) as ErrorResponse;\n } catch {}\n return {\n error: error,\n origBody,\n };\n}\n\n/**\n * Parses all API responses and thrown error in case of error response.\n * Allows all callers to not bother about .error response field checking.\n */\nfunction errorHandlerMiddleware(): Middleware {\n return {\n onResponse: async ({ request: _request, response, options: _options }) => {\n const respErr = await parseResponseError(response);\n if (!respErr.error) {\n const { body, ...resOptions } = response;\n return new Response(body, { ...resOptions, status: response.status });\n }\n\n if (typeof respErr.error === \"string\") {\n throw new Error(respErr.error);\n }\n\n rethrowMeaningfulError(new RESTError(respErr.error));\n },\n };\n}\n"],"
|
|
1
|
+
{"version":3,"file":"index.js","names":["undiciFetch"],"sources":["../../src/proto-rest/index.ts"],"sourcesContent":["//\n// This file is NOT autogenerated!\n//\n// After generating new clients from openapi specifications, add client types here.\n//\n\nimport type { paths as PlApiPaths } from \"./plapi\";\nimport { default as createOpenApiClient, type Middleware, type Client } from \"openapi-fetch\";\nimport { Dispatcher, fetch as undiciFetch } from \"undici\";\nimport { RESTError, rethrowMeaningfulError } from \"../core/errors\";\nimport { Code } from \"../proto-grpc/google/rpc/code\";\n\nexport { PlApiPaths };\nexport type PlRestClientType = Client<PlApiPaths>;\n\nexport type RestClientConfig = {\n hostAndPort: string;\n ssl: boolean;\n dispatcher: Dispatcher;\n middlewares: Middleware[];\n};\n\nexport function createClient<Paths extends {}>(opts: RestClientConfig): Client<Paths> {\n const scheme = opts.ssl ? \"https://\" : \"http://\";\n const client = createOpenApiClient<Paths>({\n baseUrl: `${scheme}${opts.hostAndPort}`,\n fetch: (input: Request): Promise<Response> => {\n // If body has already been consumed, clone the request\n const request = input.bodyUsed ? input.clone() : input;\n\n return undiciFetch(request.url, {\n body: request.body,\n cache: request.cache,\n credentials: request.credentials,\n dispatcher: opts.dispatcher,\n duplex: request.duplex,\n headers: request.headers,\n integrity: request.integrity,\n keepalive: request.keepalive,\n method: request.method,\n mode: request.mode,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n signal: request.signal,\n });\n },\n });\n client.use(errorHandlerMiddleware(), ...opts.middlewares);\n return client;\n}\n\nexport type ErrorResponse = {\n code: Code;\n message: string;\n details: any[];\n};\nexport async function parseResponseError(response: Response): Promise<{\n error?: ErrorResponse | string;\n origBody?: string;\n}> {\n if (response.status < 400) {\n return {};\n }\n\n let error: any = await response.clone().text();\n const origBody = error;\n try {\n error = JSON.parse(error) as ErrorResponse;\n } catch {}\n return {\n error: error,\n origBody,\n };\n}\n\n/**\n * Parses all API responses and thrown error in case of error response.\n * Allows all callers to not bother about .error response field checking.\n */\nfunction errorHandlerMiddleware(): Middleware {\n return {\n onResponse: async ({ request: _request, response, options: _options }) => {\n const respErr = await parseResponseError(response);\n if (!respErr.error) {\n const { body, ...resOptions } = response;\n return new Response(body, { ...resOptions, status: response.status });\n }\n\n if (typeof respErr.error === \"string\") {\n throw new Error(respErr.error);\n }\n\n rethrowMeaningfulError(new RESTError(respErr.error));\n },\n };\n}\n"],"mappings":";;;;;;;;;;AAsBA,SAAgB,aAA+B,MAAuC;CAEpF,MAAM,SAAS,oBAA2B;EACxC,SAAS,GAFI,KAAK,MAAM,aAAa,YAEhB,KAAK;EAC1B,QAAQ,UAAsC;GAE5C,MAAM,UAAU,MAAM,WAAW,MAAM,OAAO,GAAG;AAEjD,UAAOA,MAAY,QAAQ,KAAK;IAC9B,MAAM,QAAQ;IACd,OAAO,QAAQ;IACf,aAAa,QAAQ;IACrB,YAAY,KAAK;IACjB,QAAQ,QAAQ;IAChB,SAAS,QAAQ;IACjB,WAAW,QAAQ;IACnB,WAAW,QAAQ;IACnB,QAAQ,QAAQ;IAChB,MAAM,QAAQ;IACd,UAAU,QAAQ;IAClB,UAAU,QAAQ;IAClB,gBAAgB,QAAQ;IACxB,QAAQ,QAAQ;IACjB,CAAC;;EAEL,CAAC;AACF,QAAO,IAAI,wBAAwB,EAAE,GAAG,KAAK,YAAY;AACzD,QAAO;;AAQT,eAAsB,mBAAmB,UAGtC;AACD,KAAI,SAAS,SAAS,IACpB,QAAO,EAAE;CAGX,IAAI,QAAa,MAAM,SAAS,OAAO,CAAC,MAAM;CAC9C,MAAM,WAAW;AACjB,KAAI;AACF,UAAQ,KAAK,MAAM,MAAM;SACnB;AACR,QAAO;EACE;EACP;EACD;;;;;;AAOH,SAAS,yBAAqC;AAC5C,QAAO,EACL,YAAY,OAAO,EAAE,SAAS,UAAU,UAAU,SAAS,eAAe;EACxE,MAAM,UAAU,MAAM,mBAAmB,SAAS;AAClD,MAAI,CAAC,QAAQ,OAAO;GAClB,MAAM,EAAE,MAAM,GAAG,eAAe;AAChC,UAAO,IAAI,SAAS,MAAM;IAAE,GAAG;IAAY,QAAQ,SAAS;IAAQ,CAAC;;AAGvE,MAAI,OAAO,QAAQ,UAAU,SAC3B,OAAM,IAAI,MAAM,QAAQ,MAAM;AAGhC,yBAAuB,IAAI,UAAU,QAAQ,MAAM,CAAC;IAEvD"}
|