@dxos/client 2.29.2-dev.f64f2a6f → 2.30.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 (208) hide show
  1. package/dist/src/{client → api}/client.d.ts +12 -8
  2. package/dist/src/api/client.d.ts.map +1 -0
  3. package/dist/src/{client → api}/client.js +19 -18
  4. package/dist/src/api/client.js.map +1 -0
  5. package/dist/src/{client → api}/client.test.d.ts +0 -0
  6. package/dist/src/api/client.test.d.ts.map +1 -0
  7. package/dist/src/{client → api}/client.test.js +2 -2
  8. package/dist/src/api/client.test.js.map +1 -0
  9. package/dist/src/{interfaces → api}/errors.d.ts +0 -0
  10. package/dist/src/api/errors.d.ts.map +1 -0
  11. package/dist/src/{interfaces → api}/errors.js +0 -0
  12. package/dist/src/api/errors.js.map +1 -0
  13. package/dist/src/api/index.d.ts +6 -3
  14. package/dist/src/api/index.d.ts.map +1 -1
  15. package/dist/src/api/index.js +4 -3
  16. package/dist/src/api/index.js.map +1 -1
  17. package/dist/src/api/local.test.d.ts +2 -0
  18. package/dist/src/api/local.test.d.ts.map +1 -0
  19. package/dist/src/{client/local-client.test.js → api/local.test.js} +2 -3
  20. package/dist/src/api/local.test.js.map +1 -0
  21. package/dist/src/api/{echo-proxy.d.ts → proxies/echo-proxy.d.ts} +19 -3
  22. package/dist/src/api/proxies/echo-proxy.d.ts.map +1 -0
  23. package/dist/src/api/{echo-proxy.js → proxies/echo-proxy.js} +9 -6
  24. package/dist/src/api/proxies/echo-proxy.js.map +1 -0
  25. package/dist/src/api/{halo-proxy.d.ts → proxies/halo-proxy.d.ts} +39 -11
  26. package/dist/src/api/proxies/halo-proxy.d.ts.map +1 -0
  27. package/dist/src/api/{halo-proxy.js → proxies/halo-proxy.js} +13 -10
  28. package/dist/src/api/{halo-proxy.js.map → proxies/halo-proxy.js.map} +1 -1
  29. package/dist/src/api/proxies/index.d.ts +4 -0
  30. package/dist/src/api/proxies/index.d.ts.map +1 -0
  31. package/dist/src/{client → api/proxies}/index.js +4 -2
  32. package/dist/src/api/proxies/index.js.map +1 -0
  33. package/dist/src/api/{party-proxy.d.ts → proxies/party-proxy.d.ts} +51 -16
  34. package/dist/src/api/proxies/party-proxy.d.ts.map +1 -0
  35. package/dist/src/api/{party-proxy.js → proxies/party-proxy.js} +31 -28
  36. package/dist/src/api/proxies/party-proxy.js.map +1 -0
  37. package/dist/src/api/serializer.d.ts +11 -0
  38. package/dist/src/api/serializer.d.ts.map +1 -0
  39. package/dist/src/{util/partySerializer.js → api/serializer.js} +6 -10
  40. package/dist/src/api/serializer.js.map +1 -0
  41. package/dist/src/devtools/devtools-context.d.ts +6 -6
  42. package/dist/src/devtools/devtools-context.d.ts.map +1 -1
  43. package/dist/src/devtools/index.d.ts +1 -1
  44. package/dist/src/devtools/index.d.ts.map +1 -1
  45. package/dist/src/devtools/index.js +1 -1
  46. package/dist/src/devtools/index.js.map +1 -1
  47. package/dist/src/devtools/keys.d.ts.map +1 -1
  48. package/dist/src/devtools/keys.js.map +1 -1
  49. package/dist/src/index.d.ts +5 -7
  50. package/dist/src/index.d.ts.map +1 -1
  51. package/dist/src/index.js +10 -12
  52. package/dist/src/index.js.map +1 -1
  53. package/dist/src/proto/gen/dxos/client.d.ts +2 -2
  54. package/dist/src/proto/gen/dxos/client.d.ts.map +1 -1
  55. package/dist/src/proto/gen/index.js +1 -1
  56. package/dist/src/{interfaces/client-service-provider.d.ts → services/client-service.d.ts} +3 -3
  57. package/dist/src/services/client-service.d.ts.map +1 -0
  58. package/dist/src/{interfaces/client-service-provider.js → services/client-service.js} +3 -1
  59. package/dist/src/services/client-service.js.map +1 -0
  60. package/dist/src/{client/service-host/services → services/impl}/halo.d.ts +11 -8
  61. package/dist/src/services/impl/halo.d.ts.map +1 -0
  62. package/dist/src/{client/service-host/services → services/impl}/halo.js +34 -47
  63. package/dist/src/services/impl/halo.js.map +1 -0
  64. package/dist/src/services/impl/index.d.ts +3 -0
  65. package/dist/src/services/impl/index.d.ts.map +1 -0
  66. package/dist/src/{client/service-host/services → services/impl}/index.js +0 -0
  67. package/dist/src/services/impl/index.js.map +1 -0
  68. package/dist/src/{client/service-host/services → services/impl}/party.d.ts +8 -5
  69. package/dist/src/services/impl/party.d.ts.map +1 -0
  70. package/dist/src/{client/service-host/services → services/impl}/party.js +5 -2
  71. package/dist/src/services/impl/party.js.map +1 -0
  72. package/dist/src/{client/service-host/services → services/impl}/profile.d.ts +7 -4
  73. package/dist/src/services/impl/profile.d.ts.map +1 -0
  74. package/dist/src/{client/service-host/services → services/impl}/profile.js +4 -1
  75. package/dist/src/services/impl/profile.js.map +1 -0
  76. package/dist/src/services/impl/services.d.ts +4 -0
  77. package/dist/src/services/impl/services.d.ts.map +1 -0
  78. package/dist/src/{client/service-host/services → services/impl}/services.js +2 -2
  79. package/dist/src/services/impl/services.js.map +1 -0
  80. package/dist/src/services/impl/system.d.ts +4 -0
  81. package/dist/src/services/impl/system.d.ts.map +1 -0
  82. package/dist/src/{client/service-host/services → services/impl}/system.js +0 -0
  83. package/dist/src/services/impl/system.js.map +1 -0
  84. package/dist/src/{client/service-host/services/interfaces.d.ts → services/impl/types.d.ts} +12 -3
  85. package/dist/src/services/impl/types.d.ts.map +1 -0
  86. package/dist/src/{client/service-host/services/interfaces.js → services/impl/types.js} +1 -1
  87. package/dist/src/services/impl/types.js.map +1 -0
  88. package/dist/src/services/index.d.ts +5 -0
  89. package/dist/src/services/index.d.ts.map +1 -0
  90. package/dist/src/{client/service-host → services}/index.js +2 -0
  91. package/dist/src/services/index.js.map +1 -0
  92. package/dist/src/{client/service-host → services}/service-host.d.ts +6 -2
  93. package/dist/src/services/service-host.d.ts.map +1 -0
  94. package/dist/src/{client/service-host → services}/service-host.js +14 -7
  95. package/dist/src/services/service-host.js.map +1 -0
  96. package/dist/src/{client → services}/service-proxy.d.ts +1 -1
  97. package/dist/src/services/service-proxy.d.ts.map +1 -0
  98. package/dist/src/{client → services}/service-proxy.js +4 -3
  99. package/dist/src/services/service-proxy.js.map +1 -0
  100. package/dist/src/services/services.test.d.ts +2 -0
  101. package/dist/src/services/services.test.d.ts.map +1 -0
  102. package/dist/src/{client/client-services.test.js → services/services.test.js} +3 -3
  103. package/dist/src/services/services.test.js.map +1 -0
  104. package/dist/src/{client/service-host → services}/storage.d.ts +0 -0
  105. package/dist/src/services/storage.d.ts.map +1 -0
  106. package/dist/src/{client/service-host → services}/storage.js +7 -7
  107. package/dist/src/services/storage.js.map +1 -0
  108. package/dist/src/util/index.d.ts +1 -2
  109. package/dist/src/util/index.d.ts.map +1 -1
  110. package/dist/src/util/index.js +1 -2
  111. package/dist/src/util/index.js.map +1 -1
  112. package/dist/src/util/{createWindowMessagePort.d.ts → messages.d.ts} +1 -1
  113. package/dist/src/util/messages.d.ts.map +1 -0
  114. package/dist/src/util/{createWindowMessagePort.js → messages.js} +8 -6
  115. package/dist/src/util/messages.js.map +1 -0
  116. package/dist/tsconfig.tsbuildinfo +1 -1
  117. package/package.json +29 -31
  118. package/src/{client → api}/client.test.ts +1 -1
  119. package/src/{client → api}/client.ts +22 -15
  120. package/src/{interfaces → api}/errors.ts +0 -0
  121. package/src/api/index.ts +7 -3
  122. package/src/{client/local-client.test.ts → api/local.test.ts} +1 -7
  123. package/src/api/{echo-proxy.ts → proxies/echo-proxy.ts} +28 -10
  124. package/src/api/{halo-proxy.ts → proxies/halo-proxy.ts} +47 -14
  125. package/src/api/proxies/index.ts +7 -0
  126. package/src/api/{party-proxy.ts → proxies/party-proxy.ts} +77 -28
  127. package/src/{util/partySerializer.ts → api/serializer.ts} +6 -10
  128. package/src/devtools/devtools-context.ts +9 -10
  129. package/src/devtools/index.ts +1 -1
  130. package/src/devtools/keys.ts +0 -2
  131. package/src/index.ts +8 -10
  132. package/src/proto/gen/dxos/client.ts +2 -2
  133. package/src/proto/gen/index.ts +1 -1
  134. package/src/{interfaces/client-service-provider.ts → services/client-service.ts} +11 -10
  135. package/src/{client/service-host/services → services/impl}/halo.ts +40 -53
  136. package/src/{client/service-host/services → services/impl}/index.ts +1 -0
  137. package/src/{client/service-host/services → services/impl}/party.ts +11 -6
  138. package/src/{client/service-host/services → services/impl}/profile.ts +19 -6
  139. package/src/{client/service-host/services → services/impl}/services.ts +4 -4
  140. package/src/{client/service-host/services → services/impl}/system.ts +3 -2
  141. package/src/{client/service-host/services/interfaces.ts → services/impl/types.ts} +15 -2
  142. package/src/services/index.ts +9 -0
  143. package/src/{client/service-host → services}/service-host.ts +16 -9
  144. package/src/{client → services}/service-proxy.ts +2 -1
  145. package/src/{client/client-services.test.ts → services/services.test.ts} +1 -1
  146. package/src/{client/service-host → services}/storage.ts +2 -2
  147. package/src/util/index.ts +1 -2
  148. package/src/util/{createWindowMessagePort.ts → messages.ts} +8 -5
  149. package/dist/src/api/echo-proxy.d.ts.map +0 -1
  150. package/dist/src/api/echo-proxy.js.map +0 -1
  151. package/dist/src/api/halo-proxy.d.ts.map +0 -1
  152. package/dist/src/api/party-proxy.d.ts.map +0 -1
  153. package/dist/src/api/party-proxy.js.map +0 -1
  154. package/dist/src/client/client-services.test.d.ts +0 -2
  155. package/dist/src/client/client-services.test.d.ts.map +0 -1
  156. package/dist/src/client/client-services.test.js.map +0 -1
  157. package/dist/src/client/client.d.ts.map +0 -1
  158. package/dist/src/client/client.js.map +0 -1
  159. package/dist/src/client/client.test.d.ts.map +0 -1
  160. package/dist/src/client/client.test.js.map +0 -1
  161. package/dist/src/client/index.d.ts +0 -2
  162. package/dist/src/client/index.d.ts.map +0 -1
  163. package/dist/src/client/index.js.map +0 -1
  164. package/dist/src/client/local-client.test.d.ts +0 -2
  165. package/dist/src/client/local-client.test.d.ts.map +0 -1
  166. package/dist/src/client/local-client.test.js.map +0 -1
  167. package/dist/src/client/service-host/index.d.ts +0 -2
  168. package/dist/src/client/service-host/index.d.ts.map +0 -1
  169. package/dist/src/client/service-host/index.js.map +0 -1
  170. package/dist/src/client/service-host/service-host.d.ts.map +0 -1
  171. package/dist/src/client/service-host/service-host.js.map +0 -1
  172. package/dist/src/client/service-host/services/halo.d.ts.map +0 -1
  173. package/dist/src/client/service-host/services/halo.js.map +0 -1
  174. package/dist/src/client/service-host/services/index.d.ts +0 -2
  175. package/dist/src/client/service-host/services/index.d.ts.map +0 -1
  176. package/dist/src/client/service-host/services/index.js.map +0 -1
  177. package/dist/src/client/service-host/services/interfaces.d.ts.map +0 -1
  178. package/dist/src/client/service-host/services/interfaces.js.map +0 -1
  179. package/dist/src/client/service-host/services/party.d.ts.map +0 -1
  180. package/dist/src/client/service-host/services/party.js.map +0 -1
  181. package/dist/src/client/service-host/services/profile.d.ts.map +0 -1
  182. package/dist/src/client/service-host/services/profile.js.map +0 -1
  183. package/dist/src/client/service-host/services/services.d.ts +0 -4
  184. package/dist/src/client/service-host/services/services.d.ts.map +0 -1
  185. package/dist/src/client/service-host/services/services.js.map +0 -1
  186. package/dist/src/client/service-host/services/system.d.ts +0 -4
  187. package/dist/src/client/service-host/services/system.d.ts.map +0 -1
  188. package/dist/src/client/service-host/services/system.js.map +0 -1
  189. package/dist/src/client/service-host/storage.d.ts.map +0 -1
  190. package/dist/src/client/service-host/storage.js.map +0 -1
  191. package/dist/src/client/service-proxy.d.ts.map +0 -1
  192. package/dist/src/client/service-proxy.js.map +0 -1
  193. package/dist/src/interfaces/client-service-provider.d.ts.map +0 -1
  194. package/dist/src/interfaces/client-service-provider.js.map +0 -1
  195. package/dist/src/interfaces/errors.d.ts.map +0 -1
  196. package/dist/src/interfaces/errors.js.map +0 -1
  197. package/dist/src/interfaces/index.d.ts +0 -3
  198. package/dist/src/interfaces/index.d.ts.map +0 -1
  199. package/dist/src/interfaces/index.js +0 -18
  200. package/dist/src/interfaces/index.js.map +0 -1
  201. package/dist/src/util/createWindowMessagePort.d.ts.map +0 -1
  202. package/dist/src/util/createWindowMessagePort.js.map +0 -1
  203. package/dist/src/util/partySerializer.d.ts +0 -9
  204. package/dist/src/util/partySerializer.d.ts.map +0 -1
  205. package/dist/src/util/partySerializer.js.map +0 -1
  206. package/src/client/index.ts +0 -5
  207. package/src/client/service-host/index.ts +0 -5
  208. package/src/interfaces/index.ts +0 -6
@@ -6,6 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.schema = exports.schemaJson = void 0;
7
7
  const codec_protobuf_1 = require("@dxos/codec-protobuf");
8
8
  const substitutions_1 = __importDefault(require("../substitutions"));
9
- exports.schemaJson = JSON.parse("{\"nested\":{\"dxos\":{\"nested\":{\"client\":{\"nested\":{\"AddKeyRecordRequest\":{\"fields\":{\"keyRecord\":{\"type\":\"KeyRecord\",\"id\":1,\"comment\":null}},\"comment\":null},\"AuthenticateInvitationRequest\":{\"fields\":{\"processId\":{\"type\":\"string\",\"id\":1,\"comment\":\"Id from corresponding RedeemedInvitation.\"},\"secret\":{\"type\":\"bytes\",\"id\":2,\"comment\":null}},\"comment\":null},\"Contact\":{\"fields\":{\"publicKey\":{\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"displayName\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"Contacts\":{\"fields\":{\"contacts\":{\"rule\":\"repeated\",\"type\":\"Contact\",\"id\":1,\"comment\":null}},\"comment\":null},\"CreateInvitationRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"inviteeKey\":{\"type\":\"dxos.halo.keys.PubKey\",\"id\":2,\"comment\":\"When specified the invitation will be of OFFLINE type, not requiring secret exchange.\"}},\"comment\":null},\"CreateProfileRequest\":{\"fields\":{\"username\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"publicKey\":{\"type\":\"bytes\",\"id\":2,\"comment\":null},\"secretKey\":{\"type\":\"bytes\",\"id\":3,\"comment\":null}},\"comment\":null},\"CreateSnaspotRequest\":{\"fields\":{\"partyKey\":{\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetPreferenceRequest\":{\"fields\":{\"key\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetPreferenceResponse\":{\"fields\":{\"value\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"HaloService\":{\"methods\":{\"SubscribeContacts\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Contacts\",\"responseStream\":true,\"comment\":null},\"AddKeyRecord\":{\"requestType\":\"AddKeyRecordRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"Sign\":{\"requestType\":\"SignRequest\",\"responseType\":\"SignResponse\",\"comment\":null},\"SetGlobalPreference\":{\"requestType\":\"SetPreferenceRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"GetGlobalPreference\":{\"requestType\":\"GetPreferenceRequest\",\"responseType\":\"GetPreferenceResponse\",\"comment\":null},\"SetDevicePreference\":{\"requestType\":\"SetPreferenceRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"GetDevicePreference\":{\"requestType\":\"GetPreferenceRequest\",\"responseType\":\"GetPreferenceResponse\",\"comment\":null}},\"comment\":null},\"InvitationRequest\":{\"fields\":{\"descriptor\":{\"type\":\"InvitationDescriptor\",\"id\":1,\"comment\":null},\"state\":{\"type\":\"InvitationState\",\"id\":2,\"comment\":null},\"error\":{\"type\":\"string\",\"id\":3,\"comment\":\"Only if state == ERROR.\"}},\"comment\":\"Invitation process created by sender.\"},\"InvitationState\":{\"values\":{\"WAITING_FOR_CONNECTION\":1,\"CONNECTED\":2,\"SUCCESS\":3,\"ERROR\":4},\"comment\":null,\"comments\":{\"WAITING_FOR_CONNECTION\":null,\"CONNECTED\":null,\"SUCCESS\":null,\"ERROR\":null}},\"Party\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"isOpen\":{\"rule\":\"required\",\"type\":\"bool\",\"id\":2,\"comment\":null},\"isActive\":{\"rule\":\"required\",\"type\":\"bool\",\"id\":3,\"comment\":null},\"members\":{\"rule\":\"repeated\",\"type\":\"Member\",\"id\":4,\"comment\":null}},\"nested\":{\"Member\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"displayName\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null}},\"comment\":null},\"PartyActivationOptions\":{\"fields\":{\"global\":{\"type\":\"bool\",\"id\":1,\"comment\":null},\"device\":{\"type\":\"bool\",\"id\":2,\"comment\":null}},\"comment\":null},\"PartyService\":{\"methods\":{\"SubscribeToParty\":{\"requestType\":\"SubscribePartyRequest\",\"responseType\":\"SubscribePartyResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeParties\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribePartiesResponse\",\"responseStream\":true,\"comment\":null},\"CreateParty\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Party\",\"comment\":null},\"CloneParty\":{\"requestType\":\"PartySnapshot\",\"responseType\":\"Party\",\"comment\":null},\"SetPartyState\":{\"requestType\":\"SetPartyStateRequest\",\"responseType\":\"Party\",\"comment\":\"Open and close or activate and deactivate a party.\"},\"CreateInvitation\":{\"requestType\":\"CreateInvitationRequest\",\"responseType\":\"InvitationRequest\",\"responseStream\":true,\"comment\":null},\"AcceptInvitation\":{\"requestType\":\"InvitationDescriptor\",\"responseType\":\"RedeemedInvitation\",\"responseStream\":true,\"comment\":null},\"AuthenticateInvitation\":{\"requestType\":\"AuthenticateInvitationRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"SubscribeMembers\":{\"requestType\":\"SubscribeMembersRequest\",\"responseType\":\"SubscribeMembersResponse\",\"responseStream\":true,\"comment\":null},\"CreateSnapshot\":{\"requestType\":\"CreateSnaspotRequest\",\"responseType\":\"PartySnapshot\",\"comment\":null}},\"comment\":null},\"Profile\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"username\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"ProfileService\":{\"methods\":{\"SubscribeProfile\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribeProfileResponse\",\"responseStream\":true,\"comment\":null},\"CreateProfile\":{\"requestType\":\"CreateProfileRequest\",\"responseType\":\"Profile\",\"comment\":null},\"RecoverProfile\":{\"requestType\":\"RecoverProfileRequest\",\"responseType\":\"Profile\",\"comment\":null},\"CreateInvitation\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"InvitationRequest\",\"responseStream\":true,\"comment\":null},\"AcceptInvitation\":{\"requestType\":\"InvitationDescriptor\",\"responseType\":\"RedeemedInvitation\",\"responseStream\":true,\"comment\":null},\"AuthenticateInvitation\":{\"requestType\":\"AuthenticateInvitationRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null}},\"comment\":null},\"RecoverProfileRequest\":{\"fields\":{\"seedPhrase\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"RedeemedInvitation\":{\"fields\":{\"id\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"state\":{\"type\":\"InvitationState\",\"id\":2,\"comment\":null},\"error\":{\"type\":\"string\",\"id\":3,\"comment\":\"Only if state == ERROR.\"},\"partyKey\":{\"type\":\"dxos.halo.keys.PubKey\",\"id\":4,\"comment\":\"Only on party invitations that are finished.\"}},\"comment\":\"Invitation that is being redeemed.\"},\"SetPartyStateRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"open\":{\"type\":\"bool\",\"id\":2,\"comment\":null},\"activeGlobal\":{\"type\":\"bool\",\"id\":3,\"comment\":null},\"activeDevice\":{\"type\":\"bool\",\"id\":4,\"comment\":null}},\"comment\":null},\"SetPreferenceRequest\":{\"fields\":{\"key\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"value\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"SignRequest\":{\"fields\":{\"publicKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":\"- The public key of the key that is supposed to be used for signing.\"},\"payload\":{\"type\":\"bytes\",\"id\":2,\"comment\":null}},\"comment\":null},\"SignResponse\":{\"fields\":{\"signed\":{\"type\":\"bytes\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeMembersRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeMembersResponse\":{\"fields\":{\"members\":{\"rule\":\"repeated\",\"type\":\"PartyMember\",\"id\":1,\"comment\":null}},\"nested\":{\"PartyMember\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"displayName\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribePartiesResponse\":{\"fields\":{\"parties\":{\"rule\":\"repeated\",\"type\":\"Party\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribePartyRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribePartyResponse\":{\"fields\":{\"party\":{\"type\":\"Party\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeProfileResponse\":{\"fields\":{\"profile\":{\"type\":\"Profile\",\"id\":1,\"comment\":null}},\"comment\":null},\"SystemService\":{\"methods\":{\"GetConfig\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Config\",\"comment\":null},\"Reset\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null}},\"comment\":null}}},\"config\":{\"nested\":{\"Build\":{\"fields\":{\"command\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"out\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"Config\":{\"fields\":{\"version\":{\"type\":\"int32\",\"id\":1,\"comment\":null},\"module\":{\"type\":\"Module\",\"id\":2,\"comment\":null},\"build\":{\"type\":\"Build\",\"id\":3,\"comment\":null},\"runtime\":{\"type\":\"Runtime\",\"id\":4,\"comment\":null}},\"comment\":null},\"Module\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"type\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"version\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"author\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"license\":{\"type\":\"string\",\"id\":5,\"comment\":null},\"description\":{\"type\":\"string\",\"id\":6,\"comment\":null},\"repository\":{\"type\":\"string\",\"id\":7,\"comment\":null},\"repositoryVersion\":{\"type\":\"string\",\"id\":8,\"comment\":null},\"keywords\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":9,\"comment\":null},\"displayName\":{\"type\":\"string\",\"id\":10,\"comment\":null},\"npmUrl\":{\"type\":\"string\",\"id\":11,\"comment\":null},\"build\":{\"type\":\"Build\",\"id\":101,\"comment\":null},\"record\":{\"type\":\"Record\",\"id\":102,\"comment\":null}},\"nested\":{\"Build\":{\"fields\":{\"version\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"commitHash\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"timestamp\":{\"type\":\"google.protobuf.Timestamp\",\"id\":3,\"comment\":null}},\"comment\":null},\"Record\":{\"fields\":{\"app\":{\"type\":\"App\",\"id\":1,\"comment\":null}},\"nested\":{\"App\":{\"fields\":{\"contentType\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null}},\"comment\":null}},\"comment\":null},\"Runtime\":{\"fields\":{\"client\":{\"type\":\"Client\",\"id\":1,\"comment\":null},\"app\":{\"type\":\"App\",\"id\":2,\"comment\":null},\"cli\":{\"type\":\"CLI\",\"id\":3,\"comment\":null},\"props\":{\"type\":\"Props\",\"id\":4,\"comment\":null},\"services\":{\"type\":\"Services\",\"id\":5,\"comment\":null},\"system\":{\"type\":\"System\",\"id\":6,\"comment\":null}},\"nested\":{\"App\":{\"fields\":{\"org\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"theme\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"website\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"publicUrl\":{\"type\":\"string\",\"id\":4,\"options\":{\"(env)\":\"PUBLIC_URL\"},\"comment\":null}},\"comment\":null},\"CLI\":{\"fields\":{\"nodePath\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"app\":{\"type\":\"AppServe\",\"id\":2,\"comment\":null},\"console\":{\"type\":\"Package\",\"id\":3,\"comment\":null},\"mdns\":{\"type\":\"Package\",\"id\":4,\"comment\":null},\"signal\":{\"type\":\"Package\",\"id\":5,\"comment\":null},\"npmClient\":{\"type\":\"string\",\"id\":6,\"comment\":null},\"channel\":{\"type\":\"string\",\"id\":7,\"comment\":null}},\"nested\":{\"AppServe\":{\"fields\":{\"serve\":{\"type\":\"Serve\",\"id\":1,\"comment\":null}},\"nested\":{\"Serve\":{\"fields\":{\"config\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"loginApp\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"keyPhrase\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":null},\"Package\":{\"fields\":{\"package\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"channel\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"bin\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"config\":{\"type\":\"string\",\"id\":4,\"comment\":null}},\"comment\":null}},\"comment\":null},\"Client\":{\"fields\":{\"debug\":{\"type\":\"string\",\"id\":1,\"options\":{\"(env)\":\"DEBUG\"},\"comment\":null},\"storage\":{\"type\":\"Storage\",\"id\":2,\"comment\":null},\"enableSnapshots\":{\"type\":\"bool\",\"id\":3,\"comment\":null},\"snapshotInterval\":{\"type\":\"int32\",\"id\":4,\"comment\":\"Milliseconds\"},\"invitationExpiration\":{\"type\":\"int32\",\"id\":5,\"comment\":\"Milliseconds\"},\"mode\":{\"type\":\"Mode\",\"id\":6,\"comment\":null}},\"nested\":{\"Mode\":{\"values\":{\"AUTOMATIC\":0,\"LOCAL\":1,\"REMOTE\":2},\"comment\":\"Whether the client services are local with ClientServiceHost or remote and need to be accessed via ClientServiceProxy. Defaults to AUTOMATIC.\",\"comments\":{\"AUTOMATIC\":\"Connects to the browser wallet if avialable, otherwise runs services in the local mode.\",\"LOCAL\":\"Run services in the local mode.\",\"REMOTE\":\"Connect to the browser wallet or to the remote services through the RPC port.\"}},\"Storage\":{\"fields\":{\"persistent\":{\"type\":\"bool\",\"id\":1,\"comment\":null},\"storageType\":{\"type\":\"StorageDriver\",\"id\":2,\"comment\":null},\"keyStorage\":{\"type\":\"StorageDriver\",\"id\":3,\"comment\":null},\"path\":{\"type\":\"string\",\"id\":4,\"comment\":null}},\"nested\":{\"StorageDriver\":{\"values\":{\"RAM\":0,\"IDB\":1,\"CHROME\":2,\"FIREFOX\":3,\"NODE\":4,\"LEVELJS\":11,\"JSONDOWN\":12},\"comment\":null,\"comments\":{\"RAM\":null,\"IDB\":null,\"CHROME\":null,\"FIREFOX\":null,\"NODE\":null,\"LEVELJS\":null,\"JSONDOWN\":null}}},\"comment\":null}},\"comment\":null},\"Props\":{\"fields\":{\"title\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"Services\":{\"fields\":{\"kube\":{\"type\":\"Kube\",\"id\":1,\"comment\":null},\"app\":{\"type\":\"AppServer\",\"id\":2,\"comment\":null},\"dxns\":{\"type\":\"Dxns\",\"id\":3,\"comment\":null},\"ipfs\":{\"type\":\"Ipfs\",\"id\":4,\"comment\":null},\"signal\":{\"type\":\"Signal\",\"id\":5,\"comment\":null},\"ice\":{\"rule\":\"repeated\",\"type\":\"Ice\",\"id\":6,\"comment\":null},\"machine\":{\"type\":\"Machine\",\"id\":7,\"comment\":null},\"bot\":{\"type\":\"BotFactory\",\"id\":8,\"comment\":null}},\"nested\":{\"AppServer\":{\"fields\":{\"prefix\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"server\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"BotFactory\":{\"fields\":{\"topic\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"persistent\":{\"type\":\"bool\",\"id\":2,\"comment\":null},\"retryAttempts\":{\"type\":\"int32\",\"id\":3,\"comment\":null},\"retryInterval\":{\"type\":\"int32\",\"id\":4,\"comment\":null}},\"comment\":null},\"Dxns\":{\"fields\":{\"server\":{\"type\":\"string\",\"id\":1,\"comment\":\"DXNS endpoint.\"},\"accountUri\":{\"type\":\"string\",\"id\":2,\"comment\":\"Substrate account URI. This is a secret.\\nKUBEs do not serve this with the config but we store it in profile.yml.\\n\\nTODO(dmaretskyi): Deprecate this and move it to keyring.\"},\"address\":{\"type\":\"string\",\"id\":3,\"comment\":\"Public Polkadot Address.\"},\"account\":{\"type\":\"string\",\"id\":4,\"comment\":\"Public address of a DXNS Account.\"},\"faucet\":{\"type\":\"string\",\"id\":5,\"comment\":null}},\"comment\":null},\"Ice\":{\"fields\":{\"urls\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"username\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"credential\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null},\"Ipfs\":{\"fields\":{\"server\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"gateway\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"Kube\":{\"fields\":{\"endpoints\":{\"type\":\"Endpoints\",\"id\":1,\"comment\":null},\"publicUrl\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"nested\":{\"Endpoints\":{\"fields\":{\"logs\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"services\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"cert\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":null},\"Machine\":{\"fields\":{\"doAccessToken\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"githubAccessToken\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"githubUsername\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"dnsDomain\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"npmAccessToken\":{\"type\":\"string\",\"id\":5,\"comment\":null}},\"comment\":null},\"Signal\":{\"fields\":{\"server\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"api\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"status\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":null},\"System\":{\"fields\":{\"debug\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null}},\"comment\":null}}},\"credentials\":{\"nested\":{\"Message\":{\"fields\":{\"payload\":{\"rule\":\"required\",\"type\":\"google.protobuf.Any\",\"id\":1,\"comment\":null}},\"comment\":null},\"SignedMessage\":{\"fields\":{\"signed\":{\"rule\":\"required\",\"type\":\"Signed\",\"id\":1,\"comment\":null},\"signatures\":{\"rule\":\"repeated\",\"type\":\"Signature\",\"id\":2,\"comment\":null}},\"nested\":{\"Signature\":{\"fields\":{\"key\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"signature\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":2,\"comment\":null},\"keyChain\":{\"type\":\"KeyChain\",\"id\":3,\"comment\":null}},\"comment\":null},\"Signed\":{\"fields\":{\"created\":{\"rule\":\"required\",\"type\":\"string\",\"id\":1,\"comment\":null},\"nonce\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":2,\"comment\":null},\"payload\":{\"rule\":\"required\",\"type\":\"google.protobuf.Any\",\"id\":10,\"comment\":null}},\"comment\":null}},\"comment\":\"A generic container message used whenever messages are signed (e.g. PartyCredential)\"}}},\"devtools\":{\"nested\":{\"ClearSnapshotsRequest\":{\"fields\":{},\"comment\":null},\"DevtoolsHost\":{\"methods\":{\"Events\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Event\",\"responseStream\":true,\"comment\":null},\"GetConfig\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"GetConfigResponse\",\"comment\":null},\"ResetStorage\":{\"requestType\":\"ResetStorageRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"EnableDebugLogging\":{\"requestType\":\"EnableDebugLoggingRequest\",\"responseType\":\"EnableDebugLoggingResponse\",\"comment\":null},\"DisableDebugLogging\":{\"requestType\":\"EnableDebugLoggingRequest\",\"responseType\":\"EnableDebugLoggingResponse\",\"comment\":null},\"SubscribeToKeyringKeys\":{\"requestType\":\"SubscribeToKeyringKeysRequest\",\"responseType\":\"SubscribeToKeyringKeysResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToCredentialMessages\":{\"requestType\":\"SubscribeToCredentialMessagesRequest\",\"responseType\":\"SubscribeToCredentialMessagesResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToParties\":{\"requestType\":\"SubscribeToPartiesRequest\",\"responseType\":\"SubscribeToPartiesResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToItems\":{\"requestType\":\"SubscribeToItemsRequest\",\"responseType\":\"SubscribeToItemsResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToFeeds\":{\"requestType\":\"SubscribeToFeedsRequest\",\"responseType\":\"SubscribeToFeedsResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToFeed\":{\"requestType\":\"SubscribeToFeedRequest\",\"responseType\":\"SubscribeToFeedResponse\",\"responseStream\":true,\"comment\":null},\"GetPartySnapshot\":{\"requestType\":\"GetPartySnapshotRequest\",\"responseType\":\"GetPartySnapshotResponse\",\"comment\":null},\"SavePartySnapshot\":{\"requestType\":\"SavePartySnapshotRequest\",\"responseType\":\"SavePartySnapshotResponse\",\"comment\":null},\"ClearSnapshots\":{\"requestType\":\"ClearSnapshotsRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"GetNetworkPeers\":{\"requestType\":\"GetNetworkPeersRequest\",\"responseType\":\"GetNetworkPeersResponse\",\"comment\":null},\"SubscribeToNetworkTopics\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribeToNetworkTopicsResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToSignalStatus\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribeToSignalStatusResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToSignalTrace\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribeToSignalTraceResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToSwarmInfo\":{\"requestType\":\"SubscribeToSwarmInfoRequest\",\"responseType\":\"SubscribeToSwarmInfoResponse\",\"responseStream\":true,\"comment\":null}},\"comment\":null},\"DisableDebugLoggingRequest\":{\"fields\":{\"namespaces\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"DisableDebugLoggingResponse\":{\"fields\":{\"enabledNamespaces\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"EnableDebugLoggingRequest\":{\"fields\":{\"namespaces\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"EnableDebugLoggingResponse\":{\"fields\":{\"enabledNamespaces\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"Event\":{\"oneofs\":{\"payload\":{\"oneof\":[\"ready\"],\"comment\":null}},\"fields\":{\"ready\":{\"type\":\"ReadyEvent\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetConfigResponse\":{\"fields\":{\"config\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetNetworkPeersRequest\":{\"fields\":{\"topic\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetNetworkPeersResponse\":{\"fields\":{\"peers\":{\"rule\":\"repeated\",\"type\":\"PeerInfo\",\"id\":1,\"comment\":null}},\"nested\":{\"PeerInfo\":{\"fields\":{\"id\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"state\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"connections\":{\"rule\":\"repeated\",\"type\":\"bytes\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":null},\"GetPartySnapshotRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetPartySnapshotResponse\":{\"fields\":{\"snapshot\":{\"type\":\"PartySnapshot\",\"id\":1,\"comment\":null}},\"comment\":null},\"ReadyEvent\":{\"fields\":{},\"comment\":null},\"ResetStorageRequest\":{\"fields\":{},\"comment\":null},\"SavePartySnapshotRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SavePartySnapshotResponse\":{\"fields\":{\"snapshot\":{\"type\":\"PartySnapshot\",\"id\":1,\"comment\":null}},\"comment\":null},\"SetTracingOptionsRequest\":{\"fields\":{\"enable\":{\"type\":\"bool\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToCredentialMessagesRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToCredentialMessagesResponse\":{\"fields\":{\"messages\":{\"rule\":\"repeated\",\"type\":\"SignedMessage\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToFeedRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"feedKey\":{\"type\":\"PubKey\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeToFeedResponse\":{\"fields\":{\"blocks\":{\"rule\":\"repeated\",\"type\":\"EchoFeedBlock\",\"id\":1,\"comment\":null}},\"nested\":{\"EchoFeedBlock\":{\"fields\":{\"key\":{\"type\":\"bytes\",\"id\":1,\"comment\":null},\"seq\":{\"type\":\"int32\",\"id\":2,\"comment\":null},\"sync\":{\"type\":\"bool\",\"id\":3,\"comment\":null},\"path\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"data\":{\"type\":\"FeedMessage\",\"id\":5,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToFeedsRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToFeedsResponse\":{\"fields\":{\"parties\":{\"rule\":\"repeated\",\"type\":\"Party\",\"id\":1,\"comment\":null}},\"nested\":{\"Party\":{\"fields\":{\"key\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"feeds\":{\"rule\":\"repeated\",\"type\":\"PubKey\",\"id\":2,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToItemsRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToItemsResponse\":{\"fields\":{\"data\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToKeyringKeysRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToKeyringKeysResponse\":{\"fields\":{\"keys\":{\"rule\":\"repeated\",\"type\":\"KeyRecord\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToNetworkTopicsResponse\":{\"fields\":{\"topics\":{\"rule\":\"repeated\",\"type\":\"Topic\",\"id\":1,\"comment\":null}},\"nested\":{\"Topic\":{\"fields\":{\"topic\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"label\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToPartiesRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToPartiesResponse\":{\"fields\":{\"parties\":{\"rule\":\"repeated\",\"type\":\"PartyInfo\",\"id\":1,\"comment\":null}},\"nested\":{\"PartyInfo\":{\"fields\":{\"key\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"isOpen\":{\"type\":\"bool\",\"id\":2,\"comment\":null},\"isActive\":{\"type\":\"bool\",\"id\":3,\"comment\":null},\"feedKeys\":{\"type\":\"int32\",\"id\":4,\"comment\":null},\"properties\":{\"keyType\":\"string\",\"type\":\"string\",\"id\":5,\"comment\":null},\"timeframe\":{\"type\":\"TimeframeVector\",\"id\":10,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToSignalStatusResponse\":{\"fields\":{\"servers\":{\"rule\":\"repeated\",\"type\":\"SignalServer\",\"id\":1,\"comment\":null}},\"nested\":{\"SignalServer\":{\"fields\":{\"host\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"state\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"error\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"reconnectIn\":{\"type\":\"int32\",\"id\":4,\"comment\":null},\"connectionStarted\":{\"type\":\"int32\",\"id\":5,\"comment\":null},\"lastStateChange\":{\"type\":\"int32\",\"id\":6,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToSignalTraceResponse\":{\"fields\":{\"events\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToSwarmInfoRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToSwarmInfoResponse\":{\"fields\":{\"data\":{\"rule\":\"repeated\",\"type\":\"SwarmInfo\",\"id\":1,\"comment\":null}},\"nested\":{\"SwarmInfo\":{\"fields\":{\"id\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"topic\":{\"type\":\"PubKey\",\"id\":2,\"comment\":null},\"label\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"isActive\":{\"type\":\"bool\",\"id\":4,\"comment\":null},\"connections\":{\"rule\":\"repeated\",\"type\":\"ConnectionInfo\",\"id\":5,\"comment\":null}},\"nested\":{\"ConnectionInfo\":{\"fields\":{\"state\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"sessionId\":{\"type\":\"PubKey\",\"id\":2,\"comment\":null},\"remotePeerId\":{\"type\":\"PubKey\",\"id\":3,\"comment\":null},\"transport\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"protocolExtensions\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":5,\"comment\":null},\"events\":{\"rule\":\"repeated\",\"type\":\"Json\",\"id\":6,\"comment\":null}},\"nested\":{\"Json\":{\"fields\":{\"data\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null}},\"comment\":null}},\"comment\":null}},\"comment\":null},\"TracingService\":{\"methods\":{\"SetTracingOptions\":{\"requestType\":\"SetTracingOptionsRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"SubscribeToRpcTrace\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"RpcMessage\",\"responseStream\":true,\"comment\":null}},\"comment\":null}}},\"echo\":{\"nested\":{\"feed\":{\"nested\":{\"CredentialsMessage\":{\"fields\":{\"data\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":\"A container for dxos.credentials.Message\"},\"EchoEnvelope\":{\"fields\":{\"itemId\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"timeframe\":{\"type\":\"TimeframeVector\",\"id\":2,\"comment\":null},\"genesis\":{\"type\":\"ItemGenesis\",\"id\":10,\"comment\":null},\"itemMutation\":{\"type\":\"ItemMutation\",\"id\":11,\"comment\":null},\"mutation\":{\"type\":\"bytes\",\"id\":12,\"comment\":null},\"snapshot\":{\"type\":\"ModelSnapshot\",\"id\":13,\"comment\":\"Set the model to the provided snapshot.\"}},\"comment\":\"Wrapper for all ECHO messages.\"},\"FeedMessage\":{\"fields\":{\"halo\":{\"type\":\"CredentialsMessage\",\"id\":1,\"comment\":null},\"echo\":{\"type\":\"EchoEnvelope\",\"id\":2,\"comment\":null}},\"comment\":\"Outer message type decoded by Codec.\\nThis is what is written to the feeds.\"},\"ItemGenesis\":{\"fields\":{\"itemType\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"modelType\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"modelVersion\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"link\":{\"type\":\"LinkData\",\"id\":4,\"comment\":null}},\"comment\":null},\"ItemMutation\":{\"fields\":{\"parentId\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"action\":{\"type\":\"Action\",\"id\":2,\"comment\":null}},\"nested\":{\"Action\":{\"values\":{\"NOOP\":0,\"DELETE\":1,\"RESTORE\":2},\"comment\":null,\"comments\":{\"NOOP\":null,\"DELETE\":null,\"RESTORE\":null}}},\"comment\":\"Item mutation.\"},\"LinkData\":{\"fields\":{\"source\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"target\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"TimeframeVector\":{\"fields\":{\"frames\":{\"rule\":\"repeated\",\"type\":\"Frame\",\"id\":1,\"comment\":null}},\"nested\":{\"Frame\":{\"fields\":{\"feedKey\":{\"type\":\"bytes\",\"id\":1,\"comment\":null},\"seq\":{\"type\":\"int32\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":\"Vector timestamp used to order messages.\"}}},\"invitation\":{\"nested\":{\"InvitationDescriptor\":{\"fields\":{\"type\":{\"type\":\"Type\",\"id\":1,\"comment\":null},\"swarmKey\":{\"type\":\"bytes\",\"id\":2,\"comment\":null},\"invitation\":{\"type\":\"bytes\",\"id\":3,\"comment\":null},\"identityKey\":{\"type\":\"bytes\",\"id\":4,\"comment\":\"Only present if type == OFFLINE.\"},\"secret\":{\"type\":\"bytes\",\"id\":5,\"comment\":\"Must be stripped out when passing to another peer.\"}},\"nested\":{\"Type\":{\"values\":{\"INTERACTIVE\":1,\"OFFLINE\":2},\"comment\":\"Defines an invitation type.\",\"comments\":{\"INTERACTIVE\":\"Interactive invitation is when both peers are online at the same time.\",\"OFFLINE\":\"Offline is when only a single peer needs to be online at the time.\"}}},\"comment\":null}}},\"service\":{\"nested\":{\"DataService\":{\"methods\":{\"SubscribeEntitySet\":{\"requestType\":\"SubscribeEntitySetRequest\",\"responseType\":\"SubscribeEntitySetResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeEntityStream\":{\"requestType\":\"SubscribeEntityStreamRequest\",\"responseType\":\"SubscribeEntityStreamResponse\",\"responseStream\":true,\"comment\":null},\"Write\":{\"requestType\":\"WriteRequest\",\"responseType\":\"MutationReceipt\",\"comment\":null}},\"comment\":null},\"MutationReceipt\":{\"fields\":{\"feedKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"seq\":{\"type\":\"int32\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeEntitySetRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeEntitySetResponse\":{\"fields\":{\"added\":{\"rule\":\"repeated\",\"type\":\"EchoEnvelope\",\"id\":1,\"comment\":null},\"deleted\":{\"rule\":\"repeated\",\"type\":\"EchoEnvelope\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeEntityStreamRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"itemId\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeEntityStreamResponse\":{\"oneofs\":{\"kind\":{\"oneof\":[\"snapshot\",\"mutation\"],\"comment\":null}},\"fields\":{\"snapshot\":{\"type\":\"ItemSnapshot\",\"id\":1,\"comment\":null},\"mutation\":{\"type\":\"Mutation\",\"id\":2,\"comment\":null}},\"nested\":{\"Mutation\":{\"fields\":{\"data\":{\"type\":\"EchoEnvelope\",\"id\":1,\"comment\":null},\"meta\":{\"type\":\"Metadata\",\"id\":2,\"comment\":null}},\"nested\":{\"Metadata\":{\"fields\":{\"feedKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"memberKey\":{\"type\":\"PubKey\",\"id\":2,\"comment\":null},\"seq\":{\"type\":\"int32\",\"id\":3,\"comment\":null},\"timeframe\":{\"type\":\"TimeframeVector\",\"id\":4,\"comment\":null}},\"comment\":null}},\"comment\":null}},\"comment\":null},\"WriteRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"mutation\":{\"type\":\"EchoEnvelope\",\"id\":2,\"comment\":null}},\"comment\":null}}},\"snapshot\":{\"nested\":{\"DatabaseSnapshot\":{\"fields\":{\"items\":{\"rule\":\"repeated\",\"type\":\"ItemSnapshot\",\"id\":1,\"comment\":null},\"links\":{\"rule\":\"repeated\",\"type\":\"LinkSnapshot\",\"id\":2,\"comment\":null}},\"comment\":null},\"HaloStateSnapshot\":{\"fields\":{\"messages\":{\"rule\":\"repeated\",\"type\":\"dxos.CredentialsMessage\",\"id\":1,\"comment\":null}},\"comment\":null},\"ItemSnapshot\":{\"oneofs\":{\"_itemId\":{\"oneof\":[\"itemId\"]},\"_itemType\":{\"oneof\":[\"itemType\"]},\"_modelType\":{\"oneof\":[\"modelType\"]},\"_modelVersion\":{\"oneof\":[\"modelVersion\"]},\"_parentId\":{\"oneof\":[\"parentId\"]},\"_model\":{\"oneof\":[\"model\"]}},\"fields\":{\"itemId\":{\"type\":\"string\",\"id\":1,\"options\":{\"proto3_optional\":true},\"comment\":null},\"itemType\":{\"type\":\"string\",\"id\":2,\"options\":{\"proto3_optional\":true},\"comment\":null},\"modelType\":{\"type\":\"string\",\"id\":3,\"options\":{\"proto3_optional\":true},\"comment\":null},\"modelVersion\":{\"type\":\"string\",\"id\":4,\"options\":{\"proto3_optional\":true},\"comment\":null},\"parentId\":{\"type\":\"string\",\"id\":5,\"options\":{\"proto3_optional\":true},\"comment\":null},\"model\":{\"type\":\"ModelSnapshot\",\"id\":6,\"options\":{\"proto3_optional\":true},\"comment\":null}},\"comment\":null},\"LinkSnapshot\":{\"oneofs\":{\"_linkId\":{\"oneof\":[\"linkId\"]},\"_linkType\":{\"oneof\":[\"linkType\"]},\"_modelType\":{\"oneof\":[\"modelType\"]},\"_modelVersion\":{\"oneof\":[\"modelVersion\"]},\"_model\":{\"oneof\":[\"model\"]}},\"fields\":{\"linkId\":{\"type\":\"string\",\"id\":1,\"options\":{\"proto3_optional\":true},\"comment\":null},\"linkType\":{\"type\":\"string\",\"id\":2,\"options\":{\"proto3_optional\":true},\"comment\":null},\"modelType\":{\"type\":\"string\",\"id\":3,\"options\":{\"proto3_optional\":true},\"comment\":null},\"modelVersion\":{\"type\":\"string\",\"id\":4,\"options\":{\"proto3_optional\":true},\"comment\":null},\"source\":{\"rule\":\"required\",\"type\":\"string\",\"id\":5,\"comment\":null},\"target\":{\"rule\":\"required\",\"type\":\"string\",\"id\":6,\"comment\":null},\"model\":{\"type\":\"ModelSnapshot\",\"id\":7,\"options\":{\"proto3_optional\":true},\"comment\":null}},\"comment\":null},\"ModelMutation\":{\"fields\":{\"mutation\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":1,\"comment\":null},\"meta\":{\"rule\":\"required\",\"type\":\"ModelMutationMeta\",\"id\":2,\"comment\":null}},\"comment\":null},\"ModelMutationMeta\":{\"fields\":{\"feedKey\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":1,\"comment\":null},\"seq\":{\"rule\":\"required\",\"type\":\"int32\",\"id\":2,\"comment\":null},\"memberKey\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":3,\"comment\":null}},\"comment\":null},\"ModelSnapshot\":{\"oneofs\":{\"_snapshot\":{\"oneof\":[\"snapshot\"]}},\"fields\":{\"snapshot\":{\"type\":\"bytes\",\"id\":1,\"options\":{\"proto3_optional\":true},\"comment\":\"Encoded model snapshot (defined by the model's codec).\\nIf undefined the state machine will be initialized with it's default state.\"},\"mutations\":{\"rule\":\"repeated\",\"type\":\"ModelMutation\",\"id\":2,\"comment\":\"Mutations to be applied on top of the snapshot, or on top of initial state if the snapshot is undefined.\"}},\"comment\":null},\"PartySnapshot\":{\"fields\":{\"partyKey\":{\"type\":\"bytes\",\"id\":1,\"comment\":null},\"timeframe\":{\"type\":\"TimeframeVector\",\"id\":2,\"comment\":null},\"timestamp\":{\"type\":\"int32\",\"id\":3,\"comment\":null},\"halo\":{\"type\":\"HaloStateSnapshot\",\"id\":11,\"comment\":null},\"database\":{\"type\":\"DatabaseSnapshot\",\"id\":12,\"comment\":null}},\"comment\":null}}}}},\"halo\":{\"nested\":{\"keys\":{\"nested\":{\"KeyChain\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"message\":{\"rule\":\"required\",\"type\":\"SignedMessage\",\"id\":2,\"comment\":null},\"parents\":{\"rule\":\"repeated\",\"type\":\"KeyChain\",\"id\":3,\"comment\":null}},\"comment\":null},\"KeyRecord\":{\"fields\":{\"type\":{\"rule\":\"required\",\"type\":\"KeyType\",\"id\":1,\"comment\":\"- The `KeyType` type of the key. This is often unknown for keys from other sources.\"},\"publicKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":2,\"comment\":\"- The public key as a Buffer (required).\"},\"secretKey\":{\"type\":\"PrivKey\",\"id\":3,\"comment\":\"- The secret key as a Buffer (this will never be visible outside the Keyring).\"},\"hint\":{\"type\":\"bool\",\"id\":4,\"comment\":\"- Is this key from a Greeting \\\"hint\\\"?\"},\"own\":{\"type\":\"bool\",\"id\":5,\"comment\":\"- Is this our key? Usually true if `secretKey` is present,\\nmay be false for \\\"inception keys\\\" such as the Party key.\"},\"trusted\":{\"type\":\"bool\",\"id\":6,\"comment\":\"- Is this key to be trusted?\"},\"added\":{\"type\":\"string\",\"id\":7,\"comment\":\"- An RFC-3339 date/time string for when the key was added to the Keyring.\"},\"created\":{\"type\":\"string\",\"id\":8,\"comment\":\"- An RFC-3339 date/time string for when the key was created.\"}},\"comment\":null},\"KeyRecordList\":{\"fields\":{\"keys\":{\"rule\":\"repeated\",\"type\":\"KeyRecord\",\"id\":1,\"comment\":null}},\"comment\":null},\"KeyType\":{\"values\":{\"UNKNOWN\":0,\"IDENTITY\":1,\"DEVICE\":2,\"PARTY\":3,\"FEED\":4,\"DXNS_ADDRESS\":5},\"comment\":null,\"comments\":{\"UNKNOWN\":null,\"IDENTITY\":null,\"DEVICE\":null,\"PARTY\":null,\"FEED\":null,\"DXNS_ADDRESS\":null}},\"PrivKey\":{\"fields\":{\"data\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":null},\"PubKey\":{\"fields\":{\"data\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":null}}}}},\"rpc\":{\"nested\":{\"Error\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"message\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"stack\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null},\"MessageTrace\":{\"fields\":{\"direction\":{\"type\":\"Direction\",\"id\":1,\"comment\":null},\"data\":{\"type\":\"bytes\",\"id\":2,\"comment\":null}},\"nested\":{\"Direction\":{\"values\":{\"INCOMING\":0,\"OUTGOING\":1},\"comment\":null,\"comments\":{\"INCOMING\":null,\"OUTGOING\":null}}},\"comment\":null},\"Request\":{\"fields\":{\"id\":{\"type\":\"int32\",\"id\":1,\"comment\":null},\"method\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"payload\":{\"type\":\"google.protobuf.Any\",\"id\":3,\"comment\":null},\"stream\":{\"type\":\"bool\",\"id\":4,\"comment\":null}},\"comment\":null},\"Response\":{\"oneofs\":{\"content\":{\"oneof\":[\"payload\",\"error\",\"close\"],\"comment\":null}},\"fields\":{\"id\":{\"type\":\"int32\",\"id\":1,\"comment\":null},\"payload\":{\"type\":\"google.protobuf.Any\",\"id\":2,\"comment\":null},\"error\":{\"type\":\"Error\",\"id\":3,\"comment\":null},\"close\":{\"type\":\"bool\",\"id\":4,\"comment\":null}},\"comment\":null},\"RpcMessage\":{\"oneofs\":{\"content\":{\"oneof\":[\"request\",\"response\",\"open\",\"streamClose\"],\"comment\":null}},\"fields\":{\"request\":{\"type\":\"Request\",\"id\":1,\"comment\":null},\"response\":{\"type\":\"Response\",\"id\":2,\"comment\":null},\"open\":{\"type\":\"bool\",\"id\":3,\"comment\":\"Means that the node is open to receiving requests. Second stage of the hasnshake protocol.\"},\"streamClose\":{\"type\":\"StreamClose\",\"id\":4,\"comment\":null}},\"comment\":null},\"StreamClose\":{\"fields\":{\"id\":{\"type\":\"int32\",\"id\":1,\"comment\":null}},\"comment\":null}}}}},\"google\":{\"nested\":{\"protobuf\":{\"nested\":{\"Any\":{\"fields\":{\"type_url\":{\"type\":\"string\",\"id\":1},\"value\":{\"type\":\"bytes\",\"id\":2}},\"comment\":null},\"DescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"field\":{\"rule\":\"repeated\",\"type\":\"FieldDescriptorProto\",\"id\":2},\"extension\":{\"rule\":\"repeated\",\"type\":\"FieldDescriptorProto\",\"id\":6},\"nestedType\":{\"rule\":\"repeated\",\"type\":\"DescriptorProto\",\"id\":3},\"enumType\":{\"rule\":\"repeated\",\"type\":\"EnumDescriptorProto\",\"id\":4},\"extensionRange\":{\"rule\":\"repeated\",\"type\":\"ExtensionRange\",\"id\":5},\"oneofDecl\":{\"rule\":\"repeated\",\"type\":\"OneofDescriptorProto\",\"id\":8},\"options\":{\"type\":\"MessageOptions\",\"id\":7},\"reservedRange\":{\"rule\":\"repeated\",\"type\":\"ReservedRange\",\"id\":9},\"reservedName\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":10}},\"nested\":{\"ExtensionRange\":{\"fields\":{\"start\":{\"type\":\"int32\",\"id\":1},\"end\":{\"type\":\"int32\",\"id\":2}},\"comment\":null},\"ReservedRange\":{\"fields\":{\"start\":{\"type\":\"int32\",\"id\":1},\"end\":{\"type\":\"int32\",\"id\":2}},\"comment\":null}},\"comment\":null},\"Empty\":{\"fields\":{},\"comment\":null},\"EnumDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"value\":{\"rule\":\"repeated\",\"type\":\"EnumValueDescriptorProto\",\"id\":2},\"options\":{\"type\":\"EnumOptions\",\"id\":3}},\"comment\":null},\"EnumOptions\":{\"fields\":{\"allowAlias\":{\"type\":\"bool\",\"id\":2},\"deprecated\":{\"type\":\"bool\",\"id\":3},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"EnumValueDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"number\":{\"type\":\"int32\",\"id\":2},\"options\":{\"type\":\"EnumValueOptions\",\"id\":3}},\"comment\":null},\"EnumValueOptions\":{\"fields\":{\"deprecated\":{\"type\":\"bool\",\"id\":1},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"FieldDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"number\":{\"type\":\"int32\",\"id\":3},\"label\":{\"type\":\"Label\",\"id\":4},\"type\":{\"type\":\"Type\",\"id\":5},\"typeName\":{\"type\":\"string\",\"id\":6},\"extendee\":{\"type\":\"string\",\"id\":2},\"defaultValue\":{\"type\":\"string\",\"id\":7},\"oneofIndex\":{\"type\":\"int32\",\"id\":9},\"jsonName\":{\"type\":\"string\",\"id\":10},\"options\":{\"type\":\"FieldOptions\",\"id\":8}},\"nested\":{\"Label\":{\"values\":{\"LABEL_OPTIONAL\":1,\"LABEL_REQUIRED\":2,\"LABEL_REPEATED\":3},\"comments\":{}},\"Type\":{\"values\":{\"TYPE_DOUBLE\":1,\"TYPE_FLOAT\":2,\"TYPE_INT64\":3,\"TYPE_UINT64\":4,\"TYPE_INT32\":5,\"TYPE_FIXED64\":6,\"TYPE_FIXED32\":7,\"TYPE_BOOL\":8,\"TYPE_STRING\":9,\"TYPE_GROUP\":10,\"TYPE_MESSAGE\":11,\"TYPE_BYTES\":12,\"TYPE_UINT32\":13,\"TYPE_ENUM\":14,\"TYPE_SFIXED32\":15,\"TYPE_SFIXED64\":16,\"TYPE_SINT32\":17,\"TYPE_SINT64\":18},\"comments\":{}}},\"comment\":null},\"FieldOptions\":{\"fields\":{\"ctype\":{\"type\":\"CType\",\"id\":1,\"options\":{\"default\":\"STRING\"}},\"packed\":{\"type\":\"bool\",\"id\":2},\"jstype\":{\"type\":\"JSType\",\"id\":6,\"options\":{\"default\":\"JS_NORMAL\"}},\"lazy\":{\"type\":\"bool\",\"id\":5},\"deprecated\":{\"type\":\"bool\",\"id\":3},\"weak\":{\"type\":\"bool\",\"id\":10},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"reserved\":[[4,4]],\"nested\":{\"CType\":{\"values\":{\"STRING\":0,\"CORD\":1,\"STRING_PIECE\":2},\"comments\":{}},\"JSType\":{\"values\":{\"JS_NORMAL\":0,\"JS_STRING\":1,\"JS_NUMBER\":2},\"comments\":{}}},\"comment\":null},\"FileDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"package\":{\"type\":\"string\",\"id\":2},\"dependency\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":3},\"publicDependency\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":10,\"options\":{\"packed\":false}},\"weakDependency\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":11,\"options\":{\"packed\":false}},\"messageType\":{\"rule\":\"repeated\",\"type\":\"DescriptorProto\",\"id\":4},\"enumType\":{\"rule\":\"repeated\",\"type\":\"EnumDescriptorProto\",\"id\":5},\"service\":{\"rule\":\"repeated\",\"type\":\"ServiceDescriptorProto\",\"id\":6},\"extension\":{\"rule\":\"repeated\",\"type\":\"FieldDescriptorProto\",\"id\":7},\"options\":{\"type\":\"FileOptions\",\"id\":8},\"sourceCodeInfo\":{\"type\":\"SourceCodeInfo\",\"id\":9},\"syntax\":{\"type\":\"string\",\"id\":12}},\"comment\":null},\"FileDescriptorSet\":{\"fields\":{\"file\":{\"rule\":\"repeated\",\"type\":\"FileDescriptorProto\",\"id\":1}},\"comment\":null},\"FileOptions\":{\"fields\":{\"javaPackage\":{\"type\":\"string\",\"id\":1},\"javaOuterClassname\":{\"type\":\"string\",\"id\":8},\"javaMultipleFiles\":{\"type\":\"bool\",\"id\":10},\"javaGenerateEqualsAndHash\":{\"type\":\"bool\",\"id\":20,\"options\":{\"deprecated\":true}},\"javaStringCheckUtf8\":{\"type\":\"bool\",\"id\":27},\"optimizeFor\":{\"type\":\"OptimizeMode\",\"id\":9,\"options\":{\"default\":\"SPEED\"}},\"goPackage\":{\"type\":\"string\",\"id\":11},\"ccGenericServices\":{\"type\":\"bool\",\"id\":16},\"javaGenericServices\":{\"type\":\"bool\",\"id\":17},\"pyGenericServices\":{\"type\":\"bool\",\"id\":18},\"deprecated\":{\"type\":\"bool\",\"id\":23},\"ccEnableArenas\":{\"type\":\"bool\",\"id\":31},\"objcClassPrefix\":{\"type\":\"string\",\"id\":36},\"csharpNamespace\":{\"type\":\"string\",\"id\":37},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"reserved\":[[38,38]],\"nested\":{\"OptimizeMode\":{\"values\":{\"SPEED\":1,\"CODE_SIZE\":2,\"LITE_RUNTIME\":3},\"comments\":{}}},\"comment\":null},\"GeneratedCodeInfo\":{\"fields\":{\"annotation\":{\"rule\":\"repeated\",\"type\":\"Annotation\",\"id\":1}},\"nested\":{\"Annotation\":{\"fields\":{\"path\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":1},\"sourceFile\":{\"type\":\"string\",\"id\":2},\"begin\":{\"type\":\"int32\",\"id\":3},\"end\":{\"type\":\"int32\",\"id\":4}},\"comment\":null}},\"comment\":null},\"MessageOptions\":{\"fields\":{\"messageSetWireFormat\":{\"type\":\"bool\",\"id\":1},\"noStandardDescriptorAccessor\":{\"type\":\"bool\",\"id\":2},\"deprecated\":{\"type\":\"bool\",\"id\":3},\"mapEntry\":{\"type\":\"bool\",\"id\":7},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"reserved\":[[8,8]],\"comment\":null},\"MethodDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"inputType\":{\"type\":\"string\",\"id\":2},\"outputType\":{\"type\":\"string\",\"id\":3},\"options\":{\"type\":\"MethodOptions\",\"id\":4},\"clientStreaming\":{\"type\":\"bool\",\"id\":5},\"serverStreaming\":{\"type\":\"bool\",\"id\":6}},\"comment\":null},\"MethodOptions\":{\"fields\":{\"deprecated\":{\"type\":\"bool\",\"id\":33},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"OneofDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"options\":{\"type\":\"OneofOptions\",\"id\":2}},\"comment\":null},\"OneofOptions\":{\"fields\":{\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"ServiceDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"method\":{\"rule\":\"repeated\",\"type\":\"MethodDescriptorProto\",\"id\":2},\"options\":{\"type\":\"ServiceOptions\",\"id\":3}},\"comment\":null},\"ServiceOptions\":{\"fields\":{\"deprecated\":{\"type\":\"bool\",\"id\":33},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"SourceCodeInfo\":{\"fields\":{\"location\":{\"rule\":\"repeated\",\"type\":\"Location\",\"id\":1}},\"nested\":{\"Location\":{\"fields\":{\"path\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":1},\"span\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":2},\"leadingComments\":{\"type\":\"string\",\"id\":3},\"trailingComments\":{\"type\":\"string\",\"id\":4},\"leadingDetachedComments\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":6}},\"comment\":null}},\"comment\":null},\"Timestamp\":{\"fields\":{\"seconds\":{\"type\":\"int64\",\"id\":1},\"nanos\":{\"type\":\"int32\",\"id\":2}},\"comment\":null},\"UninterpretedOption\":{\"fields\":{\"name\":{\"rule\":\"repeated\",\"type\":\"NamePart\",\"id\":2},\"identifierValue\":{\"type\":\"string\",\"id\":3},\"positiveIntValue\":{\"type\":\"uint64\",\"id\":4},\"negativeIntValue\":{\"type\":\"int64\",\"id\":5},\"doubleValue\":{\"type\":\"double\",\"id\":6},\"stringValue\":{\"type\":\"bytes\",\"id\":7},\"aggregateValue\":{\"type\":\"string\",\"id\":8}},\"nested\":{\"NamePart\":{\"fields\":{\"namePart\":{\"rule\":\"required\",\"type\":\"string\",\"id\":1},\"isExtension\":{\"rule\":\"required\",\"type\":\"bool\",\"id\":2}},\"comment\":null}},\"comment\":null}}}}}}}");
9
+ exports.schemaJson = JSON.parse("{\"nested\":{\"dxos\":{\"nested\":{\"client\":{\"nested\":{\"AddKeyRecordRequest\":{\"fields\":{\"keyRecord\":{\"type\":\"KeyRecord\",\"id\":1,\"comment\":null}},\"comment\":null},\"AuthenticateInvitationRequest\":{\"fields\":{\"processId\":{\"type\":\"string\",\"id\":1,\"comment\":\"Id from corresponding RedeemedInvitation.\"},\"secret\":{\"type\":\"bytes\",\"id\":2,\"comment\":null}},\"comment\":null},\"Contact\":{\"fields\":{\"publicKey\":{\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"displayName\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"Contacts\":{\"fields\":{\"contacts\":{\"rule\":\"repeated\",\"type\":\"Contact\",\"id\":1,\"comment\":null}},\"comment\":null},\"CreateInvitationRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"inviteeKey\":{\"type\":\"dxos.halo.keys.PubKey\",\"id\":2,\"comment\":\"When specified the invitation will be of OFFLINE type, not requiring secret exchange.\"}},\"comment\":null},\"CreateProfileRequest\":{\"fields\":{\"username\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"publicKey\":{\"type\":\"bytes\",\"id\":2,\"comment\":null},\"secretKey\":{\"type\":\"bytes\",\"id\":3,\"comment\":null}},\"comment\":null},\"CreateSnaspotRequest\":{\"fields\":{\"partyKey\":{\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetPreferenceRequest\":{\"fields\":{\"key\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetPreferenceResponse\":{\"fields\":{\"value\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"HaloService\":{\"methods\":{\"Sign\":{\"requestType\":\"SignRequest\",\"responseType\":\"SignResponse\",\"comment\":null},\"AddKeyRecord\":{\"requestType\":\"AddKeyRecordRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"SubscribeContacts\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Contacts\",\"responseStream\":true,\"comment\":null},\"SetGlobalPreference\":{\"requestType\":\"SetPreferenceRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"GetGlobalPreference\":{\"requestType\":\"GetPreferenceRequest\",\"responseType\":\"GetPreferenceResponse\",\"comment\":null},\"SetDevicePreference\":{\"requestType\":\"SetPreferenceRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"GetDevicePreference\":{\"requestType\":\"GetPreferenceRequest\",\"responseType\":\"GetPreferenceResponse\",\"comment\":null}},\"comment\":null},\"InvitationRequest\":{\"fields\":{\"descriptor\":{\"type\":\"InvitationDescriptor\",\"id\":1,\"comment\":null},\"state\":{\"type\":\"InvitationState\",\"id\":2,\"comment\":null},\"error\":{\"type\":\"string\",\"id\":3,\"comment\":\"Only if state == ERROR.\"}},\"comment\":\"Invitation process created by sender.\"},\"InvitationState\":{\"values\":{\"WAITING_FOR_CONNECTION\":1,\"CONNECTED\":2,\"SUCCESS\":3,\"ERROR\":4},\"comment\":null,\"comments\":{\"WAITING_FOR_CONNECTION\":null,\"CONNECTED\":null,\"SUCCESS\":null,\"ERROR\":null}},\"Party\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"isOpen\":{\"rule\":\"required\",\"type\":\"bool\",\"id\":2,\"comment\":null},\"isActive\":{\"rule\":\"required\",\"type\":\"bool\",\"id\":3,\"comment\":null},\"members\":{\"rule\":\"repeated\",\"type\":\"Member\",\"id\":4,\"comment\":null}},\"nested\":{\"Member\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"displayName\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null}},\"comment\":null},\"PartyActivationOptions\":{\"fields\":{\"global\":{\"type\":\"bool\",\"id\":1,\"comment\":null},\"device\":{\"type\":\"bool\",\"id\":2,\"comment\":null}},\"comment\":null},\"PartyService\":{\"methods\":{\"SubscribeToParty\":{\"requestType\":\"SubscribePartyRequest\",\"responseType\":\"SubscribePartyResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeParties\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribePartiesResponse\",\"responseStream\":true,\"comment\":null},\"CreateParty\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Party\",\"comment\":null},\"CloneParty\":{\"requestType\":\"PartySnapshot\",\"responseType\":\"Party\",\"comment\":null},\"SetPartyState\":{\"requestType\":\"SetPartyStateRequest\",\"responseType\":\"Party\",\"comment\":\"Open and close or activate and deactivate a party.\"},\"CreateInvitation\":{\"requestType\":\"CreateInvitationRequest\",\"responseType\":\"InvitationRequest\",\"responseStream\":true,\"comment\":null},\"AcceptInvitation\":{\"requestType\":\"InvitationDescriptor\",\"responseType\":\"RedeemedInvitation\",\"responseStream\":true,\"comment\":null},\"AuthenticateInvitation\":{\"requestType\":\"AuthenticateInvitationRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"SubscribeMembers\":{\"requestType\":\"SubscribeMembersRequest\",\"responseType\":\"SubscribeMembersResponse\",\"responseStream\":true,\"comment\":null},\"CreateSnapshot\":{\"requestType\":\"CreateSnaspotRequest\",\"responseType\":\"PartySnapshot\",\"comment\":null}},\"comment\":null},\"Profile\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"username\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"ProfileService\":{\"methods\":{\"SubscribeProfile\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribeProfileResponse\",\"responseStream\":true,\"comment\":null},\"CreateProfile\":{\"requestType\":\"CreateProfileRequest\",\"responseType\":\"Profile\",\"comment\":null},\"RecoverProfile\":{\"requestType\":\"RecoverProfileRequest\",\"responseType\":\"Profile\",\"comment\":null},\"CreateInvitation\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"InvitationRequest\",\"responseStream\":true,\"comment\":null},\"AcceptInvitation\":{\"requestType\":\"InvitationDescriptor\",\"responseType\":\"RedeemedInvitation\",\"responseStream\":true,\"comment\":null},\"AuthenticateInvitation\":{\"requestType\":\"AuthenticateInvitationRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null}},\"comment\":null},\"RecoverProfileRequest\":{\"fields\":{\"seedPhrase\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"RedeemedInvitation\":{\"fields\":{\"id\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"state\":{\"type\":\"InvitationState\",\"id\":2,\"comment\":null},\"error\":{\"type\":\"string\",\"id\":3,\"comment\":\"Only if state == ERROR.\"},\"partyKey\":{\"type\":\"dxos.halo.keys.PubKey\",\"id\":4,\"comment\":\"Only on party invitations that are finished.\"}},\"comment\":\"Invitation that is being redeemed.\"},\"SetPartyStateRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"open\":{\"type\":\"bool\",\"id\":2,\"comment\":null},\"activeGlobal\":{\"type\":\"bool\",\"id\":3,\"comment\":null},\"activeDevice\":{\"type\":\"bool\",\"id\":4,\"comment\":null}},\"comment\":null},\"SetPreferenceRequest\":{\"fields\":{\"key\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"value\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"SignRequest\":{\"fields\":{\"publicKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":\"- The public key of the key that is supposed to be used for signing.\"},\"payload\":{\"type\":\"bytes\",\"id\":2,\"comment\":null}},\"comment\":null},\"SignResponse\":{\"fields\":{\"signed\":{\"type\":\"bytes\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeMembersRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeMembersResponse\":{\"fields\":{\"members\":{\"rule\":\"repeated\",\"type\":\"PartyMember\",\"id\":1,\"comment\":null}},\"nested\":{\"PartyMember\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null},\"displayName\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribePartiesResponse\":{\"fields\":{\"parties\":{\"rule\":\"repeated\",\"type\":\"Party\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribePartyRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"dxos.halo.keys.PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribePartyResponse\":{\"fields\":{\"party\":{\"type\":\"Party\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeProfileResponse\":{\"fields\":{\"profile\":{\"type\":\"Profile\",\"id\":1,\"comment\":null}},\"comment\":null},\"SystemService\":{\"methods\":{\"GetConfig\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Config\",\"comment\":null},\"Reset\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null}},\"comment\":null}}},\"config\":{\"nested\":{\"Build\":{\"fields\":{\"command\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"out\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"Config\":{\"fields\":{\"version\":{\"type\":\"int32\",\"id\":1,\"comment\":null},\"module\":{\"type\":\"Module\",\"id\":2,\"comment\":null},\"build\":{\"type\":\"Build\",\"id\":3,\"comment\":null},\"runtime\":{\"type\":\"Runtime\",\"id\":4,\"comment\":null}},\"comment\":null},\"Module\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"type\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"version\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"author\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"license\":{\"type\":\"string\",\"id\":5,\"comment\":null},\"description\":{\"type\":\"string\",\"id\":6,\"comment\":null},\"repository\":{\"type\":\"string\",\"id\":7,\"comment\":null},\"repositoryVersion\":{\"type\":\"string\",\"id\":8,\"comment\":null},\"keywords\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":9,\"comment\":null},\"displayName\":{\"type\":\"string\",\"id\":10,\"comment\":null},\"npmUrl\":{\"type\":\"string\",\"id\":11,\"comment\":null},\"build\":{\"type\":\"Build\",\"id\":101,\"comment\":null},\"record\":{\"type\":\"Record\",\"id\":102,\"comment\":null}},\"nested\":{\"Build\":{\"fields\":{\"version\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"commitHash\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"timestamp\":{\"type\":\"google.protobuf.Timestamp\",\"id\":3,\"comment\":null}},\"comment\":null},\"Record\":{\"fields\":{\"app\":{\"type\":\"App\",\"id\":1,\"comment\":null}},\"nested\":{\"App\":{\"fields\":{\"contentType\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null}},\"comment\":null}},\"comment\":null},\"Runtime\":{\"fields\":{\"client\":{\"type\":\"Client\",\"id\":1,\"comment\":null},\"app\":{\"type\":\"App\",\"id\":2,\"comment\":null},\"cli\":{\"type\":\"CLI\",\"id\":3,\"comment\":null},\"props\":{\"type\":\"Props\",\"id\":4,\"comment\":null},\"services\":{\"type\":\"Services\",\"id\":5,\"comment\":null},\"system\":{\"type\":\"System\",\"id\":6,\"comment\":null}},\"nested\":{\"App\":{\"fields\":{\"org\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"theme\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"website\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"publicUrl\":{\"type\":\"string\",\"id\":4,\"options\":{\"(env)\":\"PUBLIC_URL\"},\"comment\":null}},\"comment\":null},\"CLI\":{\"fields\":{\"nodePath\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"app\":{\"type\":\"AppServe\",\"id\":2,\"comment\":null},\"console\":{\"type\":\"Package\",\"id\":3,\"comment\":null},\"mdns\":{\"type\":\"Package\",\"id\":4,\"comment\":null},\"signal\":{\"type\":\"Package\",\"id\":5,\"comment\":null},\"npmClient\":{\"type\":\"string\",\"id\":6,\"comment\":null},\"channel\":{\"type\":\"string\",\"id\":7,\"comment\":null}},\"nested\":{\"AppServe\":{\"fields\":{\"serve\":{\"type\":\"Serve\",\"id\":1,\"comment\":null}},\"nested\":{\"Serve\":{\"fields\":{\"config\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"loginApp\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"keyPhrase\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":null},\"Package\":{\"fields\":{\"package\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"channel\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"bin\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"config\":{\"type\":\"string\",\"id\":4,\"comment\":null}},\"comment\":null}},\"comment\":null},\"Client\":{\"fields\":{\"debug\":{\"type\":\"string\",\"id\":1,\"options\":{\"(env)\":\"DEBUG\"},\"comment\":null},\"storage\":{\"type\":\"Storage\",\"id\":2,\"comment\":null},\"enableSnapshots\":{\"type\":\"bool\",\"id\":3,\"comment\":null},\"snapshotInterval\":{\"type\":\"int32\",\"id\":4,\"comment\":\"Milliseconds\"},\"invitationExpiration\":{\"type\":\"int32\",\"id\":5,\"comment\":\"Milliseconds\"},\"mode\":{\"type\":\"Mode\",\"id\":6,\"comment\":null}},\"nested\":{\"Mode\":{\"values\":{\"AUTOMATIC\":0,\"LOCAL\":1,\"REMOTE\":2},\"comment\":\"Whether the client services are local with ClientServiceHost or remote and need to be accessed via ClientServiceProxy. Defaults to AUTOMATIC.\",\"comments\":{\"AUTOMATIC\":\"Connects to the browser wallet if avialable, otherwise runs services in the local mode.\",\"LOCAL\":\"Run services in the local mode.\",\"REMOTE\":\"Connect to the browser wallet or to the remote services through the RPC port.\"}},\"Storage\":{\"fields\":{\"persistent\":{\"type\":\"bool\",\"id\":1,\"comment\":null},\"storageType\":{\"type\":\"StorageDriver\",\"id\":2,\"comment\":null},\"keyStorage\":{\"type\":\"StorageDriver\",\"id\":3,\"comment\":null},\"path\":{\"type\":\"string\",\"id\":4,\"comment\":null}},\"nested\":{\"StorageDriver\":{\"values\":{\"RAM\":0,\"IDB\":1,\"CHROME\":2,\"FIREFOX\":3,\"NODE\":4,\"LEVELJS\":11,\"JSONDOWN\":12},\"comment\":null,\"comments\":{\"RAM\":null,\"IDB\":null,\"CHROME\":null,\"FIREFOX\":null,\"NODE\":null,\"LEVELJS\":null,\"JSONDOWN\":null}}},\"comment\":null}},\"comment\":null},\"Props\":{\"fields\":{\"title\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"Services\":{\"fields\":{\"kube\":{\"type\":\"Kube\",\"id\":1,\"comment\":null},\"app\":{\"type\":\"AppServer\",\"id\":2,\"comment\":null},\"dxns\":{\"type\":\"Dxns\",\"id\":3,\"comment\":null},\"ipfs\":{\"type\":\"Ipfs\",\"id\":4,\"comment\":null},\"signal\":{\"type\":\"Signal\",\"id\":5,\"comment\":null},\"ice\":{\"rule\":\"repeated\",\"type\":\"Ice\",\"id\":6,\"comment\":null},\"machine\":{\"type\":\"Machine\",\"id\":7,\"comment\":null},\"bot\":{\"type\":\"BotFactory\",\"id\":8,\"comment\":null}},\"nested\":{\"AppServer\":{\"fields\":{\"prefix\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"server\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"BotFactory\":{\"fields\":{\"topic\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"persistent\":{\"type\":\"bool\",\"id\":2,\"comment\":null},\"retryAttempts\":{\"type\":\"int32\",\"id\":3,\"comment\":null},\"retryInterval\":{\"type\":\"int32\",\"id\":4,\"comment\":null}},\"comment\":null},\"Dxns\":{\"fields\":{\"server\":{\"type\":\"string\",\"id\":1,\"comment\":\"DXNS endpoint.\"},\"accountUri\":{\"type\":\"string\",\"id\":2,\"comment\":\"Substrate account URI. This is a secret.\\nKUBEs do not serve this with the config but we store it in profile.yml.\\n\\nTODO(dmaretskyi): Deprecate this and move it to keyring.\"},\"address\":{\"type\":\"string\",\"id\":3,\"comment\":\"Public Polkadot Address.\"},\"account\":{\"type\":\"string\",\"id\":4,\"comment\":\"Public address of a DXNS Account.\"},\"faucet\":{\"type\":\"string\",\"id\":5,\"comment\":null}},\"comment\":null},\"Ice\":{\"fields\":{\"urls\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"username\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"credential\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null},\"Ipfs\":{\"fields\":{\"server\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"gateway\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"Kube\":{\"fields\":{\"endpoints\":{\"type\":\"Endpoints\",\"id\":1,\"comment\":null},\"publicUrl\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"nested\":{\"Endpoints\":{\"fields\":{\"logs\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"services\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"cert\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":null},\"Machine\":{\"fields\":{\"doAccessToken\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"githubAccessToken\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"githubUsername\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"dnsDomain\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"npmAccessToken\":{\"type\":\"string\",\"id\":5,\"comment\":null}},\"comment\":null},\"Signal\":{\"fields\":{\"server\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"api\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"status\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":null},\"System\":{\"fields\":{\"debug\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null}},\"comment\":null}}},\"credentials\":{\"nested\":{\"Message\":{\"fields\":{\"payload\":{\"rule\":\"required\",\"type\":\"google.protobuf.Any\",\"id\":1,\"comment\":null}},\"comment\":null},\"SignedMessage\":{\"fields\":{\"signed\":{\"rule\":\"required\",\"type\":\"Signed\",\"id\":1,\"comment\":null},\"signatures\":{\"rule\":\"repeated\",\"type\":\"Signature\",\"id\":2,\"comment\":null}},\"nested\":{\"Signature\":{\"fields\":{\"key\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"signature\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":2,\"comment\":null},\"keyChain\":{\"type\":\"KeyChain\",\"id\":3,\"comment\":null}},\"comment\":null},\"Signed\":{\"fields\":{\"created\":{\"rule\":\"required\",\"type\":\"string\",\"id\":1,\"comment\":null},\"nonce\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":2,\"comment\":null},\"payload\":{\"rule\":\"required\",\"type\":\"google.protobuf.Any\",\"id\":10,\"comment\":null}},\"comment\":null}},\"comment\":\"A generic container message used whenever messages are signed (e.g. PartyCredential)\"}}},\"devtools\":{\"nested\":{\"ClearSnapshotsRequest\":{\"fields\":{},\"comment\":null},\"DevtoolsHost\":{\"methods\":{\"Events\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Event\",\"responseStream\":true,\"comment\":null},\"GetConfig\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"GetConfigResponse\",\"comment\":null},\"ResetStorage\":{\"requestType\":\"ResetStorageRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"EnableDebugLogging\":{\"requestType\":\"EnableDebugLoggingRequest\",\"responseType\":\"EnableDebugLoggingResponse\",\"comment\":null},\"DisableDebugLogging\":{\"requestType\":\"EnableDebugLoggingRequest\",\"responseType\":\"EnableDebugLoggingResponse\",\"comment\":null},\"SubscribeToKeyringKeys\":{\"requestType\":\"SubscribeToKeyringKeysRequest\",\"responseType\":\"SubscribeToKeyringKeysResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToCredentialMessages\":{\"requestType\":\"SubscribeToCredentialMessagesRequest\",\"responseType\":\"SubscribeToCredentialMessagesResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToParties\":{\"requestType\":\"SubscribeToPartiesRequest\",\"responseType\":\"SubscribeToPartiesResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToItems\":{\"requestType\":\"SubscribeToItemsRequest\",\"responseType\":\"SubscribeToItemsResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToFeeds\":{\"requestType\":\"SubscribeToFeedsRequest\",\"responseType\":\"SubscribeToFeedsResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToFeed\":{\"requestType\":\"SubscribeToFeedRequest\",\"responseType\":\"SubscribeToFeedResponse\",\"responseStream\":true,\"comment\":null},\"GetPartySnapshot\":{\"requestType\":\"GetPartySnapshotRequest\",\"responseType\":\"GetPartySnapshotResponse\",\"comment\":null},\"SavePartySnapshot\":{\"requestType\":\"SavePartySnapshotRequest\",\"responseType\":\"SavePartySnapshotResponse\",\"comment\":null},\"ClearSnapshots\":{\"requestType\":\"ClearSnapshotsRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"GetNetworkPeers\":{\"requestType\":\"GetNetworkPeersRequest\",\"responseType\":\"GetNetworkPeersResponse\",\"comment\":null},\"SubscribeToNetworkTopics\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribeToNetworkTopicsResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToSignalStatus\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribeToSignalStatusResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToSignalTrace\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"SubscribeToSignalTraceResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeToSwarmInfo\":{\"requestType\":\"SubscribeToSwarmInfoRequest\",\"responseType\":\"SubscribeToSwarmInfoResponse\",\"responseStream\":true,\"comment\":null}},\"comment\":null},\"DisableDebugLoggingRequest\":{\"fields\":{\"namespaces\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"DisableDebugLoggingResponse\":{\"fields\":{\"enabledNamespaces\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"EnableDebugLoggingRequest\":{\"fields\":{\"namespaces\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"EnableDebugLoggingResponse\":{\"fields\":{\"enabledNamespaces\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"Event\":{\"oneofs\":{\"payload\":{\"oneof\":[\"ready\"],\"comment\":null}},\"fields\":{\"ready\":{\"type\":\"ReadyEvent\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetConfigResponse\":{\"fields\":{\"config\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetNetworkPeersRequest\":{\"fields\":{\"topic\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetNetworkPeersResponse\":{\"fields\":{\"peers\":{\"rule\":\"repeated\",\"type\":\"PeerInfo\",\"id\":1,\"comment\":null}},\"nested\":{\"PeerInfo\":{\"fields\":{\"id\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"state\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"connections\":{\"rule\":\"repeated\",\"type\":\"bytes\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":null},\"GetPartySnapshotRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"GetPartySnapshotResponse\":{\"fields\":{\"snapshot\":{\"type\":\"PartySnapshot\",\"id\":1,\"comment\":null}},\"comment\":null},\"ReadyEvent\":{\"fields\":{},\"comment\":null},\"ResetStorageRequest\":{\"fields\":{},\"comment\":null},\"SavePartySnapshotRequest\":{\"fields\":{\"partyKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SavePartySnapshotResponse\":{\"fields\":{\"snapshot\":{\"type\":\"PartySnapshot\",\"id\":1,\"comment\":null}},\"comment\":null},\"SetTracingOptionsRequest\":{\"fields\":{\"enable\":{\"type\":\"bool\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToCredentialMessagesRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToCredentialMessagesResponse\":{\"fields\":{\"messages\":{\"rule\":\"repeated\",\"type\":\"SignedMessage\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToFeedRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"feedKey\":{\"type\":\"PubKey\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeToFeedResponse\":{\"fields\":{\"blocks\":{\"rule\":\"repeated\",\"type\":\"EchoFeedBlock\",\"id\":1,\"comment\":null}},\"nested\":{\"EchoFeedBlock\":{\"fields\":{\"key\":{\"type\":\"bytes\",\"id\":1,\"comment\":null},\"seq\":{\"type\":\"int32\",\"id\":2,\"comment\":null},\"sync\":{\"type\":\"bool\",\"id\":3,\"comment\":null},\"path\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"data\":{\"type\":\"FeedMessage\",\"id\":5,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToFeedsRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToFeedsResponse\":{\"fields\":{\"parties\":{\"rule\":\"repeated\",\"type\":\"Party\",\"id\":1,\"comment\":null}},\"nested\":{\"Party\":{\"fields\":{\"key\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"feeds\":{\"rule\":\"repeated\",\"type\":\"PubKey\",\"id\":2,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToItemsRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToItemsResponse\":{\"fields\":{\"data\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToKeyringKeysRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToKeyringKeysResponse\":{\"fields\":{\"keys\":{\"rule\":\"repeated\",\"type\":\"KeyRecord\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToNetworkTopicsResponse\":{\"fields\":{\"topics\":{\"rule\":\"repeated\",\"type\":\"Topic\",\"id\":1,\"comment\":null}},\"nested\":{\"Topic\":{\"fields\":{\"topic\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"label\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToPartiesRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToPartiesResponse\":{\"fields\":{\"parties\":{\"rule\":\"repeated\",\"type\":\"PartyInfo\",\"id\":1,\"comment\":null}},\"nested\":{\"PartyInfo\":{\"fields\":{\"key\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"isOpen\":{\"type\":\"bool\",\"id\":2,\"comment\":null},\"isActive\":{\"type\":\"bool\",\"id\":3,\"comment\":null},\"feedKeys\":{\"type\":\"int32\",\"id\":4,\"comment\":null},\"properties\":{\"keyType\":\"string\",\"type\":\"string\",\"id\":5,\"comment\":null},\"timeframe\":{\"type\":\"TimeframeVector\",\"id\":10,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToSignalStatusResponse\":{\"fields\":{\"servers\":{\"rule\":\"repeated\",\"type\":\"SignalServer\",\"id\":1,\"comment\":null}},\"nested\":{\"SignalServer\":{\"fields\":{\"host\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"state\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"error\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"reconnectIn\":{\"type\":\"int32\",\"id\":4,\"comment\":null},\"connectionStarted\":{\"type\":\"int32\",\"id\":5,\"comment\":null},\"lastStateChange\":{\"type\":\"int32\",\"id\":6,\"comment\":null}},\"comment\":null}},\"comment\":null},\"SubscribeToSignalTraceResponse\":{\"fields\":{\"events\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeToSwarmInfoRequest\":{\"fields\":{},\"comment\":null},\"SubscribeToSwarmInfoResponse\":{\"fields\":{\"data\":{\"rule\":\"repeated\",\"type\":\"SwarmInfo\",\"id\":1,\"comment\":null}},\"nested\":{\"SwarmInfo\":{\"fields\":{\"id\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"topic\":{\"type\":\"PubKey\",\"id\":2,\"comment\":null},\"label\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"isActive\":{\"type\":\"bool\",\"id\":4,\"comment\":null},\"connections\":{\"rule\":\"repeated\",\"type\":\"ConnectionInfo\",\"id\":5,\"comment\":null}},\"nested\":{\"ConnectionInfo\":{\"fields\":{\"state\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"sessionId\":{\"type\":\"PubKey\",\"id\":2,\"comment\":null},\"remotePeerId\":{\"type\":\"PubKey\",\"id\":3,\"comment\":null},\"transport\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"protocolExtensions\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":5,\"comment\":null},\"events\":{\"rule\":\"repeated\",\"type\":\"Json\",\"id\":6,\"comment\":null}},\"nested\":{\"Json\":{\"fields\":{\"data\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null}},\"comment\":null}},\"comment\":null}},\"comment\":null},\"TracingService\":{\"methods\":{\"SetTracingOptions\":{\"requestType\":\"SetTracingOptionsRequest\",\"responseType\":\"google.protobuf.Empty\",\"comment\":null},\"SubscribeToRpcTrace\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"RpcMessage\",\"responseStream\":true,\"comment\":null}},\"comment\":null}}},\"echo\":{\"nested\":{\"feed\":{\"nested\":{\"CredentialsMessage\":{\"fields\":{\"data\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":\"A container for dxos.credentials.Message\"},\"EchoEnvelope\":{\"fields\":{\"itemId\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"timeframe\":{\"type\":\"TimeframeVector\",\"id\":2,\"comment\":null},\"genesis\":{\"type\":\"ItemGenesis\",\"id\":10,\"comment\":null},\"itemMutation\":{\"type\":\"ItemMutation\",\"id\":11,\"comment\":null},\"mutation\":{\"type\":\"bytes\",\"id\":12,\"comment\":null},\"snapshot\":{\"type\":\"ModelSnapshot\",\"id\":13,\"comment\":\"Set the model to the provided snapshot.\"}},\"comment\":\"Wrapper for all ECHO messages.\"},\"FeedMessage\":{\"fields\":{\"halo\":{\"type\":\"CredentialsMessage\",\"id\":1,\"comment\":null},\"echo\":{\"type\":\"EchoEnvelope\",\"id\":2,\"comment\":null}},\"comment\":\"Outer message type decoded by Codec.\\nThis is what is written to the feeds.\"},\"ItemGenesis\":{\"fields\":{\"itemType\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"modelType\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"modelVersion\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"link\":{\"type\":\"LinkData\",\"id\":4,\"comment\":null}},\"comment\":null},\"ItemMutation\":{\"fields\":{\"parentId\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"action\":{\"type\":\"Action\",\"id\":2,\"comment\":null}},\"nested\":{\"Action\":{\"values\":{\"NOOP\":0,\"DELETE\":1,\"RESTORE\":2},\"comment\":null,\"comments\":{\"NOOP\":null,\"DELETE\":null,\"RESTORE\":null}}},\"comment\":\"Item mutation.\"},\"LinkData\":{\"fields\":{\"source\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"target\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"TimeframeVector\":{\"fields\":{\"frames\":{\"rule\":\"repeated\",\"type\":\"Frame\",\"id\":1,\"comment\":null}},\"nested\":{\"Frame\":{\"fields\":{\"feedKey\":{\"type\":\"bytes\",\"id\":1,\"comment\":null},\"seq\":{\"type\":\"int32\",\"id\":3,\"comment\":null}},\"comment\":null}},\"comment\":\"Vector timestamp used to order messages.\"}}},\"invitation\":{\"nested\":{\"InvitationDescriptor\":{\"fields\":{\"type\":{\"type\":\"Type\",\"id\":1,\"comment\":null},\"swarmKey\":{\"type\":\"bytes\",\"id\":2,\"comment\":null},\"invitation\":{\"type\":\"bytes\",\"id\":3,\"comment\":null},\"identityKey\":{\"type\":\"bytes\",\"id\":4,\"comment\":\"Only present if type == OFFLINE.\"},\"secret\":{\"type\":\"bytes\",\"id\":5,\"comment\":\"Must be stripped out when passing to another peer.\"}},\"nested\":{\"Type\":{\"values\":{\"INTERACTIVE\":1,\"OFFLINE\":2},\"comment\":\"Defines an invitation type.\",\"comments\":{\"INTERACTIVE\":\"Interactive invitation is when both peers are online at the same time.\",\"OFFLINE\":\"Offline is when only a single peer needs to be online at the time.\"}}},\"comment\":null}}},\"service\":{\"nested\":{\"DataService\":{\"methods\":{\"SubscribeEntitySet\":{\"requestType\":\"SubscribeEntitySetRequest\",\"responseType\":\"SubscribeEntitySetResponse\",\"responseStream\":true,\"comment\":null},\"SubscribeEntityStream\":{\"requestType\":\"SubscribeEntityStreamRequest\",\"responseType\":\"SubscribeEntityStreamResponse\",\"responseStream\":true,\"comment\":null},\"Write\":{\"requestType\":\"WriteRequest\",\"responseType\":\"MutationReceipt\",\"comment\":null}},\"comment\":null},\"MutationReceipt\":{\"fields\":{\"feedKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"seq\":{\"type\":\"int32\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeEntitySetRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"SubscribeEntitySetResponse\":{\"fields\":{\"added\":{\"rule\":\"repeated\",\"type\":\"EchoEnvelope\",\"id\":1,\"comment\":null},\"deleted\":{\"rule\":\"repeated\",\"type\":\"EchoEnvelope\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeEntityStreamRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"itemId\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"SubscribeEntityStreamResponse\":{\"oneofs\":{\"kind\":{\"oneof\":[\"snapshot\",\"mutation\"],\"comment\":null}},\"fields\":{\"snapshot\":{\"type\":\"ItemSnapshot\",\"id\":1,\"comment\":null},\"mutation\":{\"type\":\"Mutation\",\"id\":2,\"comment\":null}},\"nested\":{\"Mutation\":{\"fields\":{\"data\":{\"type\":\"EchoEnvelope\",\"id\":1,\"comment\":null},\"meta\":{\"type\":\"Metadata\",\"id\":2,\"comment\":null}},\"nested\":{\"Metadata\":{\"fields\":{\"feedKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"memberKey\":{\"type\":\"PubKey\",\"id\":2,\"comment\":null},\"seq\":{\"type\":\"int32\",\"id\":3,\"comment\":null},\"timeframe\":{\"type\":\"TimeframeVector\",\"id\":4,\"comment\":null}},\"comment\":null}},\"comment\":null}},\"comment\":null},\"WriteRequest\":{\"fields\":{\"partyKey\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"mutation\":{\"type\":\"EchoEnvelope\",\"id\":2,\"comment\":null}},\"comment\":null}}},\"snapshot\":{\"nested\":{\"DatabaseSnapshot\":{\"fields\":{\"items\":{\"rule\":\"repeated\",\"type\":\"ItemSnapshot\",\"id\":1,\"comment\":null},\"links\":{\"rule\":\"repeated\",\"type\":\"LinkSnapshot\",\"id\":2,\"comment\":null}},\"comment\":null},\"HaloStateSnapshot\":{\"fields\":{\"messages\":{\"rule\":\"repeated\",\"type\":\"dxos.CredentialsMessage\",\"id\":1,\"comment\":null}},\"comment\":null},\"ItemSnapshot\":{\"oneofs\":{\"_itemId\":{\"oneof\":[\"itemId\"]},\"_itemType\":{\"oneof\":[\"itemType\"]},\"_modelType\":{\"oneof\":[\"modelType\"]},\"_modelVersion\":{\"oneof\":[\"modelVersion\"]},\"_parentId\":{\"oneof\":[\"parentId\"]},\"_model\":{\"oneof\":[\"model\"]}},\"fields\":{\"itemId\":{\"type\":\"string\",\"id\":1,\"options\":{\"proto3_optional\":true},\"comment\":null},\"itemType\":{\"type\":\"string\",\"id\":2,\"options\":{\"proto3_optional\":true},\"comment\":null},\"modelType\":{\"type\":\"string\",\"id\":3,\"options\":{\"proto3_optional\":true},\"comment\":null},\"modelVersion\":{\"type\":\"string\",\"id\":4,\"options\":{\"proto3_optional\":true},\"comment\":null},\"parentId\":{\"type\":\"string\",\"id\":5,\"options\":{\"proto3_optional\":true},\"comment\":null},\"model\":{\"type\":\"ModelSnapshot\",\"id\":6,\"options\":{\"proto3_optional\":true},\"comment\":null}},\"comment\":null},\"LinkSnapshot\":{\"oneofs\":{\"_linkId\":{\"oneof\":[\"linkId\"]},\"_linkType\":{\"oneof\":[\"linkType\"]},\"_modelType\":{\"oneof\":[\"modelType\"]},\"_modelVersion\":{\"oneof\":[\"modelVersion\"]},\"_model\":{\"oneof\":[\"model\"]}},\"fields\":{\"linkId\":{\"type\":\"string\",\"id\":1,\"options\":{\"proto3_optional\":true},\"comment\":null},\"linkType\":{\"type\":\"string\",\"id\":2,\"options\":{\"proto3_optional\":true},\"comment\":null},\"modelType\":{\"type\":\"string\",\"id\":3,\"options\":{\"proto3_optional\":true},\"comment\":null},\"modelVersion\":{\"type\":\"string\",\"id\":4,\"options\":{\"proto3_optional\":true},\"comment\":null},\"source\":{\"rule\":\"required\",\"type\":\"string\",\"id\":5,\"comment\":null},\"target\":{\"rule\":\"required\",\"type\":\"string\",\"id\":6,\"comment\":null},\"model\":{\"type\":\"ModelSnapshot\",\"id\":7,\"options\":{\"proto3_optional\":true},\"comment\":null}},\"comment\":null},\"ModelMutation\":{\"fields\":{\"mutation\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":1,\"comment\":null},\"meta\":{\"rule\":\"required\",\"type\":\"ModelMutationMeta\",\"id\":2,\"comment\":null}},\"comment\":null},\"ModelMutationMeta\":{\"fields\":{\"feedKey\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":1,\"comment\":null},\"seq\":{\"rule\":\"required\",\"type\":\"int32\",\"id\":2,\"comment\":null},\"memberKey\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":3,\"comment\":null}},\"comment\":null},\"ModelSnapshot\":{\"oneofs\":{\"_snapshot\":{\"oneof\":[\"snapshot\"]}},\"fields\":{\"snapshot\":{\"type\":\"bytes\",\"id\":1,\"options\":{\"proto3_optional\":true},\"comment\":\"Encoded model snapshot (defined by the model's codec).\\nIf undefined the state machine will be initialized with it's default state.\"},\"mutations\":{\"rule\":\"repeated\",\"type\":\"ModelMutation\",\"id\":2,\"comment\":\"Mutations to be applied on top of the snapshot, or on top of initial state if the snapshot is undefined.\"}},\"comment\":null},\"PartySnapshot\":{\"fields\":{\"partyKey\":{\"type\":\"bytes\",\"id\":1,\"comment\":null},\"timeframe\":{\"type\":\"TimeframeVector\",\"id\":2,\"comment\":null},\"timestamp\":{\"type\":\"int32\",\"id\":3,\"comment\":null},\"halo\":{\"type\":\"HaloStateSnapshot\",\"id\":11,\"comment\":null},\"database\":{\"type\":\"DatabaseSnapshot\",\"id\":12,\"comment\":null}},\"comment\":null}}}}},\"halo\":{\"nested\":{\"keys\":{\"nested\":{\"KeyChain\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"message\":{\"rule\":\"required\",\"type\":\"SignedMessage\",\"id\":2,\"comment\":null},\"parents\":{\"rule\":\"repeated\",\"type\":\"KeyChain\",\"id\":3,\"comment\":null}},\"comment\":null},\"KeyRecord\":{\"fields\":{\"type\":{\"rule\":\"required\",\"type\":\"KeyType\",\"id\":1,\"comment\":\"- The `KeyType` type of the key. This is often unknown for keys from other sources.\"},\"publicKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":2,\"comment\":\"- The public key as a Buffer (required).\"},\"secretKey\":{\"type\":\"PrivKey\",\"id\":3,\"comment\":\"- The secret key as a Buffer (this will never be visible outside the Keyring).\"},\"hint\":{\"type\":\"bool\",\"id\":4,\"comment\":\"- Is this key from a Greeting \\\"hint\\\"?\"},\"own\":{\"type\":\"bool\",\"id\":5,\"comment\":\"- Is this our key? Usually true if `secretKey` is present,\\nmay be false for \\\"inception keys\\\" such as the Party key.\"},\"trusted\":{\"type\":\"bool\",\"id\":6,\"comment\":\"- Is this key to be trusted?\"},\"added\":{\"type\":\"string\",\"id\":7,\"comment\":\"- An RFC-3339 date/time string for when the key was added to the Keyring.\"},\"created\":{\"type\":\"string\",\"id\":8,\"comment\":\"- An RFC-3339 date/time string for when the key was created.\"}},\"comment\":null},\"KeyRecordList\":{\"fields\":{\"keys\":{\"rule\":\"repeated\",\"type\":\"KeyRecord\",\"id\":1,\"comment\":null}},\"comment\":null},\"KeyType\":{\"values\":{\"UNKNOWN\":0,\"IDENTITY\":1,\"DEVICE\":2,\"PARTY\":3,\"FEED\":4,\"DXNS_ADDRESS\":5},\"comment\":null,\"comments\":{\"UNKNOWN\":null,\"IDENTITY\":null,\"DEVICE\":null,\"PARTY\":null,\"FEED\":null,\"DXNS_ADDRESS\":null}},\"PrivKey\":{\"fields\":{\"data\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":null},\"PubKey\":{\"fields\":{\"data\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":null}}}}},\"rpc\":{\"nested\":{\"Error\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"message\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"stack\":{\"type\":\"string\",\"id\":3,\"comment\":null}},\"comment\":null},\"MessageTrace\":{\"fields\":{\"direction\":{\"type\":\"Direction\",\"id\":1,\"comment\":null},\"data\":{\"type\":\"bytes\",\"id\":2,\"comment\":null}},\"nested\":{\"Direction\":{\"values\":{\"INCOMING\":0,\"OUTGOING\":1},\"comment\":null,\"comments\":{\"INCOMING\":null,\"OUTGOING\":null}}},\"comment\":null},\"Request\":{\"fields\":{\"id\":{\"type\":\"int32\",\"id\":1,\"comment\":null},\"method\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"payload\":{\"type\":\"google.protobuf.Any\",\"id\":3,\"comment\":null},\"stream\":{\"type\":\"bool\",\"id\":4,\"comment\":null}},\"comment\":null},\"Response\":{\"oneofs\":{\"content\":{\"oneof\":[\"payload\",\"error\",\"close\"],\"comment\":null}},\"fields\":{\"id\":{\"type\":\"int32\",\"id\":1,\"comment\":null},\"payload\":{\"type\":\"google.protobuf.Any\",\"id\":2,\"comment\":null},\"error\":{\"type\":\"Error\",\"id\":3,\"comment\":null},\"close\":{\"type\":\"bool\",\"id\":4,\"comment\":null}},\"comment\":null},\"RpcMessage\":{\"oneofs\":{\"content\":{\"oneof\":[\"request\",\"response\",\"open\",\"streamClose\"],\"comment\":null}},\"fields\":{\"request\":{\"type\":\"Request\",\"id\":1,\"comment\":null},\"response\":{\"type\":\"Response\",\"id\":2,\"comment\":null},\"open\":{\"type\":\"bool\",\"id\":3,\"comment\":\"Means that the node is open to receiving requests. Second stage of the hasnshake protocol.\"},\"streamClose\":{\"type\":\"StreamClose\",\"id\":4,\"comment\":null}},\"comment\":null},\"StreamClose\":{\"fields\":{\"id\":{\"type\":\"int32\",\"id\":1,\"comment\":null}},\"comment\":null}}}}},\"google\":{\"nested\":{\"protobuf\":{\"nested\":{\"Any\":{\"fields\":{\"type_url\":{\"type\":\"string\",\"id\":1},\"value\":{\"type\":\"bytes\",\"id\":2}},\"comment\":null},\"DescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"field\":{\"rule\":\"repeated\",\"type\":\"FieldDescriptorProto\",\"id\":2},\"extension\":{\"rule\":\"repeated\",\"type\":\"FieldDescriptorProto\",\"id\":6},\"nestedType\":{\"rule\":\"repeated\",\"type\":\"DescriptorProto\",\"id\":3},\"enumType\":{\"rule\":\"repeated\",\"type\":\"EnumDescriptorProto\",\"id\":4},\"extensionRange\":{\"rule\":\"repeated\",\"type\":\"ExtensionRange\",\"id\":5},\"oneofDecl\":{\"rule\":\"repeated\",\"type\":\"OneofDescriptorProto\",\"id\":8},\"options\":{\"type\":\"MessageOptions\",\"id\":7},\"reservedRange\":{\"rule\":\"repeated\",\"type\":\"ReservedRange\",\"id\":9},\"reservedName\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":10}},\"nested\":{\"ExtensionRange\":{\"fields\":{\"start\":{\"type\":\"int32\",\"id\":1},\"end\":{\"type\":\"int32\",\"id\":2}},\"comment\":null},\"ReservedRange\":{\"fields\":{\"start\":{\"type\":\"int32\",\"id\":1},\"end\":{\"type\":\"int32\",\"id\":2}},\"comment\":null}},\"comment\":null},\"Empty\":{\"fields\":{},\"comment\":null},\"EnumDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"value\":{\"rule\":\"repeated\",\"type\":\"EnumValueDescriptorProto\",\"id\":2},\"options\":{\"type\":\"EnumOptions\",\"id\":3}},\"comment\":null},\"EnumOptions\":{\"fields\":{\"allowAlias\":{\"type\":\"bool\",\"id\":2},\"deprecated\":{\"type\":\"bool\",\"id\":3},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"EnumValueDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"number\":{\"type\":\"int32\",\"id\":2},\"options\":{\"type\":\"EnumValueOptions\",\"id\":3}},\"comment\":null},\"EnumValueOptions\":{\"fields\":{\"deprecated\":{\"type\":\"bool\",\"id\":1},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"FieldDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"number\":{\"type\":\"int32\",\"id\":3},\"label\":{\"type\":\"Label\",\"id\":4},\"type\":{\"type\":\"Type\",\"id\":5},\"typeName\":{\"type\":\"string\",\"id\":6},\"extendee\":{\"type\":\"string\",\"id\":2},\"defaultValue\":{\"type\":\"string\",\"id\":7},\"oneofIndex\":{\"type\":\"int32\",\"id\":9},\"jsonName\":{\"type\":\"string\",\"id\":10},\"options\":{\"type\":\"FieldOptions\",\"id\":8}},\"nested\":{\"Label\":{\"values\":{\"LABEL_OPTIONAL\":1,\"LABEL_REQUIRED\":2,\"LABEL_REPEATED\":3},\"comments\":{}},\"Type\":{\"values\":{\"TYPE_DOUBLE\":1,\"TYPE_FLOAT\":2,\"TYPE_INT64\":3,\"TYPE_UINT64\":4,\"TYPE_INT32\":5,\"TYPE_FIXED64\":6,\"TYPE_FIXED32\":7,\"TYPE_BOOL\":8,\"TYPE_STRING\":9,\"TYPE_GROUP\":10,\"TYPE_MESSAGE\":11,\"TYPE_BYTES\":12,\"TYPE_UINT32\":13,\"TYPE_ENUM\":14,\"TYPE_SFIXED32\":15,\"TYPE_SFIXED64\":16,\"TYPE_SINT32\":17,\"TYPE_SINT64\":18},\"comments\":{}}},\"comment\":null},\"FieldOptions\":{\"fields\":{\"ctype\":{\"type\":\"CType\",\"id\":1,\"options\":{\"default\":\"STRING\"}},\"packed\":{\"type\":\"bool\",\"id\":2},\"jstype\":{\"type\":\"JSType\",\"id\":6,\"options\":{\"default\":\"JS_NORMAL\"}},\"lazy\":{\"type\":\"bool\",\"id\":5},\"deprecated\":{\"type\":\"bool\",\"id\":3},\"weak\":{\"type\":\"bool\",\"id\":10},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"reserved\":[[4,4]],\"nested\":{\"CType\":{\"values\":{\"STRING\":0,\"CORD\":1,\"STRING_PIECE\":2},\"comments\":{}},\"JSType\":{\"values\":{\"JS_NORMAL\":0,\"JS_STRING\":1,\"JS_NUMBER\":2},\"comments\":{}}},\"comment\":null},\"FileDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"package\":{\"type\":\"string\",\"id\":2},\"dependency\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":3},\"publicDependency\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":10,\"options\":{\"packed\":false}},\"weakDependency\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":11,\"options\":{\"packed\":false}},\"messageType\":{\"rule\":\"repeated\",\"type\":\"DescriptorProto\",\"id\":4},\"enumType\":{\"rule\":\"repeated\",\"type\":\"EnumDescriptorProto\",\"id\":5},\"service\":{\"rule\":\"repeated\",\"type\":\"ServiceDescriptorProto\",\"id\":6},\"extension\":{\"rule\":\"repeated\",\"type\":\"FieldDescriptorProto\",\"id\":7},\"options\":{\"type\":\"FileOptions\",\"id\":8},\"sourceCodeInfo\":{\"type\":\"SourceCodeInfo\",\"id\":9},\"syntax\":{\"type\":\"string\",\"id\":12}},\"comment\":null},\"FileDescriptorSet\":{\"fields\":{\"file\":{\"rule\":\"repeated\",\"type\":\"FileDescriptorProto\",\"id\":1}},\"comment\":null},\"FileOptions\":{\"fields\":{\"javaPackage\":{\"type\":\"string\",\"id\":1},\"javaOuterClassname\":{\"type\":\"string\",\"id\":8},\"javaMultipleFiles\":{\"type\":\"bool\",\"id\":10},\"javaGenerateEqualsAndHash\":{\"type\":\"bool\",\"id\":20,\"options\":{\"deprecated\":true}},\"javaStringCheckUtf8\":{\"type\":\"bool\",\"id\":27},\"optimizeFor\":{\"type\":\"OptimizeMode\",\"id\":9,\"options\":{\"default\":\"SPEED\"}},\"goPackage\":{\"type\":\"string\",\"id\":11},\"ccGenericServices\":{\"type\":\"bool\",\"id\":16},\"javaGenericServices\":{\"type\":\"bool\",\"id\":17},\"pyGenericServices\":{\"type\":\"bool\",\"id\":18},\"deprecated\":{\"type\":\"bool\",\"id\":23},\"ccEnableArenas\":{\"type\":\"bool\",\"id\":31},\"objcClassPrefix\":{\"type\":\"string\",\"id\":36},\"csharpNamespace\":{\"type\":\"string\",\"id\":37},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"reserved\":[[38,38]],\"nested\":{\"OptimizeMode\":{\"values\":{\"SPEED\":1,\"CODE_SIZE\":2,\"LITE_RUNTIME\":3},\"comments\":{}}},\"comment\":null},\"GeneratedCodeInfo\":{\"fields\":{\"annotation\":{\"rule\":\"repeated\",\"type\":\"Annotation\",\"id\":1}},\"nested\":{\"Annotation\":{\"fields\":{\"path\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":1},\"sourceFile\":{\"type\":\"string\",\"id\":2},\"begin\":{\"type\":\"int32\",\"id\":3},\"end\":{\"type\":\"int32\",\"id\":4}},\"comment\":null}},\"comment\":null},\"MessageOptions\":{\"fields\":{\"messageSetWireFormat\":{\"type\":\"bool\",\"id\":1},\"noStandardDescriptorAccessor\":{\"type\":\"bool\",\"id\":2},\"deprecated\":{\"type\":\"bool\",\"id\":3},\"mapEntry\":{\"type\":\"bool\",\"id\":7},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"reserved\":[[8,8]],\"comment\":null},\"MethodDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"inputType\":{\"type\":\"string\",\"id\":2},\"outputType\":{\"type\":\"string\",\"id\":3},\"options\":{\"type\":\"MethodOptions\",\"id\":4},\"clientStreaming\":{\"type\":\"bool\",\"id\":5},\"serverStreaming\":{\"type\":\"bool\",\"id\":6}},\"comment\":null},\"MethodOptions\":{\"fields\":{\"deprecated\":{\"type\":\"bool\",\"id\":33},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"OneofDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"options\":{\"type\":\"OneofOptions\",\"id\":2}},\"comment\":null},\"OneofOptions\":{\"fields\":{\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"ServiceDescriptorProto\":{\"fields\":{\"name\":{\"type\":\"string\",\"id\":1},\"method\":{\"rule\":\"repeated\",\"type\":\"MethodDescriptorProto\",\"id\":2},\"options\":{\"type\":\"ServiceOptions\",\"id\":3}},\"comment\":null},\"ServiceOptions\":{\"fields\":{\"deprecated\":{\"type\":\"bool\",\"id\":33},\"uninterpretedOption\":{\"rule\":\"repeated\",\"type\":\"UninterpretedOption\",\"id\":999}},\"extensions\":[[1000,536870911]],\"comment\":null},\"SourceCodeInfo\":{\"fields\":{\"location\":{\"rule\":\"repeated\",\"type\":\"Location\",\"id\":1}},\"nested\":{\"Location\":{\"fields\":{\"path\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":1},\"span\":{\"rule\":\"repeated\",\"type\":\"int32\",\"id\":2},\"leadingComments\":{\"type\":\"string\",\"id\":3},\"trailingComments\":{\"type\":\"string\",\"id\":4},\"leadingDetachedComments\":{\"rule\":\"repeated\",\"type\":\"string\",\"id\":6}},\"comment\":null}},\"comment\":null},\"Timestamp\":{\"fields\":{\"seconds\":{\"type\":\"int64\",\"id\":1},\"nanos\":{\"type\":\"int32\",\"id\":2}},\"comment\":null},\"UninterpretedOption\":{\"fields\":{\"name\":{\"rule\":\"repeated\",\"type\":\"NamePart\",\"id\":2},\"identifierValue\":{\"type\":\"string\",\"id\":3},\"positiveIntValue\":{\"type\":\"uint64\",\"id\":4},\"negativeIntValue\":{\"type\":\"int64\",\"id\":5},\"doubleValue\":{\"type\":\"double\",\"id\":6},\"stringValue\":{\"type\":\"bytes\",\"id\":7},\"aggregateValue\":{\"type\":\"string\",\"id\":8}},\"nested\":{\"NamePart\":{\"fields\":{\"namePart\":{\"rule\":\"required\",\"type\":\"string\",\"id\":1},\"isExtension\":{\"rule\":\"required\",\"type\":\"bool\",\"id\":2}},\"comment\":null}},\"comment\":null}}}}}}}");
10
10
  exports.schema = codec_protobuf_1.Schema.fromJson(exports.schemaJson, substitutions_1.default);
11
11
  //# sourceMappingURL=index.js.map
@@ -2,7 +2,7 @@ import { OpenProgress } from '@dxos/echo-db';
2
2
  import { DataService } from '@dxos/echo-protocol';
3
3
  import { PartyService, ProfileService, SystemService, HaloService } from '../proto/gen/dxos/client';
4
4
  import { DevtoolsHost, TracingService } from '../proto/gen/dxos/devtools';
5
- export interface ClientServices {
5
+ export declare type ClientServices = {
6
6
  SystemService: SystemService;
7
7
  ProfileService: ProfileService;
8
8
  HaloService: HaloService;
@@ -10,11 +10,11 @@ export interface ClientServices {
10
10
  DataService: DataService;
11
11
  DevtoolsHost: DevtoolsHost;
12
12
  TracingService: TracingService;
13
- }
13
+ };
14
14
  export declare const clientServiceBundle: import("@dxos/rpc").ServiceBundle<ClientServices>;
15
15
  export interface ClientServiceProvider {
16
16
  services: ClientServices;
17
17
  open(onProgressCallback?: ((progress: OpenProgress) => void) | undefined): Promise<void>;
18
18
  close(): Promise<void>;
19
19
  }
20
- //# sourceMappingURL=client-service-provider.d.ts.map
20
+ //# sourceMappingURL=client-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-service.d.ts","sourceRoot":"","sources":["../../../src/services/client-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAA4B,MAAM,qBAAqB,CAAC;AAI5E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI1E,oBAAY,cAAc,GAAG;IAC3B,aAAa,EAAE,aAAa,CAAA;IAC5B,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,YAAY,CAAA;IAC1B,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,YAAY,CAAA;IAC1B,cAAc,EAAE,cAAc,CAAA;CAC/B,CAAA;AAGD,eAAO,MAAM,mBAAmB,mDAU9B,CAAC;AAEH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,cAAc,CAAA;IACxB,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB"}
@@ -7,14 +7,16 @@ exports.clientServiceBundle = void 0;
7
7
  const echo_protocol_1 = require("@dxos/echo-protocol");
8
8
  const rpc_1 = require("@dxos/rpc");
9
9
  const gen_1 = require("../proto/gen");
10
+ // TODO(burdon): Required by devtools?
10
11
  exports.clientServiceBundle = (0, rpc_1.createServiceBundle)({
11
12
  SystemService: gen_1.schema.getService('dxos.client.SystemService'),
12
13
  ProfileService: gen_1.schema.getService('dxos.client.ProfileService'),
13
14
  PartyService: gen_1.schema.getService('dxos.client.PartyService'),
14
15
  HaloService: gen_1.schema.getService('dxos.client.HaloService'),
16
+ // TODO(burdon): Rename ECHOService?
15
17
  // DataService is provided and implemented internally in ECHO so we import it from there.
16
18
  DataService: echo_protocol_1.schema.getService('dxos.echo.service.DataService'),
17
19
  DevtoolsHost: gen_1.schema.getService('dxos.devtools.DevtoolsHost'),
18
20
  TracingService: gen_1.schema.getService('dxos.devtools.TracingService')
19
21
  });
20
- //# sourceMappingURL=client-service-provider.js.map
22
+ //# sourceMappingURL=client-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-service.js","sourceRoot":"","sources":["../../../src/services/client-service.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAGF,uDAA4E;AAC5E,mCAAgD;AAEhD,sCAAsC;AAgBtC,sCAAsC;AACzB,QAAA,mBAAmB,GAAG,IAAA,yBAAmB,EAAiB;IACrE,aAAa,EAAE,YAAM,CAAC,UAAU,CAAC,2BAA2B,CAAC;IAC7D,cAAc,EAAE,YAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC;IAC/D,YAAY,EAAE,YAAM,CAAC,UAAU,CAAC,0BAA0B,CAAC;IAC3D,WAAW,EAAE,YAAM,CAAC,UAAU,CAAC,yBAAyB,CAAC;IACzD,oCAAoC;IACpC,yFAAyF;IACzF,WAAW,EAAE,sBAAc,CAAC,UAAU,CAAC,+BAA+B,CAAC;IACvE,YAAY,EAAE,YAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC;IAC7D,cAAc,EAAE,YAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC;CAClE,CAAC,CAAC"}
@@ -1,18 +1,21 @@
1
1
  import { Stream } from '@dxos/codec-protobuf';
2
2
  import { ECHO } from '@dxos/echo-db';
3
- import { AddKeyRecordRequest, Contacts, HaloService as IHaloService, SignRequest, SignResponse, SetPreferenceRequest, GetPreferenceRequest, GetPreferenceResponse } from '../../../proto/gen/dxos/client';
4
- import { CreateServicesOpts } from './interfaces';
3
+ import { AddKeyRecordRequest, Contacts, HaloService as IHaloService, SignRequest, SignResponse, SetPreferenceRequest, GetPreferenceRequest, GetPreferenceResponse } from '../../proto/gen/dxos/client';
4
+ import { CreateServicesOpts, HaloSigner } from './types';
5
+ /**
6
+ * HALO service implementation.
7
+ */
5
8
  export declare class HaloService implements IHaloService {
6
- private echo;
7
- constructor(echo: ECHO);
8
- subscribeContacts(): Stream<Contacts>;
9
- addKeyRecord(request: AddKeyRecordRequest): Promise<void>;
10
- private polkadotSign;
9
+ private readonly echo;
10
+ private readonly signer?;
11
+ constructor(echo: ECHO, signer?: HaloSigner | undefined);
11
12
  sign(request: SignRequest): Promise<SignResponse>;
13
+ addKeyRecord(request: AddKeyRecordRequest): Promise<void>;
14
+ subscribeContacts(): Stream<Contacts>;
12
15
  setGlobalPreference(request: SetPreferenceRequest): Promise<void>;
13
16
  getGlobalPreference(request: GetPreferenceRequest): Promise<GetPreferenceResponse>;
14
17
  setDevicePreference(request: SetPreferenceRequest): Promise<void>;
15
18
  getDevicePreference(request: GetPreferenceRequest): Promise<GetPreferenceResponse>;
16
19
  }
17
- export declare const createHaloService: ({ echo }: CreateServicesOpts) => HaloService;
20
+ export declare const createHaloService: ({ echo, signer }: CreateServicesOpts) => HaloService;
18
21
  //# sourceMappingURL=halo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo.d.ts","sourceRoot":"","sources":["../../../../src/services/impl/halo.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAIrC,OAAO,EACL,mBAAmB,EACnB,QAAQ,EACR,WAAW,IAAI,YAAY,EAC3B,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEzD;;GAEG;AACH,qBAAa,WAAY,YAAW,YAAY;IAE5C,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBADP,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,wBAAY;IAKhC,IAAI,CAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAQlD,YAAY,CAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,iBAAiB,IAAK,MAAM,CAAC,QAAQ,CAAC;IA0BhC,mBAAmB,CAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,mBAAmB,CAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAQnF,mBAAmB,CAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,mBAAmB,CAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAO1F;AAED,eAAO,MAAM,iBAAiB,qBAAsB,kBAAkB,KAAG,WAExE,CAAC"}
@@ -7,64 +7,51 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.createHaloService = exports.HaloService = void 0;
10
- // TODO(burdon): Factor out polkadot deps (plugin?)
11
- const keyring_1 = __importDefault(require("@polkadot/keyring"));
12
- const util_crypto_1 = require("@polkadot/util-crypto");
13
10
  const assert_1 = __importDefault(require("assert"));
14
11
  const codec_protobuf_1 = require("@dxos/codec-protobuf");
15
- const credentials_1 = require("@dxos/credentials");
16
12
  const util_1 = require("@dxos/util");
17
- const util_2 = require("../../../util");
13
+ const util_2 = require("../../util");
14
+ /**
15
+ * HALO service implementation.
16
+ */
18
17
  class HaloService {
19
- constructor(echo) {
18
+ constructor(echo, signer) {
20
19
  this.echo = echo;
20
+ this.signer = signer;
21
21
  }
22
- subscribeContacts() {
23
- if (this.echo.halo.isInitialized) {
24
- return (0, util_2.resultSetToStream)(this.echo.halo.queryContacts(), (contacts) => ({ contacts }));
25
- }
26
- else {
27
- return new codec_protobuf_1.Stream(({ next }) => {
28
- // If profile does not exist, send an empty array.
29
- if (!this.echo.halo.isInitialized) {
30
- next({ contacts: [] });
31
- }
32
- const subGroup = new util_1.SubscriptionGroup();
33
- setImmediate(async () => {
34
- await this.echo.halo.identityReady.waitForCondition(() => this.echo.halo.isInitialized);
35
- const resultSet = this.echo.halo.queryContacts();
36
- next({ contacts: resultSet.value });
37
- subGroup.push(resultSet.update.on(() => next({ contacts: resultSet.value })));
38
- });
39
- return () => subGroup.unsubscribe();
40
- });
41
- }
22
+ // TODO(burdon): Rename signMessage? (in interface).
23
+ // TODO(burdon): Why is this part of the interface? (Can it be factored out completely?)
24
+ async sign(request) {
25
+ (0, assert_1.default)(this.signer, 'Signer plugin not set.');
26
+ (0, assert_1.default)(request.publicKey, 'Provide a publicKey of the key that should be used for signing.');
27
+ const key = await this.echo.halo.keyring.getFullKey(request.publicKey);
28
+ (0, assert_1.default)(key, 'Key not found.');
29
+ return this.signer.sign(request, key);
42
30
  }
43
31
  async addKeyRecord(request) {
44
32
  (0, assert_1.default)(request.keyRecord && request.keyRecord.publicKey, 'Missing key record.');
45
33
  await this.echo.halo.keyring.addKeyRecord(request.keyRecord);
46
34
  (0, assert_1.default)(await this.echo.halo.keyring.getKey(request.keyRecord.publicKey), 'Key not inserted correctly.');
47
35
  }
48
- // TODO(burdon): Factor out polkadot deps (plugin?)
49
- async polkadotSign(key, payload) {
50
- await (0, util_crypto_1.cryptoWaitReady)();
51
- (0, assert_1.default)(key.secretKey, 'Secret key is missing.');
52
- const keyring = new keyring_1.default({ type: 'sr25519' });
53
- const keypair = keyring.addFromUri(key.secretKey.toString());
54
- return {
55
- signed: keypair.sign(payload, { withType: true })
56
- };
57
- }
58
- // TODO(burdon): Factor out polkadot deps (plugin?)
59
- async sign(request) {
60
- (0, assert_1.default)(request.publicKey, 'Provide a publicKey of the key that should be used for signing.');
61
- const key = await this.echo.halo.keyring.getFullKey(request.publicKey);
62
- (0, assert_1.default)(key, 'Key not found.');
63
- if (key.type === credentials_1.KeyType.DXNS_ADDRESS) {
64
- (0, assert_1.default)(request.payload, 'No payload to sign.');
65
- return this.polkadotSign(key, request.payload);
36
+ subscribeContacts() {
37
+ if (this.echo.halo.isInitialized) {
38
+ return (0, util_2.resultSetToStream)(this.echo.halo.queryContacts(), (contacts) => ({ contacts }));
66
39
  }
67
- throw new Error('Only DXNS address key signing is supported.');
40
+ // TODO(burdon): Explain non-initialized path.
41
+ return new codec_protobuf_1.Stream(({ next }) => {
42
+ // If profile does not exist, send an empty array.
43
+ if (!this.echo.halo.isInitialized) {
44
+ next({ contacts: [] });
45
+ }
46
+ const subGroup = new util_1.SubscriptionGroup();
47
+ setImmediate(async () => {
48
+ await this.echo.halo.identityReady.waitForCondition(() => this.echo.halo.isInitialized);
49
+ const resultSet = this.echo.halo.queryContacts();
50
+ next({ contacts: resultSet.value });
51
+ subGroup.push(resultSet.update.on(() => next({ contacts: resultSet.value })));
52
+ });
53
+ return () => subGroup.unsubscribe();
54
+ });
68
55
  }
69
56
  async setGlobalPreference(request) {
70
57
  var _a, _b;
@@ -98,8 +85,8 @@ class HaloService {
98
85
  }
99
86
  }
100
87
  exports.HaloService = HaloService;
101
- const createHaloService = ({ echo }) => {
102
- return new HaloService(echo);
88
+ const createHaloService = ({ echo, signer }) => {
89
+ return new HaloService(echo, signer);
103
90
  };
104
91
  exports.createHaloService = createHaloService;
105
92
  //# sourceMappingURL=halo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo.js","sourceRoot":"","sources":["../../../../src/services/impl/halo.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,oDAA4B;AAE5B,yDAA8C;AAG9C,qCAA+C;AAY/C,qCAA+C;AAG/C;;GAEG;AACH,MAAa,WAAW;IACtB,YACmB,IAAU,EACV,MAAmB;QADnB,SAAI,GAAJ,IAAI,CAAM;QACV,WAAM,GAAN,MAAM,CAAa;IACnC,CAAC;IAEJ,oDAAoD;IACpD,wFAAwF;IACxF,KAAK,CAAC,IAAI,CAAE,OAAoB;QAC9B,IAAA,gBAAM,EAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QAC9C,IAAA,gBAAM,EAAC,OAAO,CAAC,SAAS,EAAE,iEAAiE,CAAC,CAAC;QAC7F,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvE,IAAA,gBAAM,EAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,YAAY,CAAE,OAA4B;QAC9C,IAAA,gBAAM,EAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAChF,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAA,gBAAM,EAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,6BAA6B,CAAC,CAAC;IAC1G,CAAC;IAED,iBAAiB;QACf,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAChC,OAAO,IAAA,wBAAiB,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,QAAQ,EAAY,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;SAClG;QAED,8CAA8C;QAC9C,OAAO,IAAI,uBAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YAC7B,kDAAkD;YAClD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACjC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;aACxB;YAED,MAAM,QAAQ,GAAG,IAAI,wBAAiB,EAAE,CAAC;YAEzC,YAAY,CAAC,KAAK,IAAI,EAAE;gBACtB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAExF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjD,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;YAEH,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAE,OAA6B;;QACtD,IAAA,gBAAM,EAAC,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;QAChD,MAAM,WAAW,GAA4B,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,oBAAoB,EAAE,0CAAE,KAAK,CAAC;QAChH,IAAA,gBAAM,EAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;QACnD,MAAM,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAE,OAA6B;;QACtD,IAAA,gBAAM,EAAC,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;QAChD,MAAM,WAAW,GAA4B,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,oBAAoB,EAAE,0CAAE,KAAK,CAAC;QAChH,OAAO;YACL,KAAK,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;SAC7C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAE,OAA6B;;QACtD,IAAA,gBAAM,EAAC,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;QAChD,MAAM,WAAW,GAA4B,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,oBAAoB,EAAE,0CAAE,KAAK,CAAC;QAChH,IAAA,gBAAM,EAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;QACnD,MAAM,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAE,OAA6B;;QACtD,IAAA,gBAAM,EAAC,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;QAChD,MAAM,WAAW,GAA4B,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,0CAAE,oBAAoB,EAAE,0CAAE,KAAK,CAAC;QAChH,OAAO;YACL,KAAK,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC;SAC7C,CAAC;IACJ,CAAC;CACF;AA7ED,kCA6EC;AAEM,MAAM,iBAAiB,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAsB,EAAe,EAAE;IACrF,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B"}