@dxos/protocols 0.6.12-staging.e11e696 → 0.6.13-main.548ca8d

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 (93) hide show
  1. package/dist/cjs/src/automerge.d.ts +111 -0
  2. package/dist/cjs/src/automerge.d.ts.map +1 -0
  3. package/dist/cjs/src/{collection-sync.js → automerge.js} +1 -1
  4. package/dist/cjs/src/automerge.js.map +1 -0
  5. package/dist/cjs/src/buf/proto/gen/dxos/client/invitation_pb.d.ts +6 -0
  6. package/dist/cjs/src/buf/proto/gen/dxos/client/invitation_pb.d.ts.map +1 -1
  7. package/dist/cjs/src/buf/proto/gen/dxos/client/invitation_pb.js +1 -1
  8. package/dist/cjs/src/buf/proto/gen/dxos/client/invitation_pb.js.map +1 -1
  9. package/dist/cjs/src/buf/proto/gen/dxos/client/services_pb.d.ts +9 -1
  10. package/dist/cjs/src/buf/proto/gen/dxos/client/services_pb.d.ts.map +1 -1
  11. package/dist/cjs/src/buf/proto/gen/dxos/client/services_pb.js +1 -1
  12. package/dist/cjs/src/buf/proto/gen/dxos/client/services_pb.js.map +1 -1
  13. package/dist/cjs/src/buf/proto/gen/dxos/echo/metadata_pb.d.ts +22 -1
  14. package/dist/cjs/src/buf/proto/gen/dxos/echo/metadata_pb.d.ts.map +1 -1
  15. package/dist/cjs/src/buf/proto/gen/dxos/echo/metadata_pb.js +20 -2
  16. package/dist/cjs/src/buf/proto/gen/dxos/echo/metadata_pb.js.map +1 -1
  17. package/dist/cjs/src/edge.d.ts +38 -7
  18. package/dist/cjs/src/edge.d.ts.map +1 -1
  19. package/dist/cjs/src/edge.js +51 -8
  20. package/dist/cjs/src/edge.js.map +1 -1
  21. package/dist/cjs/src/index.d.ts +1 -1
  22. package/dist/cjs/src/index.d.ts.map +1 -1
  23. package/dist/cjs/src/index.js +1 -1
  24. package/dist/cjs/src/index.js.map +1 -1
  25. package/dist/cjs/src/invitation.d.ts +2 -2
  26. package/dist/cjs/src/proto/gen/dxos/client/services.d.ts +17 -0
  27. package/dist/cjs/src/proto/gen/dxos/client/services.d.ts.map +1 -1
  28. package/dist/cjs/src/proto/gen/dxos/client/services.js.map +1 -1
  29. package/dist/cjs/src/proto/gen/dxos/echo/metadata.d.ts +13 -0
  30. package/dist/cjs/src/proto/gen/dxos/echo/metadata.d.ts.map +1 -1
  31. package/dist/cjs/src/proto/gen/dxos/echo/metadata.js +10 -0
  32. package/dist/cjs/src/proto/gen/dxos/echo/metadata.js.map +1 -1
  33. package/dist/cjs/src/proto/gen/index.d.ts +1 -0
  34. package/dist/cjs/src/proto/gen/index.d.ts.map +1 -1
  35. package/dist/cjs/src/proto/gen/index.js +1 -1
  36. package/dist/cjs/src/proto/gen/index.js.map +1 -1
  37. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  38. package/dist/esm/src/automerge.d.ts +111 -0
  39. package/dist/esm/src/automerge.d.ts.map +1 -0
  40. package/dist/esm/src/{collection-sync.js → automerge.js} +1 -1
  41. package/dist/esm/src/automerge.js.map +1 -0
  42. package/dist/esm/src/buf/proto/gen/dxos/client/invitation_pb.d.ts +6 -0
  43. package/dist/esm/src/buf/proto/gen/dxos/client/invitation_pb.d.ts.map +1 -1
  44. package/dist/esm/src/buf/proto/gen/dxos/client/invitation_pb.js +1 -1
  45. package/dist/esm/src/buf/proto/gen/dxos/client/invitation_pb.js.map +1 -1
  46. package/dist/esm/src/buf/proto/gen/dxos/client/services_pb.d.ts +9 -1
  47. package/dist/esm/src/buf/proto/gen/dxos/client/services_pb.d.ts.map +1 -1
  48. package/dist/esm/src/buf/proto/gen/dxos/client/services_pb.js +1 -1
  49. package/dist/esm/src/buf/proto/gen/dxos/client/services_pb.js.map +1 -1
  50. package/dist/esm/src/buf/proto/gen/dxos/echo/metadata_pb.d.ts +22 -1
  51. package/dist/esm/src/buf/proto/gen/dxos/echo/metadata_pb.d.ts.map +1 -1
  52. package/dist/esm/src/buf/proto/gen/dxos/echo/metadata_pb.js +20 -2
  53. package/dist/esm/src/buf/proto/gen/dxos/echo/metadata_pb.js.map +1 -1
  54. package/dist/esm/src/edge.d.ts +38 -7
  55. package/dist/esm/src/edge.d.ts.map +1 -1
  56. package/dist/esm/src/edge.js +53 -9
  57. package/dist/esm/src/edge.js.map +1 -1
  58. package/dist/esm/src/index.d.ts +1 -1
  59. package/dist/esm/src/index.d.ts.map +1 -1
  60. package/dist/esm/src/index.js +1 -1
  61. package/dist/esm/src/index.js.map +1 -1
  62. package/dist/esm/src/invitation.d.ts +2 -2
  63. package/dist/esm/src/proto/gen/dxos/client/services.d.ts +17 -0
  64. package/dist/esm/src/proto/gen/dxos/client/services.d.ts.map +1 -1
  65. package/dist/esm/src/proto/gen/dxos/client/services.js.map +1 -1
  66. package/dist/esm/src/proto/gen/dxos/echo/metadata.d.ts +13 -0
  67. package/dist/esm/src/proto/gen/dxos/echo/metadata.d.ts.map +1 -1
  68. package/dist/esm/src/proto/gen/dxos/echo/metadata.js +9 -1
  69. package/dist/esm/src/proto/gen/dxos/echo/metadata.js.map +1 -1
  70. package/dist/esm/src/proto/gen/index.d.ts +1 -0
  71. package/dist/esm/src/proto/gen/index.d.ts.map +1 -1
  72. package/dist/esm/src/proto/gen/index.js +1 -1
  73. package/dist/esm/src/proto/gen/index.js.map +1 -1
  74. package/package.json +7 -7
  75. package/src/automerge.ts +138 -0
  76. package/src/buf/proto/gen/dxos/client/invitation_pb.ts +8 -1
  77. package/src/buf/proto/gen/dxos/client/services_pb.ts +12 -2
  78. package/src/buf/proto/gen/dxos/echo/metadata_pb.ts +29 -3
  79. package/src/edge.ts +84 -7
  80. package/src/index.ts +1 -1
  81. package/src/proto/dxos/client/invitation.proto +3 -0
  82. package/src/proto/dxos/client/services.proto +4 -0
  83. package/src/proto/dxos/echo/metadata.proto +7 -0
  84. package/src/proto/gen/dxos/client/services.ts +17 -0
  85. package/src/proto/gen/dxos/echo/metadata.ts +13 -0
  86. package/src/proto/gen/index.ts +2 -1
  87. package/dist/cjs/src/collection-sync.d.ts +0 -31
  88. package/dist/cjs/src/collection-sync.d.ts.map +0 -1
  89. package/dist/cjs/src/collection-sync.js.map +0 -1
  90. package/dist/esm/src/collection-sync.d.ts +0 -31
  91. package/dist/esm/src/collection-sync.d.ts.map +0 -1
  92. package/dist/esm/src/collection-sync.js.map +0 -1
  93. package/src/collection-sync.ts +0 -39
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/proto/gen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAiEhE,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAokBhD,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,shjHAAshjH,CAAC,CAAC,CAAC;AAC/kjH,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAkB,UAAU,EAAE,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/proto/gen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAiEhE,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAqkBhD,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,26jHAA26jH,CAAC,CAAC,CAAC;AACp+jH,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAkB,UAAU,EAAE,aAAa,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/protocols",
3
- "version": "0.6.12-staging.e11e696",
3
+ "version": "0.6.13-main.548ca8d",
4
4
  "description": "Protobuf definitions for DXOS protocols.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -71,12 +71,12 @@
71
71
  ],
72
72
  "dependencies": {
73
73
  "@bufbuild/protobuf": "^2.1.0",
74
- "@dxos/codec-protobuf": "0.6.12-staging.e11e696",
75
- "@dxos/invariant": "0.6.12-staging.e11e696",
76
- "@dxos/effect": "0.6.12-staging.e11e696",
77
- "@dxos/timeframe": "0.6.12-staging.e11e696",
78
- "@dxos/keys": "0.6.12-staging.e11e696",
79
- "@dxos/util": "0.6.12-staging.e11e696"
74
+ "@dxos/codec-protobuf": "0.6.13-main.548ca8d",
75
+ "@dxos/invariant": "0.6.13-main.548ca8d",
76
+ "@dxos/keys": "0.6.13-main.548ca8d",
77
+ "@dxos/timeframe": "0.6.13-main.548ca8d",
78
+ "@dxos/util": "0.6.13-main.548ca8d",
79
+ "@dxos/effect": "0.6.13-main.548ca8d"
80
80
  },
81
81
  "devDependencies": {
82
82
  "@bufbuild/buf": "^1.43.0",
@@ -0,0 +1,138 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export type PeerId = string & { __peerId: true };
6
+
7
+ export type JoinProtocolMessage = {
8
+ type: 'join';
9
+ targetId?: PeerId;
10
+ senderId: PeerId;
11
+ supportedProtocolVersions: string;
12
+ metadata?: Record<string, unknown>;
13
+ };
14
+
15
+ export type LeaveProtocolMessage = {
16
+ type: 'leave';
17
+ targetId?: PeerId;
18
+ senderId: PeerId;
19
+ };
20
+
21
+ export type PeerProtocolMessage = {
22
+ type: 'peer';
23
+ senderId: PeerId;
24
+ targetId: PeerId;
25
+ selectedProtocolVersion: string;
26
+ metadata?: Record<string, unknown>;
27
+ };
28
+
29
+ /**
30
+ * Sent by a {@link Repo} to request a document from a peer.
31
+ *
32
+ * @remarks
33
+ * This is identical to a {@link SyncMessage} except that it is sent by a {@link Repo}
34
+ * as the initial sync message when asking the other peer if it has the document.
35
+ */
36
+ export type RequestProtocolMessage = {
37
+ type: 'request';
38
+ senderId: PeerId;
39
+ targetId: PeerId;
40
+ documentId: string;
41
+ data: Uint8Array;
42
+ };
43
+
44
+ /**
45
+ * A sync message for a particular document
46
+ */
47
+ export type SyncProtocolMessage = {
48
+ type: 'sync';
49
+ senderId: PeerId;
50
+ targetId: PeerId;
51
+ documentId: string;
52
+ data: Uint8Array;
53
+ };
54
+
55
+ /**
56
+ * Sent by a {@link Repo} to indicate that it does not have the document and none of its connected
57
+ * peers do either.
58
+ */
59
+ export type UnavailableProtocolMessage = {
60
+ type: 'doc-unavailable';
61
+ senderId: PeerId;
62
+ targetId: PeerId;
63
+ documentId: string;
64
+ };
65
+
66
+ /**
67
+ * An ephemeral message.
68
+ *
69
+ * @remarks
70
+ * Ephemeral messages are not persisted anywhere. The data property can be used by the application
71
+ * as needed. The repo gossips these around.
72
+ *
73
+ * In order to avoid infinite loops of ephemeral messages, every message has (a) a session ID, which
74
+ * is a random number generated by the sender at startup time; and (b) a sequence number. The
75
+ * combination of these two things allows us to discard messages we have already seen.
76
+ * */
77
+ export type EphemeralProtocolMessage = {
78
+ type: 'ephemeral';
79
+ senderId: PeerId;
80
+ targetId: PeerId;
81
+ count: number;
82
+ sessionId: string;
83
+ documentId: string;
84
+ data: Uint8Array;
85
+ };
86
+
87
+ export type ErrorProtocolMessage = {
88
+ type: 'error';
89
+ senderId?: PeerId;
90
+ targetId?: PeerId;
91
+ message: string;
92
+ };
93
+
94
+ export const MESSAGE_TYPE_COLLECTION_QUERY = 'collection-query';
95
+
96
+ export type CollectionQueryMessage = {
97
+ type: typeof MESSAGE_TYPE_COLLECTION_QUERY;
98
+ senderId: PeerId;
99
+ targetId: PeerId;
100
+ collectionId: string;
101
+
102
+ /**
103
+ * Identifier of the current state.
104
+ * Remote peer will skip sending the state if it has the same tag.
105
+ */
106
+ stateTag?: string;
107
+ };
108
+
109
+ export const MESSAGE_TYPE_COLLECTION_STATE = 'collection-state';
110
+
111
+ export type CollectionStateMessage = {
112
+ type: typeof MESSAGE_TYPE_COLLECTION_STATE;
113
+ senderId: PeerId;
114
+ targetId: PeerId;
115
+ collectionId: string;
116
+
117
+ /**
118
+ * State representation is implementation-defined.
119
+ */
120
+ state?: unknown;
121
+
122
+ /**
123
+ * Identifier of the current state.
124
+ */
125
+ stateTag?: string;
126
+ };
127
+
128
+ export type AutomergeProtocolMessage =
129
+ | JoinProtocolMessage
130
+ | PeerProtocolMessage
131
+ | LeaveProtocolMessage
132
+ | RequestProtocolMessage
133
+ | SyncProtocolMessage
134
+ | UnavailableProtocolMessage
135
+ | EphemeralProtocolMessage
136
+ | ErrorProtocolMessage
137
+ | CollectionQueryMessage
138
+ | CollectionStateMessage;
@@ -30,7 +30,7 @@ import type { Message } from "@bufbuild/protobuf";
30
30
  * Describes the file dxos/client/invitation.proto.
31
31
  */
32
32
  export const file_dxos_client_invitation: GenFile = /*@__PURE__*/
33
- fileDesc("ChxkeG9zL2NsaWVudC9pbnZpdGF0aW9uLnByb3RvEhRkeG9zLmNsaWVudC5zZXJ2aWNlcyJ9ChBBZG1pc3Npb25LZXlwYWlyEigKCnB1YmxpY19rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ei8KC3ByaXZhdGVfa2V5GAIgASgLMhUuZHhvcy5rZXlzLlByaXZhdGVLZXlIAIgBAUIOCgxfcHJpdmF0ZV9rZXki9gkKCkludml0YXRpb24SFQoNaW52aXRhdGlvbl9pZBgBIAEoCRIzCgR0eXBlGAIgASgOMiUuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbi5UeXBlEjMKBGtpbmQYAyABKA4yJS5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uLktpbmQSQAoLYXV0aF9tZXRob2QYBCABKA4yKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uLkF1dGhNZXRob2QSJwoJc3dhcm1fa2V5GAUgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRI1CgVzdGF0ZRgGIAEoDjImLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24uU3RhdGUSFAoHdGltZW91dBgHIAEoBUgAiAEBEi8KDGlkZW50aXR5X2tleRgIIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAYgBARIsCglzcGFjZV9rZXkYCSABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SAKIAQESFgoJYXV0aF9jb2RlGAogASgJSAOIAQESEwoGdGFyZ2V0GAsgASgJSASIAQESFwoKcGVyc2lzdGVudBgMIAEoCEgFiAEBEjAKB2NyZWF0ZWQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAaIAQESFQoIbGlmZXRpbWUYDiABKAVIB4gBARIWCgltdWx0aV91c2UYDyABKAhICIgBARJCCg1ndWVzdF9rZXlwYWlyGBAgASgLMiYuZHhvcy5jbGllbnQuc2VydmljZXMuQWRtaXNzaW9uS2V5cGFpckgJiAEBEjsKGGRlbGVnYXRpb25fY3JlZGVudGlhbF9pZBgRIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlICogBARI6CgRyb2xlGBIgASgOMicuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlNwYWNlTWVtYmVyLlJvbGVIC4gBASI0CgRUeXBlEg8KC0lOVEVSQUNUSVZFEAASDQoJREVMRUdBVEVEEAESDAoITVVMVElVU0UQAiIdCgRLaW5kEgoKBkRFVklDRRAAEgkKBVNQQUNFEAEiPwoKQXV0aE1ldGhvZBIICgROT05FEAASEQoNU0hBUkVEX1NFQ1JFVBABEhQKEEtOT1dOX1BVQkxJQ19LRVkQAiKjAQoFU3RhdGUSCAoESU5JVBAAEg4KCkNPTk5FQ1RJTkcQARINCglDT05ORUNURUQQAhIcChhSRUFEWV9GT1JfQVVUSEVOVElDQVRJT04QAxISCg5BVVRIRU5USUNBVElORxAEEgsKB1NVQ0NFU1MQBRINCglDQU5DRUxMRUQQBhILCgdUSU1FT1VUEAcSCQoFRVJST1IQCBILCgdFWFBJUkVEEAlCCgoIX3RpbWVvdXRCDwoNX2lkZW50aXR5X2tleUIMCgpfc3BhY2Vfa2V5QgwKCl9hdXRoX2NvZGVCCQoHX3RhcmdldEINCgtfcGVyc2lzdGVudEIKCghfY3JlYXRlZEILCglfbGlmZXRpbWVCDAoKX211bHRpX3VzZUIQCg5fZ3Vlc3Rfa2V5cGFpckIbChlfZGVsZWdhdGlvbl9jcmVkZW50aWFsX2lkQgcKBV9yb2xlKsEBCgpTcGFjZVN0YXRlEgsKB0lOVkFMSUQQABISCg5TUEFDRV9JTkFDVElWRRACEhAKDFNQQUNFX0FDVElWRRAGEhAKDFNQQUNFX0NMT1NFRBABEhYKElNQQUNFX0NPTlRST0xfT05MWRAHEhYKElNQQUNFX0lOSVRJQUxJWklORxAEEg8KC1NQQUNFX1JFQURZEAMSDwoLU1BBQ0VfRVJST1IQBRIcChhTUEFDRV9SRVFVSVJFU19NSUdSQVRJT04QCGIGcHJvdG8z", [file_google_protobuf_any, file_google_protobuf_empty, file_google_protobuf_struct, file_google_protobuf_timestamp, file_dxos_config, file_dxos_devtools_swarm, file_dxos_echo_timeframe, file_dxos_error, file_dxos_halo_credentials, file_dxos_keys, file_dxos_mesh_signal, file_dxos_mesh_presence, file_dxos_mesh_teleport_gossip, file_dxos_value]);
33
+ fileDesc("ChxkeG9zL2NsaWVudC9pbnZpdGF0aW9uLnByb3RvEhRkeG9zLmNsaWVudC5zZXJ2aWNlcyJ9ChBBZG1pc3Npb25LZXlwYWlyEigKCnB1YmxpY19rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ei8KC3ByaXZhdGVfa2V5GAIgASgLMhUuZHhvcy5rZXlzLlByaXZhdGVLZXlIAIgBAUIOCgxfcHJpdmF0ZV9rZXkimgoKCkludml0YXRpb24SFQoNaW52aXRhdGlvbl9pZBgBIAEoCRIzCgR0eXBlGAIgASgOMiUuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbi5UeXBlEjMKBGtpbmQYAyABKA4yJS5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uLktpbmQSQAoLYXV0aF9tZXRob2QYBCABKA4yKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uLkF1dGhNZXRob2QSJwoJc3dhcm1fa2V5GAUgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRI1CgVzdGF0ZRgGIAEoDjImLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24uU3RhdGUSFAoHdGltZW91dBgHIAEoBUgAiAEBEi8KDGlkZW50aXR5X2tleRgIIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAYgBARIsCglzcGFjZV9rZXkYCSABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SAKIAQESFgoJYXV0aF9jb2RlGAogASgJSAOIAQESEwoGdGFyZ2V0GAsgASgJSASIAQESFwoKcGVyc2lzdGVudBgMIAEoCEgFiAEBEjAKB2NyZWF0ZWQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAaIAQESFQoIbGlmZXRpbWUYDiABKAVIB4gBARIWCgltdWx0aV91c2UYDyABKAhICIgBARJCCg1ndWVzdF9rZXlwYWlyGBAgASgLMiYuZHhvcy5jbGllbnQuc2VydmljZXMuQWRtaXNzaW9uS2V5cGFpckgJiAEBEjsKGGRlbGVnYXRpb25fY3JlZGVudGlhbF9pZBgRIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlICogBARI6CgRyb2xlGBIgASgOMicuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlNwYWNlTWVtYmVyLlJvbGVIC4gBARIVCghzcGFjZV9pZBgTIAEoCUgMiAEBIjQKBFR5cGUSDwoLSU5URVJBQ1RJVkUQABINCglERUxFR0FURUQQARIMCghNVUxUSVVTRRACIh0KBEtpbmQSCgoGREVWSUNFEAASCQoFU1BBQ0UQASI/CgpBdXRoTWV0aG9kEggKBE5PTkUQABIRCg1TSEFSRURfU0VDUkVUEAESFAoQS05PV05fUFVCTElDX0tFWRACIqMBCgVTdGF0ZRIICgRJTklUEAASDgoKQ09OTkVDVElORxABEg0KCUNPTk5FQ1RFRBACEhwKGFJFQURZX0ZPUl9BVVRIRU5USUNBVElPThADEhIKDkFVVEhFTlRJQ0FUSU5HEAQSCwoHU1VDQ0VTUxAFEg0KCUNBTkNFTExFRBAGEgsKB1RJTUVPVVQQBxIJCgVFUlJPUhAIEgsKB0VYUElSRUQQCUIKCghfdGltZW91dEIPCg1faWRlbnRpdHlfa2V5QgwKCl9zcGFjZV9rZXlCDAoKX2F1dGhfY29kZUIJCgdfdGFyZ2V0Qg0KC19wZXJzaXN0ZW50QgoKCF9jcmVhdGVkQgsKCV9saWZldGltZUIMCgpfbXVsdGlfdXNlQhAKDl9ndWVzdF9rZXlwYWlyQhsKGV9kZWxlZ2F0aW9uX2NyZWRlbnRpYWxfaWRCBwoFX3JvbGVCCwoJX3NwYWNlX2lkKsEBCgpTcGFjZVN0YXRlEgsKB0lOVkFMSUQQABISCg5TUEFDRV9JTkFDVElWRRACEhAKDFNQQUNFX0FDVElWRRAGEhAKDFNQQUNFX0NMT1NFRBABEhYKElNQQUNFX0NPTlRST0xfT05MWRAHEhYKElNQQUNFX0lOSVRJQUxJWklORxAEEg8KC1NQQUNFX1JFQURZEAMSDwoLU1BBQ0VfRVJST1IQBRIcChhTUEFDRV9SRVFVSVJFU19NSUdSQVRJT04QCGIGcHJvdG8z", [file_google_protobuf_any, file_google_protobuf_empty, file_google_protobuf_struct, file_google_protobuf_timestamp, file_dxos_config, file_dxos_devtools_swarm, file_dxos_echo_timeframe, file_dxos_error, file_dxos_halo_credentials, file_dxos_keys, file_dxos_mesh_signal, file_dxos_mesh_presence, file_dxos_mesh_teleport_gossip, file_dxos_value]);
34
34
 
35
35
  /**
36
36
  * @generated from message dxos.client.services.AdmissionKeypair
@@ -187,6 +187,13 @@ export type Invitation = Message<"dxos.client.services.Invitation"> & {
187
187
  * @generated from field: optional dxos.halo.credentials.SpaceMember.Role role = 18;
188
188
  */
189
189
  role?: SpaceMember_Role;
190
+
191
+ /**
192
+ * / Id of a the space to join (only present if kind is SPACE).
193
+ *
194
+ * @generated from field: optional string space_id = 19;
195
+ */
196
+ spaceId?: string;
190
197
  };
191
198
 
192
199
  /**
@@ -18,7 +18,7 @@ import type { ConfigSchema } from "../config_pb.js";
18
18
  import { file_dxos_config } from "../config_pb.js";
19
19
  import type { SwarmInfo } from "../devtools/swarm_pb.js";
20
20
  import { file_dxos_devtools_swarm } from "../devtools/swarm_pb.js";
21
- import type { SpaceCache } from "../echo/metadata_pb.js";
21
+ import type { EdgeReplicationSetting, SpaceCache } from "../echo/metadata_pb.js";
22
22
  import { file_dxos_echo_metadata } from "../echo/metadata_pb.js";
23
23
  import type { TimeframeVector } from "../echo/timeframe_pb.js";
24
24
  import { file_dxos_echo_timeframe } from "../echo/timeframe_pb.js";
@@ -41,7 +41,7 @@ import type { JsonObject, Message } from "@bufbuild/protobuf";
41
41
  * Describes the file dxos/client/services.proto.
42
42
  */
43
43
  export const file_dxos_client_services: GenFile = /*@__PURE__*/
44
- fileDesc("ChpkeG9zL2NsaWVudC9zZXJ2aWNlcy5wcm90bxIUZHhvcy5jbGllbnQuc2VydmljZXMiSQoTVXBkYXRlU3RhdHVzUmVxdWVzdBIyCgZzdGF0dXMYASABKA4yIi5keG9zLmNsaWVudC5zZXJ2aWNlcy5TeXN0ZW1TdGF0dXMiOAoSUXVlcnlTdGF0dXNSZXF1ZXN0EhUKCGludGVydmFsGAEgASgFSACIAQFCCwoJX2ludGVydmFsIkkKE1F1ZXJ5U3RhdHVzUmVzcG9uc2USMgoGc3RhdHVzGAEgASgOMiIuZHhvcy5jbGllbnQuc2VydmljZXMuU3lzdGVtU3RhdHVzIp8BChVHZXREaWFnbm9zdGljc1JlcXVlc3QSSQoEa2V5cxgBIAEoDjI2LmR4b3MuY2xpZW50LnNlcnZpY2VzLkdldERpYWdub3N0aWNzUmVxdWVzdC5LRVlfT1BUSU9OSACIAQEiMgoKS0VZX09QVElPThIICgROT05FEAASDAoIVFJVTkNBVEUQARIMCghIVU1BTklaRRACQgcKBV9rZXlzInUKFkdldERpYWdub3N0aWNzUmVzcG9uc2USLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCgtkaWFnbm9zdGljcxgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qi5AIKCFBsYXRmb3JtEjoKBHR5cGUYASABKA4yLC5keG9zLmNsaWVudC5zZXJ2aWNlcy5QbGF0Zm9ybS5QTEFURk9STV9UWVBFEhcKCnVzZXJfYWdlbnQYAiABKAlIAIgBARIVCghwbGF0Zm9ybRgDIAEoCUgBiAEBEhEKBGFyY2gYBCABKAlIAogBARIUCgdydW50aW1lGAUgASgJSAOIAQESEwoGdXB0aW1lGAYgASgNSASIAQESLAoGbWVtb3J5GAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgFiAEBIjkKDVBMQVRGT1JNX1RZUEUSCwoHQlJPV1NFUhAAEhEKDVNIQVJFRF9XT1JLRVIQARIICgROT0RFEAJCDQoLX3VzZXJfYWdlbnRCCwoJX3BsYXRmb3JtQgcKBV9hcmNoQgoKCF9ydW50aW1lQgkKB191cHRpbWVCCQoHX21lbW9yeSK8AQoISWRlbnRpdHkSKgoMaWRlbnRpdHlfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIsCglzcGFjZV9rZXkYAiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SACIAQESPAoHcHJvZmlsZRgDIAEoCzImLmR4b3MuaGFsby5jcmVkZW50aWFscy5Qcm9maWxlRG9jdW1lbnRIAYgBAUIMCgpfc3BhY2Vfa2V5QgoKCF9wcm9maWxlIi4KFlJlY292ZXJJZGVudGl0eVJlcXVlc3QSFAoMcmVjb3Zlcnlfa2V5GAEgASgMIlsKFVF1ZXJ5SWRlbnRpdHlSZXNwb25zZRI1CghpZGVudGl0eRgBIAEoCzIeLmR4b3MuY2xpZW50LnNlcnZpY2VzLklkZW50aXR5SACIAQFCCwoJX2lkZW50aXR5InIKF1NpZ25QcmVzZW50YXRpb25SZXF1ZXN0EjkKDHByZXNlbnRhdGlvbhgBIAEoCzIjLmR4b3MuaGFsby5jcmVkZW50aWFscy5QcmVzZW50YXRpb24SEgoFbm9uY2UYAiABKAxIAIgBAUIICgZfbm9uY2UixQEKFUNyZWF0ZUlkZW50aXR5UmVxdWVzdBI8Cgdwcm9maWxlGAEgASgLMiYuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlByb2ZpbGVEb2N1bWVudEgAiAEBEkkKDmRldmljZV9wcm9maWxlGAMgASgLMiwuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkRldmljZVByb2ZpbGVEb2N1bWVudEgBiAEBQgoKCF9wcm9maWxlQhEKD19kZXZpY2VfcHJvZmlsZUoECAIQAyKnAgoGRGV2aWNlEigKCmRldmljZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ei4KBGtpbmQYAiABKA4yIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5EZXZpY2VLaW5kEkIKB3Byb2ZpbGUYAyABKAsyLC5keG9zLmhhbG8uY3JlZGVudGlhbHMuRGV2aWNlUHJvZmlsZURvY3VtZW50SACIAQESPAoIcHJlc2VuY2UYBCABKA4yKi5keG9zLmNsaWVudC5zZXJ2aWNlcy5EZXZpY2UuUHJlc2VuY2VTdGF0ZSI1Cg1QcmVzZW5jZVN0YXRlEgsKB09GRkxJTkUQABIKCgZPTkxJTkUQARILCgdSRU1PVkVEEAJCCgoIX3Byb2ZpbGUiRQoUUXVlcnlEZXZpY2VzUmVzcG9uc2USLQoHZGV2aWNlcxgBIAMoCzIcLmR4b3MuY2xpZW50LnNlcnZpY2VzLkRldmljZSKqAQoHQ29udGFjdBIpCgtpZGVudGl0eUtleRgCIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSPAoHcHJvZmlsZRgBIAEoCzImLmR4b3MuaGFsby5jcmVkZW50aWFscy5Qcm9maWxlRG9jdW1lbnRIAIgBARIqCgxjb21tb25TcGFjZXMYAyADKAsyFC5keG9zLmtleXMuUHVibGljS2V5QgoKCF9wcm9maWxlIj4KC0NvbnRhY3RCb29rEi8KCGNvbnRhY3RzGAEgAygLMh0uZHhvcy5jbGllbnQuc2VydmljZXMuQ29udGFjdCKWAgoLU3BhY2VNZW1iZXISMAoIaWRlbnRpdHkYASABKAsyHi5keG9zLmNsaWVudC5zZXJ2aWNlcy5JZGVudGl0eRJBCghwcmVzZW5jZRgCIAEoDjIvLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlTWVtYmVyLlByZXNlbmNlU3RhdGUSMQoKcGVlclN0YXRlcxgDIAMoCzIdLmR4b3MubWVzaC5wcmVzZW5jZS5QZWVyU3RhdGUSNQoEcm9sZRgEIAEoDjInLmR4b3MuaGFsby5jcmVkZW50aWFscy5TcGFjZU1lbWJlci5Sb2xlIigKDVByZXNlbmNlU3RhdGUSCwoHT0ZGTElORRAAEgoKBk9OTElORRABIoYSCgVTcGFjZRIKCgJpZBgFIAEoCRInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ei8KBXN0YXRlGAIgASgOMiAuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2VTdGF0ZRJACghwaXBlbGluZRgDIAEoCzIpLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlLlBpcGVsaW5lU3RhdGVIAIgBARIlCgVlcnJvchgEIAEoCzIRLmR4b3MuZXJyb3IuRXJyb3JIAYgBARIyCgdtZW1iZXJzGAogAygLMiEuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2VNZW1iZXISKgoHY3JlYXRvchgLIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAogBARIyCgVjYWNoZRgUIAEoCzIeLmR4b3MuZWNoby5tZXRhZGF0YS5TcGFjZUNhY2hlSAOIAQESNAoHbWV0cmljcxgVIAEoCzIjLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlLk1ldHJpY3Ma1wMKB01ldHJpY3MSLQoEb3BlbhgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARI8ChNwaXBlbGluZV9pbml0X2JlZ2luGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEj8KFmNvbnRyb2xfcGlwZWxpbmVfcmVhZHkYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESOwoSZGF0YV9waXBlbGluZV9vcGVuGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBEjwKE2RhdGFfcGlwZWxpbmVfcmVhZHkYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSASIAQESLgoFcmVhZHkYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAWIAQFCBwoFX29wZW5CFgoUX3BpcGVsaW5lX2luaXRfYmVnaW5CGQoXX2NvbnRyb2xfcGlwZWxpbmVfcmVhZHlCFQoTX2RhdGFfcGlwZWxpbmVfb3BlbkIWChRfZGF0YV9waXBlbGluZV9yZWFkeUIICgZfcmVhZHka3AoKDVBpcGVsaW5lU3RhdGUSMwoQY29udHJvbF9mZWVkX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAIgBARIwCg1kYXRhX2ZlZWRfa2V5GAIgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleUgBiAEBEisKDWNvbnRyb2xfZmVlZHMYEiADKAsyFC5keG9zLmtleXMuUHVibGljS2V5EigKCmRhdGFfZmVlZHMYEyADKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ej0KDWN1cnJlbnRfZXBvY2gYFCABKAsyIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbEgCiAEBEj0KDWFwcGxpZWRfZXBvY2gYFSABKAsyIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbEgDiAEBEkwKGWN1cnJlbnRfY29udHJvbF90aW1lZnJhbWUYCiABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgEiAEBEksKGHRhcmdldF9jb250cm9sX3RpbWVmcmFtZRgLIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAWIAQESSgoXdG90YWxfY29udHJvbF90aW1lZnJhbWUYDiABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgGiAEBEkoKF2tub3duX2NvbnRyb2xfdGltZWZyYW1lGA8gASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JIB4gBARJHChRzdGFydF9kYXRhX3RpbWVmcmFtZRhkIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAiIAQESSQoWY3VycmVudF9kYXRhX3RpbWVmcmFtZRgMIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAmIAQESSAoVdGFyZ2V0X2RhdGFfdGltZWZyYW1lGA0gASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JICogBARJHChR0b3RhbF9kYXRhX3RpbWVmcmFtZRgQIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAuIAQESRwoUa25vd25fZGF0YV90aW1lZnJhbWUYESABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgMiAEBEhsKDnNwYWNlX3Jvb3RfdXJsGBYgASgJSA2IAQFCEwoRX2NvbnRyb2xfZmVlZF9rZXlCEAoOX2RhdGFfZmVlZF9rZXlCEAoOX2N1cnJlbnRfZXBvY2hCEAoOX2FwcGxpZWRfZXBvY2hCHAoaX2N1cnJlbnRfY29udHJvbF90aW1lZnJhbWVCGwoZX3RhcmdldF9jb250cm9sX3RpbWVmcmFtZUIaChhfdG90YWxfY29udHJvbF90aW1lZnJhbWVCGgoYX2tub3duX2NvbnRyb2xfdGltZWZyYW1lQhcKFV9zdGFydF9kYXRhX3RpbWVmcmFtZUIZChdfY3VycmVudF9kYXRhX3RpbWVmcmFtZUIYChZfdGFyZ2V0X2RhdGFfdGltZWZyYW1lQhcKFV90b3RhbF9kYXRhX3RpbWVmcmFtZUIXChVfa25vd25fZGF0YV90aW1lZnJhbWVCEQoPX3NwYWNlX3Jvb3RfdXJsQgsKCV9waXBlbGluZUIICgZfZXJyb3JCCgoIX2NyZWF0b3JCCAoGX2NhY2hlIn0KElVwZGF0ZVNwYWNlUmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjQKBXN0YXRlGAIgASgOMiAuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2VTdGF0ZUgAiAEBQggKBl9zdGF0ZSJCChNRdWVyeVNwYWNlc1Jlc3BvbnNlEisKBnNwYWNlcxgBIAMoCzIbLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlInUKElBvc3RNZXNzYWdlUmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Eg8KB2NoYW5uZWwYAiABKAkSJQoHbWVzc2FnZRgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkiVAoYU3Vic2NyaWJlTWVzc2FnZXNSZXF1ZXN0EicKCXNwYWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSDwoHY2hhbm5lbBgCIAEoCSJ6ChdXcml0ZUNyZWRlbnRpYWxzUmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjYKC2NyZWRlbnRpYWxzGAIgAygLMiEuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkNyZWRlbnRpYWwiZAoXUXVlcnlDcmVkZW50aWFsc1JlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIUCgdub190YWlsGAIgASgISACIAQFCCgoIX25vX3RhaWwi9QIKEkNyZWF0ZUVwb2NoUmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EkoKCW1pZ3JhdGlvbhgCIAEoDjIyLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNyZWF0ZUVwb2NoUmVxdWVzdC5NaWdyYXRpb25IAIgBARIfChJhdXRvbWVyZ2Vfcm9vdF91cmwYAyABKAlIAYgBASKjAQoJTWlncmF0aW9uEggKBE5PTkUQABISCg5JTklUX0FVVE9NRVJHRRABEiAKHFBSVU5FX0FVVE9NRVJHRV9ST09UX0hJU1RPUlkQAhIbChdGUkFHTUVOVF9BVVRPTUVSR0VfUk9PVBADEhoKFlJFUExBQ0VfQVVUT01FUkdFX1JPT1QQBBIdChlNSUdSQVRFX1JFRkVSRU5DRVNfVE9fRFhOEAVCDAoKX21pZ3JhdGlvbkIVChNfYXV0b21lcmdlX3Jvb3RfdXJsIsgBChNDcmVhdGVFcG9jaFJlc3BvbnNlEkAKEGVwb2NoX2NyZWRlbnRpYWwYASABKAsyIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbEgAiAEBEkQKEWNvbnRyb2xfdGltZWZyYW1lGAIgASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JIAYgBAUITChFfZXBvY2hfY3JlZGVudGlhbEIUChJfY29udHJvbF90aW1lZnJhbWUipwEKF1VwZGF0ZU1lbWJlclJvbGVSZXF1ZXN0EicKCXNwYWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSKAoKbWVtYmVyX2tleRgCIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSOQoIbmV3X3JvbGUYAyABKA4yJy5keG9zLmhhbG8uY3JlZGVudGlhbHMuU3BhY2VNZW1iZXIuUm9sZSKlAQoTQWRtaXRDb250YWN0UmVxdWVzdBIuCgdjb250YWN0GAEgASgLMh0uZHhvcy5jbGllbnQuc2VydmljZXMuQ29udGFjdBI1CgRyb2xlGAIgASgOMicuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlNwYWNlTWVtYmVyLlJvbGUSJwoJc3BhY2Vfa2V5GAMgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleSJJChBDb250YWN0QWRtaXNzaW9uEjUKCmNyZWRlbnRpYWwYASABKAsyIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbCI/ChFKb2luU3BhY2VSZXNwb25zZRIqCgVzcGFjZRgBIAEoCzIbLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlIkAKFUpvaW5CeVNwYWNlS2V5UmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Iq0BChdBY2NlcHRJbnZpdGF0aW9uUmVxdWVzdBI0CgppbnZpdGF0aW9uGAEgASgLMiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbhJJCg5kZXZpY2VfcHJvZmlsZRgCIAEoCzIsLmR4b3MuaGFsby5jcmVkZW50aWFscy5EZXZpY2VQcm9maWxlRG9jdW1lbnRIAIgBAUIRCg9fZGV2aWNlX3Byb2ZpbGUiQQoVQXV0aGVudGljYXRpb25SZXF1ZXN0EhUKDWludml0YXRpb25faWQYASABKAkSEQoJYXV0aF9jb2RlGAIgASgJIjAKF0NhbmNlbEludml0YXRpb25SZXF1ZXN0EhUKDWludml0YXRpb25faWQYASABKAkihQEKEEludml0YXRpb25NZXRob2QSMwoHY3JlYXRlZBgBIAEoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb25IABI0CghhY2NlcHRlZBgCIAEoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb25IAEIGCgRraW5kIuICChhRdWVyeUludml0YXRpb25zUmVzcG9uc2USRQoGYWN0aW9uGAEgASgOMjUuZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlJbnZpdGF0aW9uc1Jlc3BvbnNlLkFjdGlvbhJBCgR0eXBlGAIgASgOMjMuZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlJbnZpdGF0aW9uc1Jlc3BvbnNlLlR5cGUSNQoLaW52aXRhdGlvbnMYAyADKAsyIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uEhUKCGV4aXN0aW5nGAQgASgISACIAQEiPgoGQWN0aW9uEgkKBUFEREVEEAASCwoHUkVNT1ZFRBABEgkKBVNBVkVEEAISEQoNTE9BRF9DT01QTEVURRADIiEKBFR5cGUSCwoHQ1JFQVRFRBAAEgwKCEFDQ0VQVEVEEAFCCwoJX2V4aXN0aW5nIloKIUxvYWRQZXJzaXN0ZW50SW52aXRhdGlvbnNSZXNwb25zZRI1CgtpbnZpdGF0aW9ucxgBIAMoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24ihQIKDU5ldHdvcmtTdGF0dXMSNAoFc3dhcm0YASABKA4yJS5keG9zLmNsaWVudC5zZXJ2aWNlcy5Db25uZWN0aW9uU3RhdGUSPQoJc2lnbmFsaW5nGAIgAygLMiouZHhvcy5jbGllbnQuc2VydmljZXMuTmV0d29ya1N0YXR1cy5TaWduYWwSNwoPY29ubmVjdGlvbl9pbmZvGAMgAygLMh4uZHhvcy5kZXZ0b29scy5zd2FybS5Td2FybUluZm8aRgoGU2lnbmFsEg4KBnNlcnZlchgBIAEoCRIsCgVzdGF0ZRgCIAEoDjIdLmR4b3MubWVzaC5zaWduYWwuU2lnbmFsU3RhdGUiSwoTVXBkYXRlQ29uZmlnUmVxdWVzdBI0CgVzd2FybRgBIAEoDjIlLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNvbm5lY3Rpb25TdGF0ZSooCgxTeXN0ZW1TdGF0dXMSCgoGQUNUSVZFEAASDAoISU5BQ1RJVkUQASomCgpEZXZpY2VLaW5kEgsKB0NVUlJFTlQQABILCgdUUlVTVEVEEAEqKgoPQ29ubmVjdGlvblN0YXRlEgsKB09GRkxJTkUQABIKCgZPTkxJTkUQATLvAwoNU3lzdGVtU2VydmljZRI4CglHZXRDb25maWcSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaEy5keG9zLmNvbmZpZy5Db25maWcSawoOR2V0RGlhZ25vc3RpY3MSKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5HZXREaWFnbm9zdGljc1JlcXVlc3QaLC5keG9zLmNsaWVudC5zZXJ2aWNlcy5HZXREaWFnbm9zdGljc1Jlc3BvbnNlElEKDFVwZGF0ZVN0YXR1cxIpLmR4b3MuY2xpZW50LnNlcnZpY2VzLlVwZGF0ZVN0YXR1c1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSZAoLUXVlcnlTdGF0dXMSKC5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeVN0YXR1c1JlcXVlc3QaKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeVN0YXR1c1Jlc3BvbnNlMAESNwoFUmVzZXQSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSRQoLR2V0UGxhdGZvcm0SFi5nb29nbGUucHJvdG9idWYuRW1wdHkaHi5keG9zLmNsaWVudC5zZXJ2aWNlcy5QbGF0Zm9ybTLqAwoPSWRlbnRpdHlTZXJ2aWNlEl0KDkNyZWF0ZUlkZW50aXR5EisuZHhvcy5jbGllbnQuc2VydmljZXMuQ3JlYXRlSWRlbnRpdHlSZXF1ZXN0Gh4uZHhvcy5jbGllbnQuc2VydmljZXMuSWRlbnRpdHkSXwoPUmVjb3ZlcklkZW50aXR5EiwuZHhvcy5jbGllbnQuc2VydmljZXMuUmVjb3ZlcklkZW50aXR5UmVxdWVzdBoeLmR4b3MuY2xpZW50LnNlcnZpY2VzLklkZW50aXR5ElYKDVF1ZXJ5SWRlbnRpdHkSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUlkZW50aXR5UmVzcG9uc2UwARJXCg1VcGRhdGVQcm9maWxlEiYuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlByb2ZpbGVEb2N1bWVudBoeLmR4b3MuY2xpZW50LnNlcnZpY2VzLklkZW50aXR5EmYKEFNpZ25QcmVzZW50YXRpb24SLS5keG9zLmNsaWVudC5zZXJ2aWNlcy5TaWduUHJlc2VudGF0aW9uUmVxdWVzdBojLmR4b3MuaGFsby5jcmVkZW50aWFscy5QcmVzZW50YXRpb24ywgEKDkRldmljZXNTZXJ2aWNlEloKDFVwZGF0ZURldmljZRIsLmR4b3MuaGFsby5jcmVkZW50aWFscy5EZXZpY2VQcm9maWxlRG9jdW1lbnQaHC5keG9zLmNsaWVudC5zZXJ2aWNlcy5EZXZpY2USVAoMUXVlcnlEZXZpY2VzEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GiouZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlEZXZpY2VzUmVzcG9uc2UwATKpAQoPQ29udGFjdHNTZXJ2aWNlEkgKC0dldENvbnRhY3RzEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GiEuZHhvcy5jbGllbnQuc2VydmljZXMuQ29udGFjdEJvb2sSTAoNUXVlcnlDb250YWN0cxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRohLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNvbnRhY3RCb29rMAEy9wcKDVNwYWNlc1NlcnZpY2USQgoLQ3JlYXRlU3BhY2USFi5nb29nbGUucHJvdG9idWYuRW1wdHkaGy5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZRJPCgtVcGRhdGVTcGFjZRIoLmR4b3MuY2xpZW50LnNlcnZpY2VzLlVwZGF0ZVNwYWNlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJSCgtRdWVyeVNwYWNlcxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRopLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5U3BhY2VzUmVzcG9uc2UwARJZChBVcGRhdGVNZW1iZXJSb2xlEi0uZHhvcy5jbGllbnQuc2VydmljZXMuVXBkYXRlTWVtYmVyUm9sZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSUQoMQWRtaXRDb250YWN0EikuZHhvcy5jbGllbnQuc2VydmljZXMuQWRtaXRDb250YWN0UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJmCg5Kb2luQnlTcGFjZUtleRIrLmR4b3MuY2xpZW50LnNlcnZpY2VzLkpvaW5CeVNwYWNlS2V5UmVxdWVzdBonLmR4b3MuY2xpZW50LnNlcnZpY2VzLkpvaW5TcGFjZVJlc3BvbnNlEk8KC1Bvc3RNZXNzYWdlEiguZHhvcy5jbGllbnQuc2VydmljZXMuUG9zdE1lc3NhZ2VSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Em8KEVN1YnNjcmliZU1lc3NhZ2VzEi4uZHhvcy5jbGllbnQuc2VydmljZXMuU3Vic2NyaWJlTWVzc2FnZXNSZXF1ZXN0GiguZHhvcy5tZXNoLnRlbGVwb3J0Lmdvc3NpcC5Hb3NzaXBNZXNzYWdlMAESWQoQV3JpdGVDcmVkZW50aWFscxItLmR4b3MuY2xpZW50LnNlcnZpY2VzLldyaXRlQ3JlZGVudGlhbHNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EmYKEFF1ZXJ5Q3JlZGVudGlhbHMSLS5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUNyZWRlbnRpYWxzUmVxdWVzdBohLmR4b3MuaGFsby5jcmVkZW50aWFscy5DcmVkZW50aWFsMAESYgoLQ3JlYXRlRXBvY2gSKC5keG9zLmNsaWVudC5zZXJ2aWNlcy5DcmVhdGVFcG9jaFJlcXVlc3QaKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5DcmVhdGVFcG9jaFJlc3BvbnNlMuMDChJJbnZpdGF0aW9uc1NlcnZpY2USWAoQQ3JlYXRlSW52aXRhdGlvbhIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24aIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uMAESZQoQQWNjZXB0SW52aXRhdGlvbhItLmR4b3MuY2xpZW50LnNlcnZpY2VzLkFjY2VwdEludml0YXRpb25SZXF1ZXN0GiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbjABElMKDEF1dGhlbnRpY2F0ZRIrLmR4b3MuY2xpZW50LnNlcnZpY2VzLkF1dGhlbnRpY2F0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJZChBDYW5jZWxJbnZpdGF0aW9uEi0uZHhvcy5jbGllbnQuc2VydmljZXMuQ2FuY2VsSW52aXRhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSXAoQUXVlcnlJbnZpdGF0aW9ucxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRouLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5SW52aXRhdGlvbnNSZXNwb25zZTABMrEBCg5OZXR3b3JrU2VydmljZRJRCgxVcGRhdGVDb25maWcSKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5VcGRhdGVDb25maWdSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EkwKC1F1ZXJ5U3RhdHVzEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GiMuZHhvcy5jbGllbnQuc2VydmljZXMuTmV0d29ya1N0YXR1czABYgZwcm90bzM", [file_google_protobuf_any, file_google_protobuf_empty, file_google_protobuf_struct, file_google_protobuf_timestamp, file_dxos_client_invitation, file_dxos_config, file_dxos_devtools_swarm, file_dxos_echo_metadata, file_dxos_echo_timeframe, file_dxos_error, file_dxos_halo_credentials, file_dxos_keys, file_dxos_mesh_signal, file_dxos_mesh_presence, file_dxos_mesh_teleport_gossip, file_dxos_value]);
44
+ fileDesc("ChpkeG9zL2NsaWVudC9zZXJ2aWNlcy5wcm90bxIUZHhvcy5jbGllbnQuc2VydmljZXMiSQoTVXBkYXRlU3RhdHVzUmVxdWVzdBIyCgZzdGF0dXMYASABKA4yIi5keG9zLmNsaWVudC5zZXJ2aWNlcy5TeXN0ZW1TdGF0dXMiOAoSUXVlcnlTdGF0dXNSZXF1ZXN0EhUKCGludGVydmFsGAEgASgFSACIAQFCCwoJX2ludGVydmFsIkkKE1F1ZXJ5U3RhdHVzUmVzcG9uc2USMgoGc3RhdHVzGAEgASgOMiIuZHhvcy5jbGllbnQuc2VydmljZXMuU3lzdGVtU3RhdHVzIp8BChVHZXREaWFnbm9zdGljc1JlcXVlc3QSSQoEa2V5cxgBIAEoDjI2LmR4b3MuY2xpZW50LnNlcnZpY2VzLkdldERpYWdub3N0aWNzUmVxdWVzdC5LRVlfT1BUSU9OSACIAQEiMgoKS0VZX09QVElPThIICgROT05FEAASDAoIVFJVTkNBVEUQARIMCghIVU1BTklaRRACQgcKBV9rZXlzInUKFkdldERpYWdub3N0aWNzUmVzcG9uc2USLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCgtkaWFnbm9zdGljcxgCIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3Qi5AIKCFBsYXRmb3JtEjoKBHR5cGUYASABKA4yLC5keG9zLmNsaWVudC5zZXJ2aWNlcy5QbGF0Zm9ybS5QTEFURk9STV9UWVBFEhcKCnVzZXJfYWdlbnQYAiABKAlIAIgBARIVCghwbGF0Zm9ybRgDIAEoCUgBiAEBEhEKBGFyY2gYBCABKAlIAogBARIUCgdydW50aW1lGAUgASgJSAOIAQESEwoGdXB0aW1lGAYgASgNSASIAQESLAoGbWVtb3J5GAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgFiAEBIjkKDVBMQVRGT1JNX1RZUEUSCwoHQlJPV1NFUhAAEhEKDVNIQVJFRF9XT1JLRVIQARIICgROT0RFEAJCDQoLX3VzZXJfYWdlbnRCCwoJX3BsYXRmb3JtQgcKBV9hcmNoQgoKCF9ydW50aW1lQgkKB191cHRpbWVCCQoHX21lbW9yeSK8AQoISWRlbnRpdHkSKgoMaWRlbnRpdHlfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIsCglzcGFjZV9rZXkYAiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SACIAQESPAoHcHJvZmlsZRgDIAEoCzImLmR4b3MuaGFsby5jcmVkZW50aWFscy5Qcm9maWxlRG9jdW1lbnRIAYgBAUIMCgpfc3BhY2Vfa2V5QgoKCF9wcm9maWxlIi4KFlJlY292ZXJJZGVudGl0eVJlcXVlc3QSFAoMcmVjb3Zlcnlfa2V5GAEgASgMIlsKFVF1ZXJ5SWRlbnRpdHlSZXNwb25zZRI1CghpZGVudGl0eRgBIAEoCzIeLmR4b3MuY2xpZW50LnNlcnZpY2VzLklkZW50aXR5SACIAQFCCwoJX2lkZW50aXR5InIKF1NpZ25QcmVzZW50YXRpb25SZXF1ZXN0EjkKDHByZXNlbnRhdGlvbhgBIAEoCzIjLmR4b3MuaGFsby5jcmVkZW50aWFscy5QcmVzZW50YXRpb24SEgoFbm9uY2UYAiABKAxIAIgBAUIICgZfbm9uY2UixQEKFUNyZWF0ZUlkZW50aXR5UmVxdWVzdBI8Cgdwcm9maWxlGAEgASgLMiYuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlByb2ZpbGVEb2N1bWVudEgAiAEBEkkKDmRldmljZV9wcm9maWxlGAMgASgLMiwuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkRldmljZVByb2ZpbGVEb2N1bWVudEgBiAEBQgoKCF9wcm9maWxlQhEKD19kZXZpY2VfcHJvZmlsZUoECAIQAyKnAgoGRGV2aWNlEigKCmRldmljZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ei4KBGtpbmQYAiABKA4yIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5EZXZpY2VLaW5kEkIKB3Byb2ZpbGUYAyABKAsyLC5keG9zLmhhbG8uY3JlZGVudGlhbHMuRGV2aWNlUHJvZmlsZURvY3VtZW50SACIAQESPAoIcHJlc2VuY2UYBCABKA4yKi5keG9zLmNsaWVudC5zZXJ2aWNlcy5EZXZpY2UuUHJlc2VuY2VTdGF0ZSI1Cg1QcmVzZW5jZVN0YXRlEgsKB09GRkxJTkUQABIKCgZPTkxJTkUQARILCgdSRU1PVkVEEAJCCgoIX3Byb2ZpbGUiRQoUUXVlcnlEZXZpY2VzUmVzcG9uc2USLQoHZGV2aWNlcxgBIAMoCzIcLmR4b3MuY2xpZW50LnNlcnZpY2VzLkRldmljZSKqAQoHQ29udGFjdBIpCgtpZGVudGl0eUtleRgCIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSPAoHcHJvZmlsZRgBIAEoCzImLmR4b3MuaGFsby5jcmVkZW50aWFscy5Qcm9maWxlRG9jdW1lbnRIAIgBARIqCgxjb21tb25TcGFjZXMYAyADKAsyFC5keG9zLmtleXMuUHVibGljS2V5QgoKCF9wcm9maWxlIj4KC0NvbnRhY3RCb29rEi8KCGNvbnRhY3RzGAEgAygLMh0uZHhvcy5jbGllbnQuc2VydmljZXMuQ29udGFjdCKWAgoLU3BhY2VNZW1iZXISMAoIaWRlbnRpdHkYASABKAsyHi5keG9zLmNsaWVudC5zZXJ2aWNlcy5JZGVudGl0eRJBCghwcmVzZW5jZRgCIAEoDjIvLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlTWVtYmVyLlByZXNlbmNlU3RhdGUSMQoKcGVlclN0YXRlcxgDIAMoCzIdLmR4b3MubWVzaC5wcmVzZW5jZS5QZWVyU3RhdGUSNQoEcm9sZRgEIAEoDjInLmR4b3MuaGFsby5jcmVkZW50aWFscy5TcGFjZU1lbWJlci5Sb2xlIigKDVByZXNlbmNlU3RhdGUSCwoHT0ZGTElORRAAEgoKBk9OTElORRABIuYSCgVTcGFjZRIKCgJpZBgFIAEoCRInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ei8KBXN0YXRlGAIgASgOMiAuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2VTdGF0ZRJACghwaXBlbGluZRgDIAEoCzIpLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlLlBpcGVsaW5lU3RhdGVIAIgBARIlCgVlcnJvchgEIAEoCzIRLmR4b3MuZXJyb3IuRXJyb3JIAYgBARJJChBlZGdlX3JlcGxpY2F0aW9uGAYgASgOMiouZHhvcy5lY2hvLm1ldGFkYXRhLkVkZ2VSZXBsaWNhdGlvblNldHRpbmdIAogBARIyCgdtZW1iZXJzGAogAygLMiEuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2VNZW1iZXISKgoHY3JlYXRvchgLIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIA4gBARIyCgVjYWNoZRgUIAEoCzIeLmR4b3MuZWNoby5tZXRhZGF0YS5TcGFjZUNhY2hlSASIAQESNAoHbWV0cmljcxgVIAEoCzIjLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlLk1ldHJpY3Ma1wMKB01ldHJpY3MSLQoEb3BlbhgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARI8ChNwaXBlbGluZV9pbml0X2JlZ2luGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEj8KFmNvbnRyb2xfcGlwZWxpbmVfcmVhZHkYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESOwoSZGF0YV9waXBlbGluZV9vcGVuGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgDiAEBEjwKE2RhdGFfcGlwZWxpbmVfcmVhZHkYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSASIAQESLgoFcmVhZHkYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAWIAQFCBwoFX29wZW5CFgoUX3BpcGVsaW5lX2luaXRfYmVnaW5CGQoXX2NvbnRyb2xfcGlwZWxpbmVfcmVhZHlCFQoTX2RhdGFfcGlwZWxpbmVfb3BlbkIWChRfZGF0YV9waXBlbGluZV9yZWFkeUIICgZfcmVhZHka3AoKDVBpcGVsaW5lU3RhdGUSMwoQY29udHJvbF9mZWVkX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAIgBARIwCg1kYXRhX2ZlZWRfa2V5GAIgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleUgBiAEBEisKDWNvbnRyb2xfZmVlZHMYEiADKAsyFC5keG9zLmtleXMuUHVibGljS2V5EigKCmRhdGFfZmVlZHMYEyADKAsyFC5keG9zLmtleXMuUHVibGljS2V5Ej0KDWN1cnJlbnRfZXBvY2gYFCABKAsyIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbEgCiAEBEj0KDWFwcGxpZWRfZXBvY2gYFSABKAsyIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbEgDiAEBEkwKGWN1cnJlbnRfY29udHJvbF90aW1lZnJhbWUYCiABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgEiAEBEksKGHRhcmdldF9jb250cm9sX3RpbWVmcmFtZRgLIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAWIAQESSgoXdG90YWxfY29udHJvbF90aW1lZnJhbWUYDiABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgGiAEBEkoKF2tub3duX2NvbnRyb2xfdGltZWZyYW1lGA8gASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JIB4gBARJHChRzdGFydF9kYXRhX3RpbWVmcmFtZRhkIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAiIAQESSQoWY3VycmVudF9kYXRhX3RpbWVmcmFtZRgMIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAmIAQESSAoVdGFyZ2V0X2RhdGFfdGltZWZyYW1lGA0gASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JICogBARJHChR0b3RhbF9kYXRhX3RpbWVmcmFtZRgQIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAuIAQESRwoUa25vd25fZGF0YV90aW1lZnJhbWUYESABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgMiAEBEhsKDnNwYWNlX3Jvb3RfdXJsGBYgASgJSA2IAQFCEwoRX2NvbnRyb2xfZmVlZF9rZXlCEAoOX2RhdGFfZmVlZF9rZXlCEAoOX2N1cnJlbnRfZXBvY2hCEAoOX2FwcGxpZWRfZXBvY2hCHAoaX2N1cnJlbnRfY29udHJvbF90aW1lZnJhbWVCGwoZX3RhcmdldF9jb250cm9sX3RpbWVmcmFtZUIaChhfdG90YWxfY29udHJvbF90aW1lZnJhbWVCGgoYX2tub3duX2NvbnRyb2xfdGltZWZyYW1lQhcKFV9zdGFydF9kYXRhX3RpbWVmcmFtZUIZChdfY3VycmVudF9kYXRhX3RpbWVmcmFtZUIYChZfdGFyZ2V0X2RhdGFfdGltZWZyYW1lQhcKFV90b3RhbF9kYXRhX3RpbWVmcmFtZUIXChVfa25vd25fZGF0YV90aW1lZnJhbWVCEQoPX3NwYWNlX3Jvb3RfdXJsQgsKCV9waXBlbGluZUIICgZfZXJyb3JCEwoRX2VkZ2VfcmVwbGljYXRpb25CCgoIX2NyZWF0b3JCCAoGX2NhY2hlIt0BChJVcGRhdGVTcGFjZVJlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRI0CgVzdGF0ZRgCIAEoDjIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLlNwYWNlU3RhdGVIAIgBARJJChBlZGdlX3JlcGxpY2F0aW9uGAMgASgOMiouZHhvcy5lY2hvLm1ldGFkYXRhLkVkZ2VSZXBsaWNhdGlvblNldHRpbmdIAYgBAUIICgZfc3RhdGVCEwoRX2VkZ2VfcmVwbGljYXRpb24iQgoTUXVlcnlTcGFjZXNSZXNwb25zZRIrCgZzcGFjZXMYASADKAsyGy5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZSJ1ChJQb3N0TWVzc2FnZVJlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRIPCgdjaGFubmVsGAIgASgJEiUKB21lc3NhZ2UYAyABKAsyFC5nb29nbGUucHJvdG9idWYuQW55IlQKGFN1YnNjcmliZU1lc3NhZ2VzUmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5Eg8KB2NoYW5uZWwYAiABKAkiegoXV3JpdGVDcmVkZW50aWFsc1JlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRI2CgtjcmVkZW50aWFscxgCIAMoCzIhLmR4b3MuaGFsby5jcmVkZW50aWFscy5DcmVkZW50aWFsImQKF1F1ZXJ5Q3JlZGVudGlhbHNSZXF1ZXN0EicKCXNwYWNlX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSFAoHbm9fdGFpbBgCIAEoCEgAiAEBQgoKCF9ub190YWlsIvUCChJDcmVhdGVFcG9jaFJlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleRJKCgltaWdyYXRpb24YAiABKA4yMi5keG9zLmNsaWVudC5zZXJ2aWNlcy5DcmVhdGVFcG9jaFJlcXVlc3QuTWlncmF0aW9uSACIAQESHwoSYXV0b21lcmdlX3Jvb3RfdXJsGAMgASgJSAGIAQEiowEKCU1pZ3JhdGlvbhIICgROT05FEAASEgoOSU5JVF9BVVRPTUVSR0UQARIgChxQUlVORV9BVVRPTUVSR0VfUk9PVF9ISVNUT1JZEAISGwoXRlJBR01FTlRfQVVUT01FUkdFX1JPT1QQAxIaChZSRVBMQUNFX0FVVE9NRVJHRV9ST09UEAQSHQoZTUlHUkFURV9SRUZFUkVOQ0VTX1RPX0RYThAFQgwKCl9taWdyYXRpb25CFQoTX2F1dG9tZXJnZV9yb290X3VybCLIAQoTQ3JlYXRlRXBvY2hSZXNwb25zZRJAChBlcG9jaF9jcmVkZW50aWFsGAEgASgLMiEuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkNyZWRlbnRpYWxIAIgBARJEChFjb250cm9sX3RpbWVmcmFtZRgCIAEoCzIkLmR4b3MuZWNoby50aW1lZnJhbWUuVGltZWZyYW1lVmVjdG9ySAGIAQFCEwoRX2Vwb2NoX2NyZWRlbnRpYWxCFAoSX2NvbnRyb2xfdGltZWZyYW1lIqcBChdVcGRhdGVNZW1iZXJSb2xlUmVxdWVzdBInCglzcGFjZV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EigKCm1lbWJlcl9rZXkYAiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjkKCG5ld19yb2xlGAMgASgOMicuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlNwYWNlTWVtYmVyLlJvbGUipQEKE0FkbWl0Q29udGFjdFJlcXVlc3QSLgoHY29udGFjdBgBIAEoCzIdLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNvbnRhY3QSNQoEcm9sZRgCIAEoDjInLmR4b3MuaGFsby5jcmVkZW50aWFscy5TcGFjZU1lbWJlci5Sb2xlEicKCXNwYWNlX2tleRgDIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkiSQoQQ29udGFjdEFkbWlzc2lvbhI1CgpjcmVkZW50aWFsGAEgASgLMiEuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLkNyZWRlbnRpYWwiPwoRSm9pblNwYWNlUmVzcG9uc2USKgoFc3BhY2UYASABKAsyGy5keG9zLmNsaWVudC5zZXJ2aWNlcy5TcGFjZSJAChVKb2luQnlTcGFjZUtleVJlcXVlc3QSJwoJc3BhY2Vfa2V5GAEgASgLMhQuZHhvcy5rZXlzLlB1YmxpY0tleSKtAQoXQWNjZXB0SW52aXRhdGlvblJlcXVlc3QSNAoKaW52aXRhdGlvbhgBIAEoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24SSQoOZGV2aWNlX3Byb2ZpbGUYAiABKAsyLC5keG9zLmhhbG8uY3JlZGVudGlhbHMuRGV2aWNlUHJvZmlsZURvY3VtZW50SACIAQFCEQoPX2RldmljZV9wcm9maWxlIkEKFUF1dGhlbnRpY2F0aW9uUmVxdWVzdBIVCg1pbnZpdGF0aW9uX2lkGAEgASgJEhEKCWF1dGhfY29kZRgCIAEoCSIwChdDYW5jZWxJbnZpdGF0aW9uUmVxdWVzdBIVCg1pbnZpdGF0aW9uX2lkGAEgASgJIoUBChBJbnZpdGF0aW9uTWV0aG9kEjMKB2NyZWF0ZWQYASABKAsyIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uSAASNAoIYWNjZXB0ZWQYAiABKAsyIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uSABCBgoEa2luZCLiAgoYUXVlcnlJbnZpdGF0aW9uc1Jlc3BvbnNlEkUKBmFjdGlvbhgBIAEoDjI1LmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5SW52aXRhdGlvbnNSZXNwb25zZS5BY3Rpb24SQQoEdHlwZRgCIAEoDjIzLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5SW52aXRhdGlvbnNSZXNwb25zZS5UeXBlEjUKC2ludml0YXRpb25zGAMgAygLMiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbhIVCghleGlzdGluZxgEIAEoCEgAiAEBIj4KBkFjdGlvbhIJCgVBRERFRBAAEgsKB1JFTU9WRUQQARIJCgVTQVZFRBACEhEKDUxPQURfQ09NUExFVEUQAyIhCgRUeXBlEgsKB0NSRUFURUQQABIMCghBQ0NFUFRFRBABQgsKCV9leGlzdGluZyJaCiFMb2FkUGVyc2lzdGVudEludml0YXRpb25zUmVzcG9uc2USNQoLaW52aXRhdGlvbnMYASADKAsyIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uIoUCCg1OZXR3b3JrU3RhdHVzEjQKBXN3YXJtGAEgASgOMiUuZHhvcy5jbGllbnQuc2VydmljZXMuQ29ubmVjdGlvblN0YXRlEj0KCXNpZ25hbGluZxgCIAMoCzIqLmR4b3MuY2xpZW50LnNlcnZpY2VzLk5ldHdvcmtTdGF0dXMuU2lnbmFsEjcKD2Nvbm5lY3Rpb25faW5mbxgDIAMoCzIeLmR4b3MuZGV2dG9vbHMuc3dhcm0uU3dhcm1JbmZvGkYKBlNpZ25hbBIOCgZzZXJ2ZXIYASABKAkSLAoFc3RhdGUYAiABKA4yHS5keG9zLm1lc2guc2lnbmFsLlNpZ25hbFN0YXRlIksKE1VwZGF0ZUNvbmZpZ1JlcXVlc3QSNAoFc3dhcm0YASABKA4yJS5keG9zLmNsaWVudC5zZXJ2aWNlcy5Db25uZWN0aW9uU3RhdGUqKAoMU3lzdGVtU3RhdHVzEgoKBkFDVElWRRAAEgwKCElOQUNUSVZFEAEqJgoKRGV2aWNlS2luZBILCgdDVVJSRU5UEAASCwoHVFJVU1RFRBABKioKD0Nvbm5lY3Rpb25TdGF0ZRILCgdPRkZMSU5FEAASCgoGT05MSU5FEAEy7wMKDVN5c3RlbVNlcnZpY2USOAoJR2V0Q29uZmlnEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GhMuZHhvcy5jb25maWcuQ29uZmlnEmsKDkdldERpYWdub3N0aWNzEisuZHhvcy5jbGllbnQuc2VydmljZXMuR2V0RGlhZ25vc3RpY3NSZXF1ZXN0GiwuZHhvcy5jbGllbnQuc2VydmljZXMuR2V0RGlhZ25vc3RpY3NSZXNwb25zZRJRCgxVcGRhdGVTdGF0dXMSKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5VcGRhdGVTdGF0dXNSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EmQKC1F1ZXJ5U3RhdHVzEiguZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlTdGF0dXNSZXF1ZXN0GikuZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlTdGF0dXNSZXNwb25zZTABEjcKBVJlc2V0EhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EkUKC0dldFBsYXRmb3JtEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Gh4uZHhvcy5jbGllbnQuc2VydmljZXMuUGxhdGZvcm0y6gMKD0lkZW50aXR5U2VydmljZRJdCg5DcmVhdGVJZGVudGl0eRIrLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNyZWF0ZUlkZW50aXR5UmVxdWVzdBoeLmR4b3MuY2xpZW50LnNlcnZpY2VzLklkZW50aXR5El8KD1JlY292ZXJJZGVudGl0eRIsLmR4b3MuY2xpZW50LnNlcnZpY2VzLlJlY292ZXJJZGVudGl0eVJlcXVlc3QaHi5keG9zLmNsaWVudC5zZXJ2aWNlcy5JZGVudGl0eRJWCg1RdWVyeUlkZW50aXR5EhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GisuZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlJZGVudGl0eVJlc3BvbnNlMAESVwoNVXBkYXRlUHJvZmlsZRImLmR4b3MuaGFsby5jcmVkZW50aWFscy5Qcm9maWxlRG9jdW1lbnQaHi5keG9zLmNsaWVudC5zZXJ2aWNlcy5JZGVudGl0eRJmChBTaWduUHJlc2VudGF0aW9uEi0uZHhvcy5jbGllbnQuc2VydmljZXMuU2lnblByZXNlbnRhdGlvblJlcXVlc3QaIy5keG9zLmhhbG8uY3JlZGVudGlhbHMuUHJlc2VudGF0aW9uMsIBCg5EZXZpY2VzU2VydmljZRJaCgxVcGRhdGVEZXZpY2USLC5keG9zLmhhbG8uY3JlZGVudGlhbHMuRGV2aWNlUHJvZmlsZURvY3VtZW50GhwuZHhvcy5jbGllbnQuc2VydmljZXMuRGV2aWNlElQKDFF1ZXJ5RGV2aWNlcxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRoqLmR4b3MuY2xpZW50LnNlcnZpY2VzLlF1ZXJ5RGV2aWNlc1Jlc3BvbnNlMAEyqQEKD0NvbnRhY3RzU2VydmljZRJICgtHZXRDb250YWN0cxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRohLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNvbnRhY3RCb29rEkwKDVF1ZXJ5Q29udGFjdHMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaIS5keG9zLmNsaWVudC5zZXJ2aWNlcy5Db250YWN0Qm9vazABMvcHCg1TcGFjZXNTZXJ2aWNlEkIKC0NyZWF0ZVNwYWNlEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GhsuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2USTwoLVXBkYXRlU3BhY2USKC5keG9zLmNsaWVudC5zZXJ2aWNlcy5VcGRhdGVTcGFjZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSUgoLUXVlcnlTcGFjZXMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaKS5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeVNwYWNlc1Jlc3BvbnNlMAESWQoQVXBkYXRlTWVtYmVyUm9sZRItLmR4b3MuY2xpZW50LnNlcnZpY2VzLlVwZGF0ZU1lbWJlclJvbGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5ElEKDEFkbWl0Q29udGFjdBIpLmR4b3MuY2xpZW50LnNlcnZpY2VzLkFkbWl0Q29udGFjdFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSZgoOSm9pbkJ5U3BhY2VLZXkSKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5Kb2luQnlTcGFjZUtleVJlcXVlc3QaJy5keG9zLmNsaWVudC5zZXJ2aWNlcy5Kb2luU3BhY2VSZXNwb25zZRJPCgtQb3N0TWVzc2FnZRIoLmR4b3MuY2xpZW50LnNlcnZpY2VzLlBvc3RNZXNzYWdlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJvChFTdWJzY3JpYmVNZXNzYWdlcxIuLmR4b3MuY2xpZW50LnNlcnZpY2VzLlN1YnNjcmliZU1lc3NhZ2VzUmVxdWVzdBooLmR4b3MubWVzaC50ZWxlcG9ydC5nb3NzaXAuR29zc2lwTWVzc2FnZTABElkKEFdyaXRlQ3JlZGVudGlhbHMSLS5keG9zLmNsaWVudC5zZXJ2aWNlcy5Xcml0ZUNyZWRlbnRpYWxzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJmChBRdWVyeUNyZWRlbnRpYWxzEi0uZHhvcy5jbGllbnQuc2VydmljZXMuUXVlcnlDcmVkZW50aWFsc1JlcXVlc3QaIS5keG9zLmhhbG8uY3JlZGVudGlhbHMuQ3JlZGVudGlhbDABEmIKC0NyZWF0ZUVwb2NoEiguZHhvcy5jbGllbnQuc2VydmljZXMuQ3JlYXRlRXBvY2hSZXF1ZXN0GikuZHhvcy5jbGllbnQuc2VydmljZXMuQ3JlYXRlRXBvY2hSZXNwb25zZTLjAwoSSW52aXRhdGlvbnNTZXJ2aWNlElgKEENyZWF0ZUludml0YXRpb24SIC5keG9zLmNsaWVudC5zZXJ2aWNlcy5JbnZpdGF0aW9uGiAuZHhvcy5jbGllbnQuc2VydmljZXMuSW52aXRhdGlvbjABEmUKEEFjY2VwdEludml0YXRpb24SLS5keG9zLmNsaWVudC5zZXJ2aWNlcy5BY2NlcHRJbnZpdGF0aW9uUmVxdWVzdBogLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb24wARJTCgxBdXRoZW50aWNhdGUSKy5keG9zLmNsaWVudC5zZXJ2aWNlcy5BdXRoZW50aWNhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSWQoQQ2FuY2VsSW52aXRhdGlvbhItLmR4b3MuY2xpZW50LnNlcnZpY2VzLkNhbmNlbEludml0YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5ElwKEFF1ZXJ5SW52aXRhdGlvbnMSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaLi5keG9zLmNsaWVudC5zZXJ2aWNlcy5RdWVyeUludml0YXRpb25zUmVzcG9uc2UwATKxAQoOTmV0d29ya1NlcnZpY2USUQoMVXBkYXRlQ29uZmlnEikuZHhvcy5jbGllbnQuc2VydmljZXMuVXBkYXRlQ29uZmlnUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJMCgtRdWVyeVN0YXR1cxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRojLmR4b3MuY2xpZW50LnNlcnZpY2VzLk5ldHdvcmtTdGF0dXMwAWIGcHJvdG8z", [file_google_protobuf_any, file_google_protobuf_empty, file_google_protobuf_struct, file_google_protobuf_timestamp, file_dxos_client_invitation, file_dxos_config, file_dxos_devtools_swarm, file_dxos_echo_metadata, file_dxos_echo_timeframe, file_dxos_error, file_dxos_halo_credentials, file_dxos_keys, file_dxos_mesh_signal, file_dxos_mesh_presence, file_dxos_mesh_teleport_gossip, file_dxos_value]);
45
45
 
46
46
  /**
47
47
  * @generated from message dxos.client.services.UpdateStatusRequest
@@ -557,6 +557,11 @@ export type Space = Message<"dxos.client.services.Space"> & {
557
557
  */
558
558
  error?: Error;
559
559
 
560
+ /**
561
+ * @generated from field: optional dxos.echo.metadata.EdgeReplicationSetting edge_replication = 6;
562
+ */
563
+ edgeReplication?: EdgeReplicationSetting;
564
+
560
565
  /**
561
566
  * @generated from field: repeated dxos.client.services.SpaceMember members = 10;
562
567
  */
@@ -764,6 +769,11 @@ export type UpdateSpaceRequest = Message<"dxos.client.services.UpdateSpaceReques
764
769
  * @generated from field: optional dxos.client.services.SpaceState state = 2;
765
770
  */
766
771
  state?: SpaceState;
772
+
773
+ /**
774
+ * @generated from field: optional dxos.echo.metadata.EdgeReplicationSetting edge_replication = 3;
775
+ */
776
+ edgeReplication?: EdgeReplicationSetting;
767
777
  };
768
778
 
769
779
  /**
@@ -6,8 +6,8 @@
6
6
  // @generated from file dxos/echo/metadata.proto (package dxos.echo.metadata, syntax proto3)
7
7
  /* eslint-disable */
8
8
 
9
- import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1";
10
- import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1";
9
+ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1";
10
+ import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1";
11
11
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
12
12
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
13
13
  import type { Invitation, SpaceState } from "../client/invitation_pb.js";
@@ -26,7 +26,7 @@ import type { Message } from "@bufbuild/protobuf";
26
26
  * Describes the file dxos/echo/metadata.proto.
27
27
  */
28
28
  export const file_dxos_echo_metadata: GenFile = /*@__PURE__*/
29
- fileDesc("ChhkeG9zL2VjaG8vbWV0YWRhdGEucHJvdG8SEmR4b3MuZWNoby5tZXRhZGF0YSKrAgoMRWNob01ldGFkYXRhEg8KB3ZlcnNpb24YASABKAUSKwoHY3JlYXRlZBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoHdXBkYXRlZBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOQoIaWRlbnRpdHkYCiABKAsyIi5keG9zLmVjaG8ubWV0YWRhdGEuSWRlbnRpdHlSZWNvcmRIAIgBARIxCgZzcGFjZXMYCyADKAsyIS5keG9zLmVjaG8ubWV0YWRhdGEuU3BhY2VNZXRhZGF0YRI1CgtpbnZpdGF0aW9ucxgMIAMoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb25CCwoJX2lkZW50aXR5IhQKElNtYWxsU3BhY2VNZXRhZGF0YSKHAQoSTGFyZ2VTcGFjZU1ldGFkYXRhElMKGWNvbnRyb2xfcGlwZWxpbmVfc25hcHNob3QYASABKAsyKy5keG9zLmVjaG8ubWV0YWRhdGEuQ29udHJvbFBpcGVsaW5lU25hcHNob3RIAIgBAUIcChpfY29udHJvbF9waXBlbGluZV9zbmFwc2hvdCJeCgpTcGFjZUNhY2hlEkEKCnByb3BlcnRpZXMYASABKAsyKC5keG9zLmVjaG8ubW9kZWwuZG9jdW1lbnQuT2JqZWN0U25hcHNob3RIAIgBAUINCgtfcHJvcGVydGllcyLjBAoNU3BhY2VNZXRhZGF0YRIhCgNrZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjQKBXN0YXRlGAogASgOMiAuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2VTdGF0ZUgAiAEBEjMKEGdlbmVzaXNfZmVlZF9rZXkYBiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SAGIAQESMwoQY29udHJvbF9mZWVkX2tleRgEIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAogBARInCglmZWVkX2tleXMYAiADKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjAKDWRhdGFfZmVlZF9rZXkYAyABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SAOIAQESRAoRY29udHJvbF90aW1lZnJhbWUYCCABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgEiAEBEkEKDmRhdGFfdGltZWZyYW1lGAUgASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JIBYgBARIyCgVjYWNoZRgJIAEoCzIeLmR4b3MuZWNoby5tZXRhZGF0YS5TcGFjZUNhY2hlSAaIAQFCCAoGX3N0YXRlQhMKEV9nZW5lc2lzX2ZlZWRfa2V5QhMKEV9jb250cm9sX2ZlZWRfa2V5QhAKDl9kYXRhX2ZlZWRfa2V5QhQKEl9jb250cm9sX3RpbWVmcmFtZUIRCg9fZGF0YV90aW1lZnJhbWVCCAoGX2NhY2hlIpECChdDb250cm9sUGlwZWxpbmVTbmFwc2hvdBI3Cgl0aW1lZnJhbWUYASABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvchJMCghtZXNzYWdlcxgCIAMoCzI6LmR4b3MuZWNoby5tZXRhZGF0YS5Db250cm9sUGlwZWxpbmVTbmFwc2hvdC5Db250cm9sTWVzc2FnZRpvCg5Db250cm9sTWVzc2FnZRImCghmZWVkX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSNQoKY3JlZGVudGlhbBgCIAEoCzIhLmR4b3MuaGFsby5jcmVkZW50aWFscy5DcmVkZW50aWFsIrgCCg5JZGVudGl0eVJlY29yZBIqCgxpZGVudGl0eV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EigKCmRldmljZV9rZXkYAiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjUKCmhhbG9fc3BhY2UYAyABKAsyIS5keG9zLmVjaG8ubWV0YWRhdGEuU3BhY2VNZXRhZGF0YRI9Cg1wcm9maWxlX3NwYWNlGAQgASgLMiEuZHhvcy5lY2hvLm1ldGFkYXRhLlNwYWNlTWV0YWRhdGFIAIgBARI8Cgdwcm9maWxlGAUgASgLMiYuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlByb2ZpbGVEb2N1bWVudEgBiAEBQhAKDl9wcm9maWxlX3NwYWNlQgoKCF9wcm9maWxlYgZwcm90bzM", [file_google_protobuf_timestamp, file_dxos_client_invitation, file_dxos_echo_model_document, file_dxos_echo_timeframe, file_dxos_halo_credentials, file_dxos_keys]);
29
+ fileDesc("ChhkeG9zL2VjaG8vbWV0YWRhdGEucHJvdG8SEmR4b3MuZWNoby5tZXRhZGF0YSKrAgoMRWNob01ldGFkYXRhEg8KB3ZlcnNpb24YASABKAUSKwoHY3JlYXRlZBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoHdXBkYXRlZBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOQoIaWRlbnRpdHkYCiABKAsyIi5keG9zLmVjaG8ubWV0YWRhdGEuSWRlbnRpdHlSZWNvcmRIAIgBARIxCgZzcGFjZXMYCyADKAsyIS5keG9zLmVjaG8ubWV0YWRhdGEuU3BhY2VNZXRhZGF0YRI1CgtpbnZpdGF0aW9ucxgMIAMoCzIgLmR4b3MuY2xpZW50LnNlcnZpY2VzLkludml0YXRpb25CCwoJX2lkZW50aXR5IhQKElNtYWxsU3BhY2VNZXRhZGF0YSKHAQoSTGFyZ2VTcGFjZU1ldGFkYXRhElMKGWNvbnRyb2xfcGlwZWxpbmVfc25hcHNob3QYASABKAsyKy5keG9zLmVjaG8ubWV0YWRhdGEuQ29udHJvbFBpcGVsaW5lU25hcHNob3RIAIgBAUIcChpfY29udHJvbF9waXBlbGluZV9zbmFwc2hvdCJeCgpTcGFjZUNhY2hlEkEKCnByb3BlcnRpZXMYASABKAsyKC5keG9zLmVjaG8ubW9kZWwuZG9jdW1lbnQuT2JqZWN0U25hcHNob3RIAIgBAUINCgtfcHJvcGVydGllcyLDBQoNU3BhY2VNZXRhZGF0YRIhCgNrZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjQKBXN0YXRlGAogASgOMiAuZHhvcy5jbGllbnQuc2VydmljZXMuU3BhY2VTdGF0ZUgAiAEBEjMKEGdlbmVzaXNfZmVlZF9rZXkYBiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SAGIAQESMwoQY29udHJvbF9mZWVkX2tleRgEIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXlIAogBARInCglmZWVkX2tleXMYAiADKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjAKDWRhdGFfZmVlZF9rZXkYAyABKAsyFC5keG9zLmtleXMuUHVibGljS2V5SAOIAQESRAoRY29udHJvbF90aW1lZnJhbWUYCCABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvckgEiAEBEkEKDmRhdGFfdGltZWZyYW1lGAUgASgLMiQuZHhvcy5lY2hvLnRpbWVmcmFtZS5UaW1lZnJhbWVWZWN0b3JIBYgBARIyCgVjYWNoZRgJIAEoCzIeLmR4b3MuZWNoby5tZXRhZGF0YS5TcGFjZUNhY2hlSAaIAQESSQoQZWRnZV9yZXBsaWNhdGlvbhgLIAEoDjIqLmR4b3MuZWNoby5tZXRhZGF0YS5FZGdlUmVwbGljYXRpb25TZXR0aW5nSAeIAQFCCAoGX3N0YXRlQhMKEV9nZW5lc2lzX2ZlZWRfa2V5QhMKEV9jb250cm9sX2ZlZWRfa2V5QhAKDl9kYXRhX2ZlZWRfa2V5QhQKEl9jb250cm9sX3RpbWVmcmFtZUIRCg9fZGF0YV90aW1lZnJhbWVCCAoGX2NhY2hlQhMKEV9lZGdlX3JlcGxpY2F0aW9uIpECChdDb250cm9sUGlwZWxpbmVTbmFwc2hvdBI3Cgl0aW1lZnJhbWUYASABKAsyJC5keG9zLmVjaG8udGltZWZyYW1lLlRpbWVmcmFtZVZlY3RvchJMCghtZXNzYWdlcxgCIAMoCzI6LmR4b3MuZWNoby5tZXRhZGF0YS5Db250cm9sUGlwZWxpbmVTbmFwc2hvdC5Db250cm9sTWVzc2FnZRpvCg5Db250cm9sTWVzc2FnZRImCghmZWVkX2tleRgBIAEoCzIULmR4b3Mua2V5cy5QdWJsaWNLZXkSNQoKY3JlZGVudGlhbBgCIAEoCzIhLmR4b3MuaGFsby5jcmVkZW50aWFscy5DcmVkZW50aWFsIrgCCg5JZGVudGl0eVJlY29yZBIqCgxpZGVudGl0eV9rZXkYASABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EigKCmRldmljZV9rZXkYAiABKAsyFC5keG9zLmtleXMuUHVibGljS2V5EjUKCmhhbG9fc3BhY2UYAyABKAsyIS5keG9zLmVjaG8ubWV0YWRhdGEuU3BhY2VNZXRhZGF0YRI9Cg1wcm9maWxlX3NwYWNlGAQgASgLMiEuZHhvcy5lY2hvLm1ldGFkYXRhLlNwYWNlTWV0YWRhdGFIAIgBARI8Cgdwcm9maWxlGAUgASgLMiYuZHhvcy5oYWxvLmNyZWRlbnRpYWxzLlByb2ZpbGVEb2N1bWVudEgBiAEBQhAKDl9wcm9maWxlX3NwYWNlQgoKCF9wcm9maWxlKjMKFkVkZ2VSZXBsaWNhdGlvblNldHRpbmcSDAoIRElTQUJMRUQQABILCgdFTkFCTEVEEAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_dxos_client_invitation, file_dxos_echo_model_document, file_dxos_echo_timeframe, file_dxos_halo_credentials, file_dxos_keys]);
30
30
 
31
31
  /**
32
32
  * / Main metadata record.
@@ -200,6 +200,11 @@ export type SpaceMetadata = Message<"dxos.echo.metadata.SpaceMetadata"> & {
200
200
  * @generated from field: optional dxos.echo.metadata.SpaceCache cache = 9;
201
201
  */
202
202
  cache?: SpaceCache;
203
+
204
+ /**
205
+ * @generated from field: optional dxos.echo.metadata.EdgeReplicationSetting edge_replication = 11;
206
+ */
207
+ edgeReplication?: EdgeReplicationSetting;
203
208
  };
204
209
 
205
210
  /**
@@ -299,3 +304,24 @@ export type IdentityRecord = Message<"dxos.echo.metadata.IdentityRecord"> & {
299
304
  export const IdentityRecordSchema: GenMessage<IdentityRecord> = /*@__PURE__*/
300
305
  messageDesc(file_dxos_echo_metadata, 6);
301
306
 
307
+ /**
308
+ * @generated from enum dxos.echo.metadata.EdgeReplicationSetting
309
+ */
310
+ export enum EdgeReplicationSetting {
311
+ /**
312
+ * @generated from enum value: DISABLED = 0;
313
+ */
314
+ DISABLED = 0,
315
+
316
+ /**
317
+ * @generated from enum value: ENABLED = 1;
318
+ */
319
+ ENABLED = 1,
320
+ }
321
+
322
+ /**
323
+ * Describes the enum dxos.echo.metadata.EdgeReplicationSetting.
324
+ */
325
+ export const EdgeReplicationSettingSchema: GenEnum<EdgeReplicationSetting> = /*@__PURE__*/
326
+ enumDesc(file_dxos_echo_metadata, 0);
327
+
package/src/edge.ts CHANGED
@@ -45,20 +45,97 @@ export type PostNotarizationRequestBody = {
45
45
  credentials: string[];
46
46
  };
47
47
 
48
+ export type JoinSpaceRequest = {
49
+ invitationId: string;
50
+ identityKey: string;
51
+ /**
52
+ * Base64 encoded signed challenge.
53
+ * Used to verify the IdentityKey in case of `invitation.authMethod === Invitation.AuthMethod.KNOWN_PUBLIC_KEY`
54
+ */
55
+ signature?: string;
56
+ };
57
+
58
+ export type JoinSpaceResponseBody = {
59
+ spaceMemberCredential: string;
60
+ spaceGenesisFeedKey: string;
61
+ };
62
+
48
63
  export class EdgeCallFailedError extends Error {
49
64
  public static fromProcessingFailureCause(cause: Error) {
50
- return new EdgeCallFailedError('Error processing request.', undefined, cause);
65
+ return new EdgeCallFailedError({
66
+ reason: 'Error processing request.',
67
+ isRetryable: true,
68
+ cause,
69
+ });
51
70
  }
52
71
 
53
- public static fromFailureResponse(response: { status: number; statusText: string }) {
54
- return new EdgeCallFailedError(`HTTP code ${response.status}: ${response.statusText}.`);
72
+ public static fromHttpFailure(response: Response) {
73
+ return new EdgeCallFailedError({
74
+ reason: `HTTP code ${response.status}: ${response.statusText}.`,
75
+ isRetryable: isRetryableCode(response.status),
76
+ retryAfterMs: getRetryAfterMillis(response),
77
+ });
55
78
  }
56
79
 
80
+ public static fromUnsuccessfulResponse(response: Response, body: EdgeHttpFailure) {
81
+ return new EdgeCallFailedError({
82
+ reason: body.reason,
83
+ errorData: body.errorData,
84
+ isRetryable: body.errorData == null && response.headers.has('Retry-After'),
85
+ retryAfterMs: getRetryAfterMillis(response),
86
+ });
87
+ }
88
+
89
+ readonly reason: string;
90
+ readonly errorData?: EdgeErrorData;
91
+ readonly isRetryable?: boolean;
92
+ readonly retryAfterMs?: number;
93
+
94
+ constructor(args: {
95
+ reason: string;
96
+ isRetryable?: boolean;
97
+ errorData?: EdgeErrorData;
98
+ retryAfterMs?: number;
99
+ cause?: Error;
100
+ }) {
101
+ super(args.reason, { cause: args.cause });
102
+ this.reason = args.reason;
103
+ this.errorData = args.errorData;
104
+ this.retryAfterMs = args.retryAfterMs;
105
+ this.isRetryable = Boolean(args.isRetryable);
106
+ }
107
+ }
108
+
109
+ export class EdgeAuthChallengeError extends EdgeCallFailedError {
57
110
  constructor(
58
- readonly reason: string,
59
- readonly errorData?: EdgeErrorData,
60
- cause?: Error,
111
+ public readonly challenge: string,
112
+ errorData: EdgeErrorData,
61
113
  ) {
62
- super(reason, { cause });
114
+ super({ reason: 'Auth challenge.', errorData });
63
115
  }
64
116
  }
117
+
118
+ export type EdgeAuthChallenge = {
119
+ type: 'auth_challenge';
120
+ challenge: string;
121
+ };
122
+
123
+ const getRetryAfterMillis = (response: Response) => {
124
+ const retryAfter = Number(response.headers.get('Retry-After'));
125
+ return Number.isNaN(retryAfter) ? undefined : retryAfter * 1000;
126
+ };
127
+
128
+ export const createRetryableHttpFailure = (args: { reason: any; retryAfterSeconds: number }) => {
129
+ return new Response(JSON.stringify({ success: false, reason: args.reason }), {
130
+ headers: { 'Retry-After': String(args.retryAfterSeconds) },
131
+ });
132
+ };
133
+
134
+ const isRetryableCode = (status: number) => {
135
+ if (status === 501) {
136
+ // Not Implemented
137
+ return false;
138
+ }
139
+ // TODO: handle 401 Not Authorized
140
+ return !(status >= 400 && status < 500);
141
+ };
package/src/index.ts CHANGED
@@ -9,5 +9,5 @@ export * from './tracing.js';
9
9
  export * from './types.js';
10
10
  export * from './query.js';
11
11
  export * from './profile-archive.js';
12
- export * from './collection-sync.js';
12
+ export * from './automerge.js';
13
13
  export * from './edge.js';
@@ -168,4 +168,7 @@ message Invitation {
168
168
 
169
169
  /// Role of the admitted member, defaults to ADMIN.
170
170
  optional dxos.halo.credentials.SpaceMember.Role role = 18;
171
+
172
+ /// Id of a the space to join (only present if kind is SPACE).
173
+ optional string space_id = 19;
171
174
  }
@@ -219,6 +219,7 @@ message SpaceMember {
219
219
  dxos.halo.credentials.SpaceMember.Role role = 4;
220
220
  }
221
221
 
222
+
222
223
  // TODO(burdon): Rename SpaceInfo?
223
224
  message Space {
224
225
  message Metrics {
@@ -283,6 +284,7 @@ message Space {
283
284
  SpaceState state = 2;
284
285
  optional PipelineState pipeline = 3;
285
286
  optional dxos.error.Error error = 4;
287
+ optional dxos.echo.metadata.EdgeReplicationSetting edge_replication = 6;
286
288
 
287
289
  repeated SpaceMember members = 10;
288
290
  optional dxos.keys.PublicKey creator = 11;
@@ -298,6 +300,8 @@ message UpdateSpaceRequest {
298
300
 
299
301
  /// Allowed values: ACTIVE, INACTIVE.
300
302
  optional SpaceState state = 2;
303
+
304
+ optional dxos.echo.metadata.EdgeReplicationSetting edge_replication = 3;
301
305
  }
302
306
 
303
307
  message QuerySpacesResponse {
@@ -75,6 +75,13 @@ message SpaceMetadata {
75
75
  optional timeframe.TimeframeVector data_timeframe = 5;
76
76
 
77
77
  optional SpaceCache cache = 9;
78
+
79
+ optional EdgeReplicationSetting edge_replication = 11;
80
+ }
81
+
82
+ enum EdgeReplicationSetting {
83
+ DISABLED = 0;
84
+ ENABLED = 1;
78
85
  }
79
86
 
80
87
  message ControlPipelineSnapshot {
@@ -203,6 +203,13 @@ export interface Invitation {
203
203
  * - proto3_optional = true
204
204
  */
205
205
  role?: dxos_halo_credentials.SpaceMember.Role;
206
+ /**
207
+ * Id of a the space to join (only present if kind is SPACE).
208
+ *
209
+ * Options:
210
+ * - proto3_optional = true
211
+ */
212
+ spaceId?: string;
206
213
  }
207
214
  export namespace Invitation {
208
215
  /**
@@ -766,6 +773,11 @@ export interface Space {
766
773
  * - proto3_optional = true
767
774
  */
768
775
  error?: dxos_error.Error;
776
+ /**
777
+ * Options:
778
+ * - proto3_optional = true
779
+ */
780
+ edgeReplication?: dxos_echo_metadata.EdgeReplicationSetting;
769
781
  members?: SpaceMember[];
770
782
  /**
771
783
  * Options:
@@ -935,6 +947,11 @@ export interface UpdateSpaceRequest {
935
947
  * - proto3_optional = true
936
948
  */
937
949
  state?: SpaceState;
950
+ /**
951
+ * Options:
952
+ * - proto3_optional = true
953
+ */
954
+ edgeReplication?: dxos_echo_metadata.EdgeReplicationSetting;
938
955
  }
939
956
  /**
940
957
  * Defined in:
@@ -177,6 +177,19 @@ export interface SpaceMetadata {
177
177
  * - proto3_optional = true
178
178
  */
179
179
  cache?: SpaceCache;
180
+ /**
181
+ * Options:
182
+ * - proto3_optional = true
183
+ */
184
+ edgeReplication?: EdgeReplicationSetting;
185
+ }
186
+ /**
187
+ * Defined in:
188
+ * {@link file://./../../../dxos/echo/metadata.proto}
189
+ */
190
+ export enum EdgeReplicationSetting {
191
+ DISABLED = 0,
192
+ ENABLED = 1
180
193
  }
181
194
  /**
182
195
  * Defined in: