@miradorlabs/web-grpc 3.33.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.
Files changed (33) hide show
  1. package/google/api/field_behavior.ts +1 -1
  2. package/google/protobuf/descriptor.ts +1 -1
  3. package/google/protobuf/duration.ts +1 -1
  4. package/google/protobuf/timestamp.ts +32 -10
  5. package/package.json +1 -1
  6. package/proto/gateway/common/v1/attribute_value.ts +1 -1
  7. package/proto/gateway/common/v1/status.ts +1 -1
  8. package/proto/gateway/common/v1/types.ts +1 -1
  9. package/proto/gateway/web/v1/account_gateway.ts +1 -1
  10. package/proto/gateway/web/v1/admin_gateway.ts +755 -1
  11. package/proto/gateway/web/v1/admin_gateway_grpc_pb.js +37 -0
  12. package/proto/gateway/web/v1/admin_gateway_pb.js +1061 -0
  13. package/proto/gateway/web/v1/ai_gateway.ts +1016 -186
  14. package/proto/gateway/web/v1/ai_gateway_grpc_pb.js +36 -0
  15. package/proto/gateway/web/v1/ai_gateway_pb.js +1593 -118
  16. package/proto/gateway/web/v1/attribute_value.ts +1 -1
  17. package/proto/gateway/web/v1/beta_gateway.ts +1 -1
  18. package/proto/gateway/web/v1/chain_gateway.ts +1 -1
  19. package/proto/gateway/web/v1/common.ts +1 -1
  20. package/proto/gateway/web/v1/derived_metric_gateway.ts +1 -1
  21. package/proto/gateway/web/v1/github_connector.ts +1 -1
  22. package/proto/gateway/web/v1/integration_gateway.ts +1 -1
  23. package/proto/gateway/web/v1/log_gateway.ts +1 -1
  24. package/proto/gateway/web/v1/market_gateway.ts +1 -1
  25. package/proto/gateway/web/v1/metric_gateway.ts +1 -1
  26. package/proto/gateway/web/v1/oauth_gateway.ts +1 -1
  27. package/proto/gateway/web/v1/plan_gateway.ts +1 -1
  28. package/proto/gateway/web/v1/policy_gateway.ts +1 -1
  29. package/proto/gateway/web/v1/reference_gateway.ts +1 -1
  30. package/proto/gateway/web/v1/rule_gateway.ts +1 -1
  31. package/proto/gateway/web/v1/slo_gateway.ts +1 -1
  32. package/proto/gateway/web/v1/trace_gateway.ts +1 -1
  33. 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.0
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
  }