@miradorlabs/web-grpc 3.32.0 → 3.34.0
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/google/api/field_behavior.ts +1 -1
- package/google/protobuf/descriptor.ts +1 -1
- package/google/protobuf/duration.ts +1 -1
- package/google/protobuf/timestamp.ts +32 -10
- package/package.json +1 -1
- package/proto/gateway/common/v1/attribute_value.ts +1 -1
- package/proto/gateway/common/v1/status.ts +1 -1
- package/proto/gateway/common/v1/types.ts +1 -1
- package/proto/gateway/web/v1/account_gateway.ts +1 -1
- package/proto/gateway/web/v1/admin_gateway.ts +755 -1
- package/proto/gateway/web/v1/admin_gateway_grpc_pb.js +37 -0
- package/proto/gateway/web/v1/admin_gateway_pb.js +1061 -0
- package/proto/gateway/web/v1/ai_gateway.ts +6698 -4933
- package/proto/gateway/web/v1/ai_gateway_grpc_pb.js +73 -0
- package/proto/gateway/web/v1/ai_gateway_pb.js +11056 -7894
- package/proto/gateway/web/v1/attribute_value.ts +1 -1
- package/proto/gateway/web/v1/beta_gateway.ts +1 -1
- package/proto/gateway/web/v1/chain_gateway.ts +1 -1
- package/proto/gateway/web/v1/common.ts +1 -1
- package/proto/gateway/web/v1/derived_metric_gateway.ts +1 -1
- package/proto/gateway/web/v1/github_connector.ts +1 -1
- package/proto/gateway/web/v1/integration_gateway.ts +1 -1
- package/proto/gateway/web/v1/log_gateway.ts +1 -1
- package/proto/gateway/web/v1/market_gateway.ts +1 -1
- package/proto/gateway/web/v1/metric_gateway.ts +1 -1
- package/proto/gateway/web/v1/oauth_gateway.ts +1 -1
- package/proto/gateway/web/v1/plan_gateway.ts +1 -1
- package/proto/gateway/web/v1/policy_gateway.ts +1 -1
- package/proto/gateway/web/v1/reference_gateway.ts +1 -1
- package/proto/gateway/web/v1/rule_gateway.ts +1 -1
- package/proto/gateway/web/v1/slo_gateway.ts +1 -1
- package/proto/gateway/web/v1/trace_gateway.ts +1 -1
- package/proto/gateway/web/v1/trace_measure_gateway.ts +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
2
|
// versions:
|
|
3
|
-
// protoc-gen-ts_proto v2.15.
|
|
3
|
+
// protoc-gen-ts_proto v2.15.3
|
|
4
4
|
// protoc v3.21.12
|
|
5
5
|
// source: proto/gateway/web/v1/admin_gateway.proto
|
|
6
6
|
|
|
@@ -9,6 +9,12 @@ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
|
|
|
9
9
|
import type { Metadata } from "@grpc/grpc-js";
|
|
10
10
|
import { Timestamp } from "../../../../google/protobuf/timestamp";
|
|
11
11
|
import { ResponseStatus } from "../../common/v1/status";
|
|
12
|
+
import {
|
|
13
|
+
RelayHeartbeatFilter,
|
|
14
|
+
RelayHeartbeatSort,
|
|
15
|
+
relayHeartbeatSortFromJSON,
|
|
16
|
+
relayHeartbeatSortToJSON,
|
|
17
|
+
} from "./ai_gateway";
|
|
12
18
|
import { InviteCodeState, inviteCodeStateFromJSON, inviteCodeStateToJSON } from "./beta_gateway";
|
|
13
19
|
import { AIReferenceGroupFilter, AIReferenceName } from "./reference_gateway";
|
|
14
20
|
|
|
@@ -188,6 +194,74 @@ export interface ConfirmAIBillersResponse {
|
|
|
188
194
|
confirmedNameCount: number;
|
|
189
195
|
}
|
|
190
196
|
|
|
197
|
+
export interface ListAdminRelayHeartbeatsRequest {
|
|
198
|
+
filter:
|
|
199
|
+
| RelayHeartbeatFilter
|
|
200
|
+
| undefined;
|
|
201
|
+
/** Unspecified is RELAY_HEARTBEAT_SORT_LAST_SEEN_DESC; an unknown value is a validation error. */
|
|
202
|
+
sort: RelayHeartbeatSort;
|
|
203
|
+
/** The server default (100) when 0, coerced to 1000 above it; negative is a validation error. */
|
|
204
|
+
pageSize: number;
|
|
205
|
+
/**
|
|
206
|
+
* Opaque keyset cursor from a prior response's next_page_token; empty starts at the most recently seen
|
|
207
|
+
* relay. Valid only with the scope, sort and filter that produced it (the page size may change); any other token
|
|
208
|
+
* is a validation error. Weakly consistent: the order key (last_seen) moves forward as
|
|
209
|
+
* heartbeats arrive, so a relay that beats while the caller pages moves ahead of the cursor and is missed until
|
|
210
|
+
* a refresh.
|
|
211
|
+
*/
|
|
212
|
+
pageToken: string;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export interface ListAdminRelayHeartbeatsResponse {
|
|
216
|
+
status: ResponseStatus | undefined;
|
|
217
|
+
relayHeartbeats: AdminRelayHeartbeat[];
|
|
218
|
+
/** Empty once the last page has been returned. */
|
|
219
|
+
nextPageToken: string;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* AdminRelayHeartbeat mirrors telemetry.api.v1.AdminRelayHeartbeat. One relay machine for staff: RelayHeartbeat's
|
|
224
|
+
* summary plus the latest heartbeat's metadata and counters. The gateway stamps the organization, project, first and
|
|
225
|
+
* last seen and key id; the rest is what the relay reported, for display only. Every latest field is from one
|
|
226
|
+
* heartbeat, the last the gateway received.
|
|
227
|
+
*/
|
|
228
|
+
export interface AdminRelayHeartbeat {
|
|
229
|
+
organizationId: string;
|
|
230
|
+
projectId: string;
|
|
231
|
+
/** terma.user.id as the relay reported it; "" = signed out or an older relay. Client-claimed: display only. */
|
|
232
|
+
accountUserId: string;
|
|
233
|
+
hostName: string;
|
|
234
|
+
/** first heartbeat the gateway received */
|
|
235
|
+
firstSeen:
|
|
236
|
+
| Date
|
|
237
|
+
| undefined;
|
|
238
|
+
/** latest heartbeat the gateway received */
|
|
239
|
+
lastSeen:
|
|
240
|
+
| Date
|
|
241
|
+
| undefined;
|
|
242
|
+
/** of the latest heartbeat (by received time) */
|
|
243
|
+
termaVersion: string;
|
|
244
|
+
/** of the latest heartbeat: service, hook, manual, verbatim */
|
|
245
|
+
launch: string;
|
|
246
|
+
/** of the latest heartbeat: start, interval, setup, exit, verbatim */
|
|
247
|
+
reason: string;
|
|
248
|
+
/** of the latest heartbeat, verbatim; "" unless the relay stopped */
|
|
249
|
+
exitReason: string;
|
|
250
|
+
/** the key that signed the latest heartbeat */
|
|
251
|
+
miradorApiKeyId: string;
|
|
252
|
+
/**
|
|
253
|
+
* The latest heartbeat's terma.relay.heartbeat.counter.<name> ints by <name> (received.logs, dropped.no_key.traces,
|
|
254
|
+
* ...): figures since the beat before it that carried counters, not lifetime totals. A missing name was not
|
|
255
|
+
* reported, never zero; an empty map is a beat that carried none.
|
|
256
|
+
*/
|
|
257
|
+
counters: { [key: string]: number };
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
export interface AdminRelayHeartbeat_CountersEntry {
|
|
261
|
+
key: string;
|
|
262
|
+
value: number;
|
|
263
|
+
}
|
|
264
|
+
|
|
191
265
|
function createBaseGetAdminStatusRequest(): GetAdminStatusRequest {
|
|
192
266
|
return {};
|
|
193
267
|
}
|
|
@@ -2541,6 +2615,663 @@ export const ConfirmAIBillersResponse: MessageFns<ConfirmAIBillersResponse> = {
|
|
|
2541
2615
|
},
|
|
2542
2616
|
};
|
|
2543
2617
|
|
|
2618
|
+
function createBaseListAdminRelayHeartbeatsRequest(): ListAdminRelayHeartbeatsRequest {
|
|
2619
|
+
return { filter: undefined, sort: 0, pageSize: 0, pageToken: "" };
|
|
2620
|
+
}
|
|
2621
|
+
|
|
2622
|
+
export const ListAdminRelayHeartbeatsRequest: MessageFns<ListAdminRelayHeartbeatsRequest> = {
|
|
2623
|
+
encode(message: ListAdminRelayHeartbeatsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
|
2624
|
+
if (message.filter !== undefined) {
|
|
2625
|
+
RelayHeartbeatFilter.encode(message.filter, writer.uint32(10).fork()).join();
|
|
2626
|
+
}
|
|
2627
|
+
if (message.sort !== 0) {
|
|
2628
|
+
writer.uint32(16).int32(message.sort);
|
|
2629
|
+
}
|
|
2630
|
+
if (message.pageSize !== 0) {
|
|
2631
|
+
writer.uint32(24).int32(message.pageSize);
|
|
2632
|
+
}
|
|
2633
|
+
if (message.pageToken !== "") {
|
|
2634
|
+
writer.uint32(34).string(message.pageToken);
|
|
2635
|
+
}
|
|
2636
|
+
return writer;
|
|
2637
|
+
},
|
|
2638
|
+
|
|
2639
|
+
decode(input: BinaryReader | Uint8Array, length?: number): ListAdminRelayHeartbeatsRequest {
|
|
2640
|
+
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
|
|
2641
|
+
const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
|
|
2642
|
+
if (previousRecursionDepth >= 100) {
|
|
2643
|
+
throw new globalThis.Error("protobuf decode recursion limit exceeded");
|
|
2644
|
+
}
|
|
2645
|
+
(reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
|
|
2646
|
+
try {
|
|
2647
|
+
const end = length === undefined ? reader.len : reader.pos + length;
|
|
2648
|
+
const message = createBaseListAdminRelayHeartbeatsRequest();
|
|
2649
|
+
while (reader.pos < end) {
|
|
2650
|
+
const tag = reader.uint32();
|
|
2651
|
+
switch (tag >>> 3) {
|
|
2652
|
+
case 1: {
|
|
2653
|
+
if (tag !== 10) {
|
|
2654
|
+
break;
|
|
2655
|
+
}
|
|
2656
|
+
|
|
2657
|
+
message.filter = RelayHeartbeatFilter.decode(reader, reader.uint32());
|
|
2658
|
+
continue;
|
|
2659
|
+
}
|
|
2660
|
+
case 2: {
|
|
2661
|
+
if (tag !== 16) {
|
|
2662
|
+
break;
|
|
2663
|
+
}
|
|
2664
|
+
|
|
2665
|
+
message.sort = reader.int32() as any;
|
|
2666
|
+
continue;
|
|
2667
|
+
}
|
|
2668
|
+
case 3: {
|
|
2669
|
+
if (tag !== 24) {
|
|
2670
|
+
break;
|
|
2671
|
+
}
|
|
2672
|
+
|
|
2673
|
+
message.pageSize = reader.int32();
|
|
2674
|
+
continue;
|
|
2675
|
+
}
|
|
2676
|
+
case 4: {
|
|
2677
|
+
if (tag !== 34) {
|
|
2678
|
+
break;
|
|
2679
|
+
}
|
|
2680
|
+
|
|
2681
|
+
message.pageToken = reader.string();
|
|
2682
|
+
continue;
|
|
2683
|
+
}
|
|
2684
|
+
}
|
|
2685
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
2686
|
+
break;
|
|
2687
|
+
}
|
|
2688
|
+
reader.skip(tag & 7);
|
|
2689
|
+
}
|
|
2690
|
+
return message;
|
|
2691
|
+
} finally {
|
|
2692
|
+
(reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
|
|
2693
|
+
}
|
|
2694
|
+
},
|
|
2695
|
+
|
|
2696
|
+
fromJSON(object: any): ListAdminRelayHeartbeatsRequest {
|
|
2697
|
+
return {
|
|
2698
|
+
filter: isSet(object.filter) ? RelayHeartbeatFilter.fromJSON(object.filter) : undefined,
|
|
2699
|
+
sort: isSet(object.sort) ? relayHeartbeatSortFromJSON(object.sort) : 0,
|
|
2700
|
+
pageSize: isSet(object.pageSize)
|
|
2701
|
+
? globalThis.Number(object.pageSize)
|
|
2702
|
+
: isSet(object.page_size)
|
|
2703
|
+
? globalThis.Number(object.page_size)
|
|
2704
|
+
: 0,
|
|
2705
|
+
pageToken: isSet(object.pageToken)
|
|
2706
|
+
? globalThis.String(object.pageToken)
|
|
2707
|
+
: isSet(object.page_token)
|
|
2708
|
+
? globalThis.String(object.page_token)
|
|
2709
|
+
: "",
|
|
2710
|
+
};
|
|
2711
|
+
},
|
|
2712
|
+
|
|
2713
|
+
toJSON(message: ListAdminRelayHeartbeatsRequest): unknown {
|
|
2714
|
+
const obj: any = {};
|
|
2715
|
+
if (message.filter !== undefined) {
|
|
2716
|
+
obj.filter = RelayHeartbeatFilter.toJSON(message.filter);
|
|
2717
|
+
}
|
|
2718
|
+
if (message.sort !== 0) {
|
|
2719
|
+
obj.sort = relayHeartbeatSortToJSON(message.sort);
|
|
2720
|
+
}
|
|
2721
|
+
if (message.pageSize !== 0) {
|
|
2722
|
+
obj.pageSize = Math.round(message.pageSize);
|
|
2723
|
+
}
|
|
2724
|
+
if (message.pageToken !== "") {
|
|
2725
|
+
obj.pageToken = message.pageToken;
|
|
2726
|
+
}
|
|
2727
|
+
return obj;
|
|
2728
|
+
},
|
|
2729
|
+
|
|
2730
|
+
create<I extends Exact<DeepPartial<ListAdminRelayHeartbeatsRequest>, I>>(base?: I): ListAdminRelayHeartbeatsRequest {
|
|
2731
|
+
return ListAdminRelayHeartbeatsRequest.fromPartial(base ?? ({} as any));
|
|
2732
|
+
},
|
|
2733
|
+
fromPartial<I extends Exact<DeepPartial<ListAdminRelayHeartbeatsRequest>, I>>(
|
|
2734
|
+
object: I,
|
|
2735
|
+
): ListAdminRelayHeartbeatsRequest {
|
|
2736
|
+
const message = createBaseListAdminRelayHeartbeatsRequest();
|
|
2737
|
+
message.filter = (object.filter !== undefined && object.filter !== null)
|
|
2738
|
+
? RelayHeartbeatFilter.fromPartial(object.filter)
|
|
2739
|
+
: undefined;
|
|
2740
|
+
message.sort = object.sort ?? 0;
|
|
2741
|
+
message.pageSize = object.pageSize ?? 0;
|
|
2742
|
+
message.pageToken = object.pageToken ?? "";
|
|
2743
|
+
return message;
|
|
2744
|
+
},
|
|
2745
|
+
};
|
|
2746
|
+
|
|
2747
|
+
function createBaseListAdminRelayHeartbeatsResponse(): ListAdminRelayHeartbeatsResponse {
|
|
2748
|
+
return { status: undefined, relayHeartbeats: [], nextPageToken: "" };
|
|
2749
|
+
}
|
|
2750
|
+
|
|
2751
|
+
export const ListAdminRelayHeartbeatsResponse: MessageFns<ListAdminRelayHeartbeatsResponse> = {
|
|
2752
|
+
encode(message: ListAdminRelayHeartbeatsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
|
2753
|
+
if (message.status !== undefined) {
|
|
2754
|
+
ResponseStatus.encode(message.status, writer.uint32(10).fork()).join();
|
|
2755
|
+
}
|
|
2756
|
+
for (const v of message.relayHeartbeats) {
|
|
2757
|
+
AdminRelayHeartbeat.encode(v!, writer.uint32(18).fork()).join();
|
|
2758
|
+
}
|
|
2759
|
+
if (message.nextPageToken !== "") {
|
|
2760
|
+
writer.uint32(26).string(message.nextPageToken);
|
|
2761
|
+
}
|
|
2762
|
+
return writer;
|
|
2763
|
+
},
|
|
2764
|
+
|
|
2765
|
+
decode(input: BinaryReader | Uint8Array, length?: number): ListAdminRelayHeartbeatsResponse {
|
|
2766
|
+
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
|
|
2767
|
+
const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
|
|
2768
|
+
if (previousRecursionDepth >= 100) {
|
|
2769
|
+
throw new globalThis.Error("protobuf decode recursion limit exceeded");
|
|
2770
|
+
}
|
|
2771
|
+
(reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
|
|
2772
|
+
try {
|
|
2773
|
+
const end = length === undefined ? reader.len : reader.pos + length;
|
|
2774
|
+
const message = createBaseListAdminRelayHeartbeatsResponse();
|
|
2775
|
+
while (reader.pos < end) {
|
|
2776
|
+
const tag = reader.uint32();
|
|
2777
|
+
switch (tag >>> 3) {
|
|
2778
|
+
case 1: {
|
|
2779
|
+
if (tag !== 10) {
|
|
2780
|
+
break;
|
|
2781
|
+
}
|
|
2782
|
+
|
|
2783
|
+
message.status = ResponseStatus.decode(reader, reader.uint32());
|
|
2784
|
+
continue;
|
|
2785
|
+
}
|
|
2786
|
+
case 2: {
|
|
2787
|
+
if (tag !== 18) {
|
|
2788
|
+
break;
|
|
2789
|
+
}
|
|
2790
|
+
|
|
2791
|
+
message.relayHeartbeats.push(AdminRelayHeartbeat.decode(reader, reader.uint32()));
|
|
2792
|
+
continue;
|
|
2793
|
+
}
|
|
2794
|
+
case 3: {
|
|
2795
|
+
if (tag !== 26) {
|
|
2796
|
+
break;
|
|
2797
|
+
}
|
|
2798
|
+
|
|
2799
|
+
message.nextPageToken = reader.string();
|
|
2800
|
+
continue;
|
|
2801
|
+
}
|
|
2802
|
+
}
|
|
2803
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
2804
|
+
break;
|
|
2805
|
+
}
|
|
2806
|
+
reader.skip(tag & 7);
|
|
2807
|
+
}
|
|
2808
|
+
return message;
|
|
2809
|
+
} finally {
|
|
2810
|
+
(reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
|
|
2811
|
+
}
|
|
2812
|
+
},
|
|
2813
|
+
|
|
2814
|
+
fromJSON(object: any): ListAdminRelayHeartbeatsResponse {
|
|
2815
|
+
return {
|
|
2816
|
+
status: isSet(object.status) ? ResponseStatus.fromJSON(object.status) : undefined,
|
|
2817
|
+
relayHeartbeats: globalThis.Array.isArray(object?.relayHeartbeats)
|
|
2818
|
+
? object.relayHeartbeats.map((e: any) => AdminRelayHeartbeat.fromJSON(e))
|
|
2819
|
+
: globalThis.Array.isArray(object?.relay_heartbeats)
|
|
2820
|
+
? object.relay_heartbeats.map((e: any) => AdminRelayHeartbeat.fromJSON(e))
|
|
2821
|
+
: [],
|
|
2822
|
+
nextPageToken: isSet(object.nextPageToken)
|
|
2823
|
+
? globalThis.String(object.nextPageToken)
|
|
2824
|
+
: isSet(object.next_page_token)
|
|
2825
|
+
? globalThis.String(object.next_page_token)
|
|
2826
|
+
: "",
|
|
2827
|
+
};
|
|
2828
|
+
},
|
|
2829
|
+
|
|
2830
|
+
toJSON(message: ListAdminRelayHeartbeatsResponse): unknown {
|
|
2831
|
+
const obj: any = {};
|
|
2832
|
+
if (message.status !== undefined) {
|
|
2833
|
+
obj.status = ResponseStatus.toJSON(message.status);
|
|
2834
|
+
}
|
|
2835
|
+
if (message.relayHeartbeats?.length) {
|
|
2836
|
+
obj.relayHeartbeats = message.relayHeartbeats.map((e) => AdminRelayHeartbeat.toJSON(e));
|
|
2837
|
+
}
|
|
2838
|
+
if (message.nextPageToken !== "") {
|
|
2839
|
+
obj.nextPageToken = message.nextPageToken;
|
|
2840
|
+
}
|
|
2841
|
+
return obj;
|
|
2842
|
+
},
|
|
2843
|
+
|
|
2844
|
+
create<I extends Exact<DeepPartial<ListAdminRelayHeartbeatsResponse>, I>>(
|
|
2845
|
+
base?: I,
|
|
2846
|
+
): ListAdminRelayHeartbeatsResponse {
|
|
2847
|
+
return ListAdminRelayHeartbeatsResponse.fromPartial(base ?? ({} as any));
|
|
2848
|
+
},
|
|
2849
|
+
fromPartial<I extends Exact<DeepPartial<ListAdminRelayHeartbeatsResponse>, I>>(
|
|
2850
|
+
object: I,
|
|
2851
|
+
): ListAdminRelayHeartbeatsResponse {
|
|
2852
|
+
const message = createBaseListAdminRelayHeartbeatsResponse();
|
|
2853
|
+
message.status = (object.status !== undefined && object.status !== null)
|
|
2854
|
+
? ResponseStatus.fromPartial(object.status)
|
|
2855
|
+
: undefined;
|
|
2856
|
+
message.relayHeartbeats = object.relayHeartbeats?.map((e) => AdminRelayHeartbeat.fromPartial(e)) || [];
|
|
2857
|
+
message.nextPageToken = object.nextPageToken ?? "";
|
|
2858
|
+
return message;
|
|
2859
|
+
},
|
|
2860
|
+
};
|
|
2861
|
+
|
|
2862
|
+
function createBaseAdminRelayHeartbeat(): AdminRelayHeartbeat {
|
|
2863
|
+
return {
|
|
2864
|
+
organizationId: "",
|
|
2865
|
+
projectId: "",
|
|
2866
|
+
accountUserId: "",
|
|
2867
|
+
hostName: "",
|
|
2868
|
+
firstSeen: undefined,
|
|
2869
|
+
lastSeen: undefined,
|
|
2870
|
+
termaVersion: "",
|
|
2871
|
+
launch: "",
|
|
2872
|
+
reason: "",
|
|
2873
|
+
exitReason: "",
|
|
2874
|
+
miradorApiKeyId: "",
|
|
2875
|
+
counters: {},
|
|
2876
|
+
};
|
|
2877
|
+
}
|
|
2878
|
+
|
|
2879
|
+
export const AdminRelayHeartbeat: MessageFns<AdminRelayHeartbeat> = {
|
|
2880
|
+
encode(message: AdminRelayHeartbeat, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
|
2881
|
+
if (message.organizationId !== "") {
|
|
2882
|
+
writer.uint32(10).string(message.organizationId);
|
|
2883
|
+
}
|
|
2884
|
+
if (message.projectId !== "") {
|
|
2885
|
+
writer.uint32(18).string(message.projectId);
|
|
2886
|
+
}
|
|
2887
|
+
if (message.accountUserId !== "") {
|
|
2888
|
+
writer.uint32(26).string(message.accountUserId);
|
|
2889
|
+
}
|
|
2890
|
+
if (message.hostName !== "") {
|
|
2891
|
+
writer.uint32(34).string(message.hostName);
|
|
2892
|
+
}
|
|
2893
|
+
if (message.firstSeen !== undefined) {
|
|
2894
|
+
Timestamp.encode(toTimestamp(message.firstSeen), writer.uint32(42).fork()).join();
|
|
2895
|
+
}
|
|
2896
|
+
if (message.lastSeen !== undefined) {
|
|
2897
|
+
Timestamp.encode(toTimestamp(message.lastSeen), writer.uint32(50).fork()).join();
|
|
2898
|
+
}
|
|
2899
|
+
if (message.termaVersion !== "") {
|
|
2900
|
+
writer.uint32(58).string(message.termaVersion);
|
|
2901
|
+
}
|
|
2902
|
+
if (message.launch !== "") {
|
|
2903
|
+
writer.uint32(66).string(message.launch);
|
|
2904
|
+
}
|
|
2905
|
+
if (message.reason !== "") {
|
|
2906
|
+
writer.uint32(74).string(message.reason);
|
|
2907
|
+
}
|
|
2908
|
+
if (message.exitReason !== "") {
|
|
2909
|
+
writer.uint32(82).string(message.exitReason);
|
|
2910
|
+
}
|
|
2911
|
+
if (message.miradorApiKeyId !== "") {
|
|
2912
|
+
writer.uint32(90).string(message.miradorApiKeyId);
|
|
2913
|
+
}
|
|
2914
|
+
globalThis.Object.entries(message.counters).forEach(([key, value]: [string, number]) => {
|
|
2915
|
+
AdminRelayHeartbeat_CountersEntry.encode({ key: key as any, value }, writer.uint32(98).fork()).join();
|
|
2916
|
+
});
|
|
2917
|
+
return writer;
|
|
2918
|
+
},
|
|
2919
|
+
|
|
2920
|
+
decode(input: BinaryReader | Uint8Array, length?: number): AdminRelayHeartbeat {
|
|
2921
|
+
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
|
|
2922
|
+
const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
|
|
2923
|
+
if (previousRecursionDepth >= 100) {
|
|
2924
|
+
throw new globalThis.Error("protobuf decode recursion limit exceeded");
|
|
2925
|
+
}
|
|
2926
|
+
(reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
|
|
2927
|
+
try {
|
|
2928
|
+
const end = length === undefined ? reader.len : reader.pos + length;
|
|
2929
|
+
const message = createBaseAdminRelayHeartbeat();
|
|
2930
|
+
while (reader.pos < end) {
|
|
2931
|
+
const tag = reader.uint32();
|
|
2932
|
+
switch (tag >>> 3) {
|
|
2933
|
+
case 1: {
|
|
2934
|
+
if (tag !== 10) {
|
|
2935
|
+
break;
|
|
2936
|
+
}
|
|
2937
|
+
|
|
2938
|
+
message.organizationId = reader.string();
|
|
2939
|
+
continue;
|
|
2940
|
+
}
|
|
2941
|
+
case 2: {
|
|
2942
|
+
if (tag !== 18) {
|
|
2943
|
+
break;
|
|
2944
|
+
}
|
|
2945
|
+
|
|
2946
|
+
message.projectId = reader.string();
|
|
2947
|
+
continue;
|
|
2948
|
+
}
|
|
2949
|
+
case 3: {
|
|
2950
|
+
if (tag !== 26) {
|
|
2951
|
+
break;
|
|
2952
|
+
}
|
|
2953
|
+
|
|
2954
|
+
message.accountUserId = reader.string();
|
|
2955
|
+
continue;
|
|
2956
|
+
}
|
|
2957
|
+
case 4: {
|
|
2958
|
+
if (tag !== 34) {
|
|
2959
|
+
break;
|
|
2960
|
+
}
|
|
2961
|
+
|
|
2962
|
+
message.hostName = reader.string();
|
|
2963
|
+
continue;
|
|
2964
|
+
}
|
|
2965
|
+
case 5: {
|
|
2966
|
+
if (tag !== 42) {
|
|
2967
|
+
break;
|
|
2968
|
+
}
|
|
2969
|
+
|
|
2970
|
+
message.firstSeen = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
|
|
2971
|
+
continue;
|
|
2972
|
+
}
|
|
2973
|
+
case 6: {
|
|
2974
|
+
if (tag !== 50) {
|
|
2975
|
+
break;
|
|
2976
|
+
}
|
|
2977
|
+
|
|
2978
|
+
message.lastSeen = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
|
|
2979
|
+
continue;
|
|
2980
|
+
}
|
|
2981
|
+
case 7: {
|
|
2982
|
+
if (tag !== 58) {
|
|
2983
|
+
break;
|
|
2984
|
+
}
|
|
2985
|
+
|
|
2986
|
+
message.termaVersion = reader.string();
|
|
2987
|
+
continue;
|
|
2988
|
+
}
|
|
2989
|
+
case 8: {
|
|
2990
|
+
if (tag !== 66) {
|
|
2991
|
+
break;
|
|
2992
|
+
}
|
|
2993
|
+
|
|
2994
|
+
message.launch = reader.string();
|
|
2995
|
+
continue;
|
|
2996
|
+
}
|
|
2997
|
+
case 9: {
|
|
2998
|
+
if (tag !== 74) {
|
|
2999
|
+
break;
|
|
3000
|
+
}
|
|
3001
|
+
|
|
3002
|
+
message.reason = reader.string();
|
|
3003
|
+
continue;
|
|
3004
|
+
}
|
|
3005
|
+
case 10: {
|
|
3006
|
+
if (tag !== 82) {
|
|
3007
|
+
break;
|
|
3008
|
+
}
|
|
3009
|
+
|
|
3010
|
+
message.exitReason = reader.string();
|
|
3011
|
+
continue;
|
|
3012
|
+
}
|
|
3013
|
+
case 11: {
|
|
3014
|
+
if (tag !== 90) {
|
|
3015
|
+
break;
|
|
3016
|
+
}
|
|
3017
|
+
|
|
3018
|
+
message.miradorApiKeyId = reader.string();
|
|
3019
|
+
continue;
|
|
3020
|
+
}
|
|
3021
|
+
case 12: {
|
|
3022
|
+
if (tag !== 98) {
|
|
3023
|
+
break;
|
|
3024
|
+
}
|
|
3025
|
+
|
|
3026
|
+
const entry12 = AdminRelayHeartbeat_CountersEntry.decode(reader, reader.uint32());
|
|
3027
|
+
if (entry12.value !== undefined) {
|
|
3028
|
+
message.counters[entry12.key] = entry12.value;
|
|
3029
|
+
}
|
|
3030
|
+
continue;
|
|
3031
|
+
}
|
|
3032
|
+
}
|
|
3033
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
3034
|
+
break;
|
|
3035
|
+
}
|
|
3036
|
+
reader.skip(tag & 7);
|
|
3037
|
+
}
|
|
3038
|
+
return message;
|
|
3039
|
+
} finally {
|
|
3040
|
+
(reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
|
|
3041
|
+
}
|
|
3042
|
+
},
|
|
3043
|
+
|
|
3044
|
+
fromJSON(object: any): AdminRelayHeartbeat {
|
|
3045
|
+
return {
|
|
3046
|
+
organizationId: isSet(object.organizationId)
|
|
3047
|
+
? globalThis.String(object.organizationId)
|
|
3048
|
+
: isSet(object.organization_id)
|
|
3049
|
+
? globalThis.String(object.organization_id)
|
|
3050
|
+
: "",
|
|
3051
|
+
projectId: isSet(object.projectId)
|
|
3052
|
+
? globalThis.String(object.projectId)
|
|
3053
|
+
: isSet(object.project_id)
|
|
3054
|
+
? globalThis.String(object.project_id)
|
|
3055
|
+
: "",
|
|
3056
|
+
accountUserId: isSet(object.accountUserId)
|
|
3057
|
+
? globalThis.String(object.accountUserId)
|
|
3058
|
+
: isSet(object.account_user_id)
|
|
3059
|
+
? globalThis.String(object.account_user_id)
|
|
3060
|
+
: "",
|
|
3061
|
+
hostName: isSet(object.hostName)
|
|
3062
|
+
? globalThis.String(object.hostName)
|
|
3063
|
+
: isSet(object.host_name)
|
|
3064
|
+
? globalThis.String(object.host_name)
|
|
3065
|
+
: "",
|
|
3066
|
+
firstSeen: isSet(object.firstSeen)
|
|
3067
|
+
? fromJsonTimestamp(object.firstSeen)
|
|
3068
|
+
: isSet(object.first_seen)
|
|
3069
|
+
? fromJsonTimestamp(object.first_seen)
|
|
3070
|
+
: undefined,
|
|
3071
|
+
lastSeen: isSet(object.lastSeen)
|
|
3072
|
+
? fromJsonTimestamp(object.lastSeen)
|
|
3073
|
+
: isSet(object.last_seen)
|
|
3074
|
+
? fromJsonTimestamp(object.last_seen)
|
|
3075
|
+
: undefined,
|
|
3076
|
+
termaVersion: isSet(object.termaVersion)
|
|
3077
|
+
? globalThis.String(object.termaVersion)
|
|
3078
|
+
: isSet(object.terma_version)
|
|
3079
|
+
? globalThis.String(object.terma_version)
|
|
3080
|
+
: "",
|
|
3081
|
+
launch: isSet(object.launch) ? globalThis.String(object.launch) : "",
|
|
3082
|
+
reason: isSet(object.reason) ? globalThis.String(object.reason) : "",
|
|
3083
|
+
exitReason: isSet(object.exitReason)
|
|
3084
|
+
? globalThis.String(object.exitReason)
|
|
3085
|
+
: isSet(object.exit_reason)
|
|
3086
|
+
? globalThis.String(object.exit_reason)
|
|
3087
|
+
: "",
|
|
3088
|
+
miradorApiKeyId: isSet(object.miradorApiKeyId)
|
|
3089
|
+
? globalThis.String(object.miradorApiKeyId)
|
|
3090
|
+
: isSet(object.mirador_api_key_id)
|
|
3091
|
+
? globalThis.String(object.mirador_api_key_id)
|
|
3092
|
+
: "",
|
|
3093
|
+
counters: isObject(object.counters)
|
|
3094
|
+
? (globalThis.Object.entries(object.counters) as [string, any][]).reduce(
|
|
3095
|
+
(acc: { [key: string]: number }, [key, value]: [string, any]) => {
|
|
3096
|
+
globalThis.Object.defineProperty(acc, key, {
|
|
3097
|
+
value: globalThis.Number(value),
|
|
3098
|
+
enumerable: true,
|
|
3099
|
+
configurable: true,
|
|
3100
|
+
writable: true,
|
|
3101
|
+
});
|
|
3102
|
+
return acc;
|
|
3103
|
+
},
|
|
3104
|
+
{},
|
|
3105
|
+
)
|
|
3106
|
+
: {},
|
|
3107
|
+
};
|
|
3108
|
+
},
|
|
3109
|
+
|
|
3110
|
+
toJSON(message: AdminRelayHeartbeat): unknown {
|
|
3111
|
+
const obj: any = {};
|
|
3112
|
+
if (message.organizationId !== "") {
|
|
3113
|
+
obj.organizationId = message.organizationId;
|
|
3114
|
+
}
|
|
3115
|
+
if (message.projectId !== "") {
|
|
3116
|
+
obj.projectId = message.projectId;
|
|
3117
|
+
}
|
|
3118
|
+
if (message.accountUserId !== "") {
|
|
3119
|
+
obj.accountUserId = message.accountUserId;
|
|
3120
|
+
}
|
|
3121
|
+
if (message.hostName !== "") {
|
|
3122
|
+
obj.hostName = message.hostName;
|
|
3123
|
+
}
|
|
3124
|
+
if (message.firstSeen !== undefined) {
|
|
3125
|
+
obj.firstSeen = message.firstSeen.toISOString();
|
|
3126
|
+
}
|
|
3127
|
+
if (message.lastSeen !== undefined) {
|
|
3128
|
+
obj.lastSeen = message.lastSeen.toISOString();
|
|
3129
|
+
}
|
|
3130
|
+
if (message.termaVersion !== "") {
|
|
3131
|
+
obj.termaVersion = message.termaVersion;
|
|
3132
|
+
}
|
|
3133
|
+
if (message.launch !== "") {
|
|
3134
|
+
obj.launch = message.launch;
|
|
3135
|
+
}
|
|
3136
|
+
if (message.reason !== "") {
|
|
3137
|
+
obj.reason = message.reason;
|
|
3138
|
+
}
|
|
3139
|
+
if (message.exitReason !== "") {
|
|
3140
|
+
obj.exitReason = message.exitReason;
|
|
3141
|
+
}
|
|
3142
|
+
if (message.miradorApiKeyId !== "") {
|
|
3143
|
+
obj.miradorApiKeyId = message.miradorApiKeyId;
|
|
3144
|
+
}
|
|
3145
|
+
if (message.counters) {
|
|
3146
|
+
const entries = globalThis.Object.entries(message.counters) as [string, number][];
|
|
3147
|
+
if (entries.length > 0) {
|
|
3148
|
+
obj.counters = {};
|
|
3149
|
+
entries.forEach(([k, v]) => {
|
|
3150
|
+
obj.counters[k] = Math.round(v);
|
|
3151
|
+
});
|
|
3152
|
+
}
|
|
3153
|
+
}
|
|
3154
|
+
return obj;
|
|
3155
|
+
},
|
|
3156
|
+
|
|
3157
|
+
create<I extends Exact<DeepPartial<AdminRelayHeartbeat>, I>>(base?: I): AdminRelayHeartbeat {
|
|
3158
|
+
return AdminRelayHeartbeat.fromPartial(base ?? ({} as any));
|
|
3159
|
+
},
|
|
3160
|
+
fromPartial<I extends Exact<DeepPartial<AdminRelayHeartbeat>, I>>(object: I): AdminRelayHeartbeat {
|
|
3161
|
+
const message = createBaseAdminRelayHeartbeat();
|
|
3162
|
+
message.organizationId = object.organizationId ?? "";
|
|
3163
|
+
message.projectId = object.projectId ?? "";
|
|
3164
|
+
message.accountUserId = object.accountUserId ?? "";
|
|
3165
|
+
message.hostName = object.hostName ?? "";
|
|
3166
|
+
message.firstSeen = object.firstSeen ?? undefined;
|
|
3167
|
+
message.lastSeen = object.lastSeen ?? undefined;
|
|
3168
|
+
message.termaVersion = object.termaVersion ?? "";
|
|
3169
|
+
message.launch = object.launch ?? "";
|
|
3170
|
+
message.reason = object.reason ?? "";
|
|
3171
|
+
message.exitReason = object.exitReason ?? "";
|
|
3172
|
+
message.miradorApiKeyId = object.miradorApiKeyId ?? "";
|
|
3173
|
+
message.counters = (globalThis.Object.entries(object.counters ?? {}) as [string, number][]).reduce(
|
|
3174
|
+
(acc: { [key: string]: number }, [key, value]: [string, number]) => {
|
|
3175
|
+
if (value !== undefined) {
|
|
3176
|
+
acc[key] = globalThis.Number(value);
|
|
3177
|
+
}
|
|
3178
|
+
return acc;
|
|
3179
|
+
},
|
|
3180
|
+
{},
|
|
3181
|
+
);
|
|
3182
|
+
return message;
|
|
3183
|
+
},
|
|
3184
|
+
};
|
|
3185
|
+
|
|
3186
|
+
function createBaseAdminRelayHeartbeat_CountersEntry(): AdminRelayHeartbeat_CountersEntry {
|
|
3187
|
+
return { key: "", value: 0 };
|
|
3188
|
+
}
|
|
3189
|
+
|
|
3190
|
+
export const AdminRelayHeartbeat_CountersEntry: MessageFns<AdminRelayHeartbeat_CountersEntry> = {
|
|
3191
|
+
encode(message: AdminRelayHeartbeat_CountersEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
|
3192
|
+
if (message.key !== "") {
|
|
3193
|
+
writer.uint32(10).string(message.key);
|
|
3194
|
+
}
|
|
3195
|
+
if (message.value !== 0) {
|
|
3196
|
+
writer.uint32(16).int64(message.value);
|
|
3197
|
+
}
|
|
3198
|
+
return writer;
|
|
3199
|
+
},
|
|
3200
|
+
|
|
3201
|
+
decode(input: BinaryReader | Uint8Array, length?: number): AdminRelayHeartbeat_CountersEntry {
|
|
3202
|
+
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
|
|
3203
|
+
const previousRecursionDepth = (reader as any).__tsProtoDecodeDepth ?? 0;
|
|
3204
|
+
if (previousRecursionDepth >= 100) {
|
|
3205
|
+
throw new globalThis.Error("protobuf decode recursion limit exceeded");
|
|
3206
|
+
}
|
|
3207
|
+
(reader as any).__tsProtoDecodeDepth = previousRecursionDepth + 1;
|
|
3208
|
+
try {
|
|
3209
|
+
const end = length === undefined ? reader.len : reader.pos + length;
|
|
3210
|
+
const message = createBaseAdminRelayHeartbeat_CountersEntry();
|
|
3211
|
+
while (reader.pos < end) {
|
|
3212
|
+
const tag = reader.uint32();
|
|
3213
|
+
switch (tag >>> 3) {
|
|
3214
|
+
case 1: {
|
|
3215
|
+
if (tag !== 10) {
|
|
3216
|
+
break;
|
|
3217
|
+
}
|
|
3218
|
+
|
|
3219
|
+
message.key = reader.string();
|
|
3220
|
+
continue;
|
|
3221
|
+
}
|
|
3222
|
+
case 2: {
|
|
3223
|
+
if (tag !== 16) {
|
|
3224
|
+
break;
|
|
3225
|
+
}
|
|
3226
|
+
|
|
3227
|
+
message.value = longToNumber(reader.int64());
|
|
3228
|
+
continue;
|
|
3229
|
+
}
|
|
3230
|
+
}
|
|
3231
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
3232
|
+
break;
|
|
3233
|
+
}
|
|
3234
|
+
reader.skip(tag & 7);
|
|
3235
|
+
}
|
|
3236
|
+
return message;
|
|
3237
|
+
} finally {
|
|
3238
|
+
(reader as any).__tsProtoDecodeDepth = previousRecursionDepth;
|
|
3239
|
+
}
|
|
3240
|
+
},
|
|
3241
|
+
|
|
3242
|
+
fromJSON(object: any): AdminRelayHeartbeat_CountersEntry {
|
|
3243
|
+
return {
|
|
3244
|
+
key: isSet(object.key) ? globalThis.String(object.key) : "",
|
|
3245
|
+
value: isSet(object.value) ? globalThis.Number(object.value) : 0,
|
|
3246
|
+
};
|
|
3247
|
+
},
|
|
3248
|
+
|
|
3249
|
+
toJSON(message: AdminRelayHeartbeat_CountersEntry): unknown {
|
|
3250
|
+
const obj: any = {};
|
|
3251
|
+
if (message.key !== "") {
|
|
3252
|
+
obj.key = message.key;
|
|
3253
|
+
}
|
|
3254
|
+
if (message.value !== 0) {
|
|
3255
|
+
obj.value = Math.round(message.value);
|
|
3256
|
+
}
|
|
3257
|
+
return obj;
|
|
3258
|
+
},
|
|
3259
|
+
|
|
3260
|
+
create<I extends Exact<DeepPartial<AdminRelayHeartbeat_CountersEntry>, I>>(
|
|
3261
|
+
base?: I,
|
|
3262
|
+
): AdminRelayHeartbeat_CountersEntry {
|
|
3263
|
+
return AdminRelayHeartbeat_CountersEntry.fromPartial(base ?? ({} as any));
|
|
3264
|
+
},
|
|
3265
|
+
fromPartial<I extends Exact<DeepPartial<AdminRelayHeartbeat_CountersEntry>, I>>(
|
|
3266
|
+
object: I,
|
|
3267
|
+
): AdminRelayHeartbeat_CountersEntry {
|
|
3268
|
+
const message = createBaseAdminRelayHeartbeat_CountersEntry();
|
|
3269
|
+
message.key = object.key ?? "";
|
|
3270
|
+
message.value = object.value ?? 0;
|
|
3271
|
+
return message;
|
|
3272
|
+
},
|
|
3273
|
+
};
|
|
3274
|
+
|
|
2544
3275
|
/**
|
|
2545
3276
|
* AdminGatewayService is the browser-facing surface of the admin tools, across every domain, which only
|
|
2546
3277
|
* Mirador staff (a verified mirador.org primary email) may use. The gateway's admin gate admits every RPC
|
|
@@ -2574,6 +3305,15 @@ export interface AdminGatewayService {
|
|
|
2574
3305
|
ConfirmAIModels(request: ConfirmAIModelsRequest, metadata?: Metadata): Promise<ConfirmAIModelsResponse>;
|
|
2575
3306
|
ConfirmAIEfforts(request: ConfirmAIEffortsRequest, metadata?: Metadata): Promise<ConfirmAIEffortsResponse>;
|
|
2576
3307
|
ConfirmAIBillers(request: ConfirmAIBillersRequest, metadata?: Metadata): Promise<ConfirmAIBillersResponse>;
|
|
3308
|
+
/**
|
|
3309
|
+
* Every Terma relay across the fleet with its latest heartbeat in full, one row per (organization, project, user,
|
|
3310
|
+
* host), most recently seen first (keyset-paginated); it proxies
|
|
3311
|
+
* telemetry.api.v1.TelemetryAdminService.ListRelayHeartbeats. Rows carry ids, not names.
|
|
3312
|
+
*/
|
|
3313
|
+
ListRelayHeartbeats(
|
|
3314
|
+
request: ListAdminRelayHeartbeatsRequest,
|
|
3315
|
+
metadata?: Metadata,
|
|
3316
|
+
): Promise<ListAdminRelayHeartbeatsResponse>;
|
|
2577
3317
|
}
|
|
2578
3318
|
|
|
2579
3319
|
export const AdminGatewayServiceServiceName = "gateway.web.v1.AdminGatewayService";
|
|
@@ -2595,6 +3335,7 @@ export class AdminGatewayServiceClientImpl implements AdminGatewayService {
|
|
|
2595
3335
|
this.ConfirmAIModels = this.ConfirmAIModels.bind(this);
|
|
2596
3336
|
this.ConfirmAIEfforts = this.ConfirmAIEfforts.bind(this);
|
|
2597
3337
|
this.ConfirmAIBillers = this.ConfirmAIBillers.bind(this);
|
|
3338
|
+
this.ListRelayHeartbeats = this.ListRelayHeartbeats.bind(this);
|
|
2598
3339
|
}
|
|
2599
3340
|
GetAdminStatus(request: GetAdminStatusRequest, metadata?: Metadata): Promise<GetAdminStatusResponse> {
|
|
2600
3341
|
const data = GetAdminStatusRequest.encode(request).finish();
|
|
@@ -2667,6 +3408,15 @@ export class AdminGatewayServiceClientImpl implements AdminGatewayService {
|
|
|
2667
3408
|
const promise = this.rpc.request(this.service, "ConfirmAIBillers", data, metadata);
|
|
2668
3409
|
return promise.then((data) => ConfirmAIBillersResponse.decode(new BinaryReader(data)));
|
|
2669
3410
|
}
|
|
3411
|
+
|
|
3412
|
+
ListRelayHeartbeats(
|
|
3413
|
+
request: ListAdminRelayHeartbeatsRequest,
|
|
3414
|
+
metadata?: Metadata,
|
|
3415
|
+
): Promise<ListAdminRelayHeartbeatsResponse> {
|
|
3416
|
+
const data = ListAdminRelayHeartbeatsRequest.encode(request).finish();
|
|
3417
|
+
const promise = this.rpc.request(this.service, "ListRelayHeartbeats", data, metadata);
|
|
3418
|
+
return promise.then((data) => ListAdminRelayHeartbeatsResponse.decode(new BinaryReader(data)));
|
|
3419
|
+
}
|
|
2670
3420
|
}
|
|
2671
3421
|
|
|
2672
3422
|
interface Rpc {
|
|
@@ -2718,6 +3468,10 @@ function longToNumber(int64: { toString(): string }): number {
|
|
|
2718
3468
|
return num;
|
|
2719
3469
|
}
|
|
2720
3470
|
|
|
3471
|
+
function isObject(value: any): boolean {
|
|
3472
|
+
return typeof value === "object" && value !== null;
|
|
3473
|
+
}
|
|
3474
|
+
|
|
2721
3475
|
function isSet(value: any): boolean {
|
|
2722
3476
|
return value !== null && value !== undefined;
|
|
2723
3477
|
}
|