@dcl/protocol 1.0.0-30343893778.commit-acf163a → 1.0.0-30373157983.commit-2c475cb

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.
@@ -5,6 +5,135 @@ import { AvatarMask, avatarMaskFromJSON, avatarMaskToJSON } from "../../sdk/comp
5
5
 
6
6
  export const protobufPackage = "decentraland.kernel.apis";
7
7
 
8
+ /**
9
+ * Identifies which fullscreen explorer panel OpenExplorerUi targets.
10
+ * EU_SETTINGS holds 0 so an unset `ui` field defaults to the least-intrusive panel.
11
+ */
12
+ export enum ExplorerUi {
13
+ EU_SETTINGS = 0,
14
+ EU_MAP = 1,
15
+ EU_BACKPACK = 2,
16
+ EU_CAMERA_REEL = 3,
17
+ EU_COMMUNITIES = 4,
18
+ EU_PLACES = 5,
19
+ EU_EVENTS = 6,
20
+ UNRECOGNIZED = -1,
21
+ }
22
+
23
+ export function explorerUiFromJSON(object: any): ExplorerUi {
24
+ switch (object) {
25
+ case 0:
26
+ case "EU_SETTINGS":
27
+ return ExplorerUi.EU_SETTINGS;
28
+ case 1:
29
+ case "EU_MAP":
30
+ return ExplorerUi.EU_MAP;
31
+ case 2:
32
+ case "EU_BACKPACK":
33
+ return ExplorerUi.EU_BACKPACK;
34
+ case 3:
35
+ case "EU_CAMERA_REEL":
36
+ return ExplorerUi.EU_CAMERA_REEL;
37
+ case 4:
38
+ case "EU_COMMUNITIES":
39
+ return ExplorerUi.EU_COMMUNITIES;
40
+ case 5:
41
+ case "EU_PLACES":
42
+ return ExplorerUi.EU_PLACES;
43
+ case 6:
44
+ case "EU_EVENTS":
45
+ return ExplorerUi.EU_EVENTS;
46
+ case -1:
47
+ case "UNRECOGNIZED":
48
+ default:
49
+ return ExplorerUi.UNRECOGNIZED;
50
+ }
51
+ }
52
+
53
+ export function explorerUiToJSON(object: ExplorerUi): string {
54
+ switch (object) {
55
+ case ExplorerUi.EU_SETTINGS:
56
+ return "EU_SETTINGS";
57
+ case ExplorerUi.EU_MAP:
58
+ return "EU_MAP";
59
+ case ExplorerUi.EU_BACKPACK:
60
+ return "EU_BACKPACK";
61
+ case ExplorerUi.EU_CAMERA_REEL:
62
+ return "EU_CAMERA_REEL";
63
+ case ExplorerUi.EU_COMMUNITIES:
64
+ return "EU_COMMUNITIES";
65
+ case ExplorerUi.EU_PLACES:
66
+ return "EU_PLACES";
67
+ case ExplorerUi.EU_EVENTS:
68
+ return "EU_EVENTS";
69
+ case ExplorerUi.UNRECOGNIZED:
70
+ default:
71
+ return "UNRECOGNIZED";
72
+ }
73
+ }
74
+
75
+ /** Verdict of an OpenExplorerUi request (enum rather than a bool so new outcomes stay expressible). */
76
+ export enum OpenExplorerUiResult {
77
+ UNSPECIFIED = 0,
78
+ OPENED = 1,
79
+ /** WAS_ALREADY_OPEN - a fullscreen panel is already open */
80
+ WAS_ALREADY_OPEN = 2,
81
+ /** REJECTED_NOT_CURRENT_SCENE - the standard restricted-actions current-scene gate rejected the call */
82
+ REJECTED_NOT_CURRENT_SCENE = 3,
83
+ /** REJECTED_FEATURE_DISABLED - the requested section is hidden by feature flags or client doesn't have that feature */
84
+ REJECTED_FEATURE_DISABLED = 4,
85
+ /** REJECTED_NO_USER_GESTURE - rejected: the call did not originate from a user gesture */
86
+ REJECTED_NO_USER_GESTURE = 5,
87
+ UNRECOGNIZED = -1,
88
+ }
89
+
90
+ export function openExplorerUiResultFromJSON(object: any): OpenExplorerUiResult {
91
+ switch (object) {
92
+ case 0:
93
+ case "UNSPECIFIED":
94
+ return OpenExplorerUiResult.UNSPECIFIED;
95
+ case 1:
96
+ case "OPENED":
97
+ return OpenExplorerUiResult.OPENED;
98
+ case 2:
99
+ case "WAS_ALREADY_OPEN":
100
+ return OpenExplorerUiResult.WAS_ALREADY_OPEN;
101
+ case 3:
102
+ case "REJECTED_NOT_CURRENT_SCENE":
103
+ return OpenExplorerUiResult.REJECTED_NOT_CURRENT_SCENE;
104
+ case 4:
105
+ case "REJECTED_FEATURE_DISABLED":
106
+ return OpenExplorerUiResult.REJECTED_FEATURE_DISABLED;
107
+ case 5:
108
+ case "REJECTED_NO_USER_GESTURE":
109
+ return OpenExplorerUiResult.REJECTED_NO_USER_GESTURE;
110
+ case -1:
111
+ case "UNRECOGNIZED":
112
+ default:
113
+ return OpenExplorerUiResult.UNRECOGNIZED;
114
+ }
115
+ }
116
+
117
+ export function openExplorerUiResultToJSON(object: OpenExplorerUiResult): string {
118
+ switch (object) {
119
+ case OpenExplorerUiResult.UNSPECIFIED:
120
+ return "UNSPECIFIED";
121
+ case OpenExplorerUiResult.OPENED:
122
+ return "OPENED";
123
+ case OpenExplorerUiResult.WAS_ALREADY_OPEN:
124
+ return "WAS_ALREADY_OPEN";
125
+ case OpenExplorerUiResult.REJECTED_NOT_CURRENT_SCENE:
126
+ return "REJECTED_NOT_CURRENT_SCENE";
127
+ case OpenExplorerUiResult.REJECTED_FEATURE_DISABLED:
128
+ return "REJECTED_FEATURE_DISABLED";
129
+ case OpenExplorerUiResult.REJECTED_NO_USER_GESTURE:
130
+ return "REJECTED_NO_USER_GESTURE";
131
+ case OpenExplorerUiResult.UNRECOGNIZED:
132
+ default:
133
+ return "UNRECOGNIZED";
134
+ }
135
+ }
136
+
8
137
  export interface MovePlayerToRequest {
9
138
  newRelativePosition: Vector3 | undefined;
10
139
  cameraTarget?: Vector3 | undefined;
@@ -74,6 +203,15 @@ export interface EmptyResponse {
74
203
  export interface StopEmoteRequest {
75
204
  }
76
205
 
206
+ export interface OpenExplorerUiRequest {
207
+ ui: ExplorerUi;
208
+ }
209
+
210
+ export interface OpenExplorerUiResponse {
211
+ /** Carries only the verdict of the open action. */
212
+ openResult: OpenExplorerUiResult;
213
+ }
214
+
77
215
  function createBaseMovePlayerToRequest(): MovePlayerToRequest {
78
216
  return { newRelativePosition: undefined, cameraTarget: undefined, avatarTarget: undefined, duration: undefined };
79
217
  }
@@ -1029,6 +1167,122 @@ export namespace StopEmoteRequest {
1029
1167
  }
1030
1168
  }
1031
1169
 
1170
+ function createBaseOpenExplorerUiRequest(): OpenExplorerUiRequest {
1171
+ return { ui: 0 };
1172
+ }
1173
+
1174
+ export namespace OpenExplorerUiRequest {
1175
+ export function encode(message: OpenExplorerUiRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1176
+ if (message.ui !== 0) {
1177
+ writer.uint32(8).int32(message.ui);
1178
+ }
1179
+ return writer;
1180
+ }
1181
+
1182
+ export function decode(input: _m0.Reader | Uint8Array, length?: number): OpenExplorerUiRequest {
1183
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
1184
+ let end = length === undefined ? reader.len : reader.pos + length;
1185
+ const message = createBaseOpenExplorerUiRequest();
1186
+ while (reader.pos < end) {
1187
+ const tag = reader.uint32();
1188
+ switch (tag >>> 3) {
1189
+ case 1:
1190
+ if (tag !== 8) {
1191
+ break;
1192
+ }
1193
+
1194
+ message.ui = reader.int32() as any;
1195
+ continue;
1196
+ }
1197
+ if ((tag & 7) === 4 || tag === 0) {
1198
+ break;
1199
+ }
1200
+ reader.skipType(tag & 7);
1201
+ }
1202
+ return message;
1203
+ }
1204
+
1205
+ export function fromJSON(object: any): OpenExplorerUiRequest {
1206
+ return { ui: isSet(object.ui) ? explorerUiFromJSON(object.ui) : 0 };
1207
+ }
1208
+
1209
+ export function toJSON(message: OpenExplorerUiRequest): unknown {
1210
+ const obj: any = {};
1211
+ message.ui !== undefined && (obj.ui = explorerUiToJSON(message.ui));
1212
+ return obj;
1213
+ }
1214
+
1215
+ export function create<I extends Exact<DeepPartial<OpenExplorerUiRequest>, I>>(base?: I): OpenExplorerUiRequest {
1216
+ return OpenExplorerUiRequest.fromPartial(base ?? {});
1217
+ }
1218
+
1219
+ export function fromPartial<I extends Exact<DeepPartial<OpenExplorerUiRequest>, I>>(
1220
+ object: I,
1221
+ ): OpenExplorerUiRequest {
1222
+ const message = createBaseOpenExplorerUiRequest();
1223
+ message.ui = object.ui ?? 0;
1224
+ return message;
1225
+ }
1226
+ }
1227
+
1228
+ function createBaseOpenExplorerUiResponse(): OpenExplorerUiResponse {
1229
+ return { openResult: 0 };
1230
+ }
1231
+
1232
+ export namespace OpenExplorerUiResponse {
1233
+ export function encode(message: OpenExplorerUiResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1234
+ if (message.openResult !== 0) {
1235
+ writer.uint32(8).int32(message.openResult);
1236
+ }
1237
+ return writer;
1238
+ }
1239
+
1240
+ export function decode(input: _m0.Reader | Uint8Array, length?: number): OpenExplorerUiResponse {
1241
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
1242
+ let end = length === undefined ? reader.len : reader.pos + length;
1243
+ const message = createBaseOpenExplorerUiResponse();
1244
+ while (reader.pos < end) {
1245
+ const tag = reader.uint32();
1246
+ switch (tag >>> 3) {
1247
+ case 1:
1248
+ if (tag !== 8) {
1249
+ break;
1250
+ }
1251
+
1252
+ message.openResult = reader.int32() as any;
1253
+ continue;
1254
+ }
1255
+ if ((tag & 7) === 4 || tag === 0) {
1256
+ break;
1257
+ }
1258
+ reader.skipType(tag & 7);
1259
+ }
1260
+ return message;
1261
+ }
1262
+
1263
+ export function fromJSON(object: any): OpenExplorerUiResponse {
1264
+ return { openResult: isSet(object.openResult) ? openExplorerUiResultFromJSON(object.openResult) : 0 };
1265
+ }
1266
+
1267
+ export function toJSON(message: OpenExplorerUiResponse): unknown {
1268
+ const obj: any = {};
1269
+ message.openResult !== undefined && (obj.openResult = openExplorerUiResultToJSON(message.openResult));
1270
+ return obj;
1271
+ }
1272
+
1273
+ export function create<I extends Exact<DeepPartial<OpenExplorerUiResponse>, I>>(base?: I): OpenExplorerUiResponse {
1274
+ return OpenExplorerUiResponse.fromPartial(base ?? {});
1275
+ }
1276
+
1277
+ export function fromPartial<I extends Exact<DeepPartial<OpenExplorerUiResponse>, I>>(
1278
+ object: I,
1279
+ ): OpenExplorerUiResponse {
1280
+ const message = createBaseOpenExplorerUiResponse();
1281
+ message.openResult = object.openResult ?? 0;
1282
+ return message;
1283
+ }
1284
+ }
1285
+
1032
1286
  export type RestrictedActionsServiceDefinition = typeof RestrictedActionsServiceDefinition;
1033
1287
  export const RestrictedActionsServiceDefinition = {
1034
1288
  name: "RestrictedActionsService",
@@ -1131,6 +1385,15 @@ export const RestrictedActionsServiceDefinition = {
1131
1385
  responseStream: false,
1132
1386
  options: {},
1133
1387
  },
1388
+ /** OpenExplorerUi opens a specific fullscreen explorer panel and returns the open verdict. */
1389
+ openExplorerUi: {
1390
+ name: "OpenExplorerUi",
1391
+ requestType: OpenExplorerUiRequest,
1392
+ requestStream: false,
1393
+ responseType: OpenExplorerUiResponse,
1394
+ responseStream: false,
1395
+ options: {},
1396
+ },
1134
1397
  },
1135
1398
  } as const;
1136
1399
 
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable */
2
+ import Long from "long";
2
3
  import _m0 from "protobufjs/minimal";
3
4
  import { Position } from "../../../common/vectors.gen";
4
5
 
@@ -113,6 +114,17 @@ export interface IslandStatusMessage {
113
114
  data: IslandData[];
114
115
  }
115
116
 
117
+ export interface ServiceStatus {
118
+ currentTime: number;
119
+ commitHash?: string | undefined;
120
+ userCount: number;
121
+ }
122
+
123
+ export interface ServiceDiscoveryMessage {
124
+ serverName: string;
125
+ status: ServiceStatus | undefined;
126
+ }
127
+
116
128
  function createBaseChallengeResponseMessage(): ChallengeResponseMessage {
117
129
  return { challengeToSign: "", alreadyConnected: false };
118
130
  }
@@ -1317,6 +1329,184 @@ export namespace IslandStatusMessage {
1317
1329
  }
1318
1330
  }
1319
1331
 
1332
+ function createBaseServiceStatus(): ServiceStatus {
1333
+ return { currentTime: 0, commitHash: undefined, userCount: 0 };
1334
+ }
1335
+
1336
+ export namespace ServiceStatus {
1337
+ export function encode(message: ServiceStatus, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1338
+ if (message.currentTime !== 0) {
1339
+ writer.uint32(8).uint64(message.currentTime);
1340
+ }
1341
+ if (message.commitHash !== undefined) {
1342
+ writer.uint32(18).string(message.commitHash);
1343
+ }
1344
+ if (message.userCount !== 0) {
1345
+ writer.uint32(24).uint32(message.userCount);
1346
+ }
1347
+ return writer;
1348
+ }
1349
+
1350
+ export function decode(input: _m0.Reader | Uint8Array, length?: number): ServiceStatus {
1351
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
1352
+ let end = length === undefined ? reader.len : reader.pos + length;
1353
+ const message = createBaseServiceStatus();
1354
+ while (reader.pos < end) {
1355
+ const tag = reader.uint32();
1356
+ switch (tag >>> 3) {
1357
+ case 1:
1358
+ if (tag !== 8) {
1359
+ break;
1360
+ }
1361
+
1362
+ message.currentTime = longToNumber(reader.uint64() as Long);
1363
+ continue;
1364
+ case 2:
1365
+ if (tag !== 18) {
1366
+ break;
1367
+ }
1368
+
1369
+ message.commitHash = reader.string();
1370
+ continue;
1371
+ case 3:
1372
+ if (tag !== 24) {
1373
+ break;
1374
+ }
1375
+
1376
+ message.userCount = reader.uint32();
1377
+ continue;
1378
+ }
1379
+ if ((tag & 7) === 4 || tag === 0) {
1380
+ break;
1381
+ }
1382
+ reader.skipType(tag & 7);
1383
+ }
1384
+ return message;
1385
+ }
1386
+
1387
+ export function fromJSON(object: any): ServiceStatus {
1388
+ return {
1389
+ currentTime: isSet(object.currentTime) ? Number(object.currentTime) : 0,
1390
+ commitHash: isSet(object.commitHash) ? String(object.commitHash) : undefined,
1391
+ userCount: isSet(object.userCount) ? Number(object.userCount) : 0,
1392
+ };
1393
+ }
1394
+
1395
+ export function toJSON(message: ServiceStatus): unknown {
1396
+ const obj: any = {};
1397
+ message.currentTime !== undefined && (obj.currentTime = Math.round(message.currentTime));
1398
+ message.commitHash !== undefined && (obj.commitHash = message.commitHash);
1399
+ message.userCount !== undefined && (obj.userCount = Math.round(message.userCount));
1400
+ return obj;
1401
+ }
1402
+
1403
+ export function create<I extends Exact<DeepPartial<ServiceStatus>, I>>(base?: I): ServiceStatus {
1404
+ return ServiceStatus.fromPartial(base ?? {});
1405
+ }
1406
+
1407
+ export function fromPartial<I extends Exact<DeepPartial<ServiceStatus>, I>>(object: I): ServiceStatus {
1408
+ const message = createBaseServiceStatus();
1409
+ message.currentTime = object.currentTime ?? 0;
1410
+ message.commitHash = object.commitHash ?? undefined;
1411
+ message.userCount = object.userCount ?? 0;
1412
+ return message;
1413
+ }
1414
+ }
1415
+
1416
+ function createBaseServiceDiscoveryMessage(): ServiceDiscoveryMessage {
1417
+ return { serverName: "", status: undefined };
1418
+ }
1419
+
1420
+ export namespace ServiceDiscoveryMessage {
1421
+ export function encode(message: ServiceDiscoveryMessage, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1422
+ if (message.serverName !== "") {
1423
+ writer.uint32(10).string(message.serverName);
1424
+ }
1425
+ if (message.status !== undefined) {
1426
+ ServiceStatus.encode(message.status, writer.uint32(18).fork()).ldelim();
1427
+ }
1428
+ return writer;
1429
+ }
1430
+
1431
+ export function decode(input: _m0.Reader | Uint8Array, length?: number): ServiceDiscoveryMessage {
1432
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
1433
+ let end = length === undefined ? reader.len : reader.pos + length;
1434
+ const message = createBaseServiceDiscoveryMessage();
1435
+ while (reader.pos < end) {
1436
+ const tag = reader.uint32();
1437
+ switch (tag >>> 3) {
1438
+ case 1:
1439
+ if (tag !== 10) {
1440
+ break;
1441
+ }
1442
+
1443
+ message.serverName = reader.string();
1444
+ continue;
1445
+ case 2:
1446
+ if (tag !== 18) {
1447
+ break;
1448
+ }
1449
+
1450
+ message.status = ServiceStatus.decode(reader, reader.uint32());
1451
+ continue;
1452
+ }
1453
+ if ((tag & 7) === 4 || tag === 0) {
1454
+ break;
1455
+ }
1456
+ reader.skipType(tag & 7);
1457
+ }
1458
+ return message;
1459
+ }
1460
+
1461
+ export function fromJSON(object: any): ServiceDiscoveryMessage {
1462
+ return {
1463
+ serverName: isSet(object.serverName) ? String(object.serverName) : "",
1464
+ status: isSet(object.status) ? ServiceStatus.fromJSON(object.status) : undefined,
1465
+ };
1466
+ }
1467
+
1468
+ export function toJSON(message: ServiceDiscoveryMessage): unknown {
1469
+ const obj: any = {};
1470
+ message.serverName !== undefined && (obj.serverName = message.serverName);
1471
+ message.status !== undefined && (obj.status = message.status ? ServiceStatus.toJSON(message.status) : undefined);
1472
+ return obj;
1473
+ }
1474
+
1475
+ export function create<I extends Exact<DeepPartial<ServiceDiscoveryMessage>, I>>(base?: I): ServiceDiscoveryMessage {
1476
+ return ServiceDiscoveryMessage.fromPartial(base ?? {});
1477
+ }
1478
+
1479
+ export function fromPartial<I extends Exact<DeepPartial<ServiceDiscoveryMessage>, I>>(
1480
+ object: I,
1481
+ ): ServiceDiscoveryMessage {
1482
+ const message = createBaseServiceDiscoveryMessage();
1483
+ message.serverName = object.serverName ?? "";
1484
+ message.status = (object.status !== undefined && object.status !== null)
1485
+ ? ServiceStatus.fromPartial(object.status)
1486
+ : undefined;
1487
+ return message;
1488
+ }
1489
+ }
1490
+
1491
+ declare const self: any | undefined;
1492
+ declare const window: any | undefined;
1493
+ declare const global: any | undefined;
1494
+ const tsProtoGlobalThis: any = (() => {
1495
+ if (typeof globalThis !== "undefined") {
1496
+ return globalThis;
1497
+ }
1498
+ if (typeof self !== "undefined") {
1499
+ return self;
1500
+ }
1501
+ if (typeof window !== "undefined") {
1502
+ return window;
1503
+ }
1504
+ if (typeof global !== "undefined") {
1505
+ return global;
1506
+ }
1507
+ throw "Unable to locate global object";
1508
+ })();
1509
+
1320
1510
  type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
1321
1511
 
1322
1512
  export type DeepPartial<T> = T extends Builtin ? T
@@ -1329,6 +1519,18 @@ type KeysOfUnion<T> = T extends T ? keyof T : never;
1329
1519
  export type Exact<P, I extends P> = P extends Builtin ? P
1330
1520
  : P & { [K in keyof P]: Exact<P[K], I[K]> } & { [K in Exclude<keyof I, KeysOfUnion<P>>]: never };
1331
1521
 
1522
+ function longToNumber(long: Long): number {
1523
+ if (long.gt(Number.MAX_SAFE_INTEGER)) {
1524
+ throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
1525
+ }
1526
+ return long.toNumber();
1527
+ }
1528
+
1529
+ if (_m0.util.Long !== Long) {
1530
+ _m0.util.Long = Long as any;
1531
+ _m0.configure();
1532
+ }
1533
+
1332
1534
  function isObject(value: any): boolean {
1333
1535
  return typeof value === "object" && value !== null;
1334
1536
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/protocol",
3
- "version": "1.0.0-30343893778.commit-acf163a",
3
+ "version": "1.0.0-30373157983.commit-2c475cb",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,5 +33,5 @@
33
33
  "out-js",
34
34
  "public"
35
35
  ],
36
- "commit": "acf163afd13a51b265893da6c7dd2c139be2bc4f"
36
+ "commit": "2c475cb104fa84496a1a0b388f9fcbd0a0657d08"
37
37
  }
@@ -65,6 +65,42 @@ message EmptyResponse { }
65
65
 
66
66
  message StopEmoteRequest { }
67
67
 
68
+ // Identifies which fullscreen explorer panel OpenExplorerUi targets.
69
+ // EU_SETTINGS holds 0 so an unset `ui` field defaults to the least-intrusive panel.
70
+ enum ExplorerUi {
71
+ EU_SETTINGS = 0;
72
+ EU_MAP = 1;
73
+ EU_BACKPACK = 2;
74
+ EU_CAMERA_REEL = 3;
75
+ EU_COMMUNITIES = 4;
76
+ EU_PLACES = 5;
77
+ EU_EVENTS = 6;
78
+ }
79
+
80
+ // Verdict of an OpenExplorerUi request (enum rather than a bool so new outcomes stay expressible).
81
+ enum OpenExplorerUiResult {
82
+ UNSPECIFIED = 0;
83
+ OPENED = 1;
84
+ WAS_ALREADY_OPEN = 2; // a fullscreen panel is already open
85
+ REJECTED_NOT_CURRENT_SCENE = 3; // the standard restricted-actions current-scene gate rejected the call
86
+ REJECTED_FEATURE_DISABLED = 4; // the requested section is hidden by feature flags or client doesn't have that feature
87
+ REJECTED_NO_USER_GESTURE = 5; // rejected: the call did not originate from a user gesture
88
+ }
89
+
90
+ message OpenExplorerUiRequest {
91
+ ExplorerUi ui = 1;
92
+
93
+ // Extension point for future per-panel parameters, as a oneof so each panel gets its
94
+ // own optional param message without touching existing fields.
95
+ // message MapParams { int32 focus_x = 1; int32 focus_y = 2; }
96
+ // oneof params { MapParams map = 10; }
97
+ }
98
+
99
+ message OpenExplorerUiResponse {
100
+ // Carries only the verdict of the open action.
101
+ OpenExplorerUiResult open_result = 1;
102
+ }
103
+
68
104
  service RestrictedActionsService {
69
105
  // MovePlayerTo will move the player to a position relative to the current scene.
70
106
  // If 'duration' field is used in the request, the success response depends on the
@@ -98,4 +134,7 @@ service RestrictedActionsService {
98
134
 
99
135
  // StopEmote will stop the current emote
100
136
  rpc StopEmote(StopEmoteRequest) returns (SuccessResponse) {}
137
+
138
+ // OpenExplorerUi opens a specific fullscreen explorer panel and returns the open verdict.
139
+ rpc OpenExplorerUi(OpenExplorerUiRequest) returns (OpenExplorerUiResponse) {}
101
140
  }
@@ -84,3 +84,14 @@ message IslandData {
84
84
  message IslandStatusMessage {
85
85
  repeated IslandData data = 1;
86
86
  }
87
+
88
+ message ServiceStatus {
89
+ uint64 current_time = 1;
90
+ optional string commit_hash = 2;
91
+ uint32 user_count = 3;
92
+ }
93
+
94
+ message ServiceDiscoveryMessage {
95
+ string server_name = 1;
96
+ ServiceStatus status = 2;
97
+ }