@dxos/client 2.23.1-dev.ed17952c → 2.24.1-dev.79448ad7

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 (36) hide show
  1. package/dist/src/api/halo-proxy.d.ts +1 -6
  2. package/dist/src/api/halo-proxy.d.ts.map +1 -1
  3. package/dist/src/api/halo-proxy.js +1 -10
  4. package/dist/src/api/halo-proxy.js.map +1 -1
  5. package/dist/src/client/client.d.ts +4 -4
  6. package/dist/src/client/client.d.ts.map +1 -1
  7. package/dist/src/client/client.js +16 -8
  8. package/dist/src/client/client.js.map +1 -1
  9. package/dist/src/client/client.test.js +11 -8
  10. package/dist/src/client/client.test.js.map +1 -1
  11. package/dist/src/client/local-client.test.js +8 -5
  12. package/dist/src/client/local-client.test.js.map +1 -1
  13. package/dist/src/client/service-host/service-host.js +5 -5
  14. package/dist/src/client/service-host/service-host.js.map +1 -1
  15. package/dist/src/client/service-host/services/profile.d.ts +1 -4
  16. package/dist/src/client/service-host/services/profile.d.ts.map +1 -1
  17. package/dist/src/proto/gen/dxos/halo/keys.d.ts +2 -1
  18. package/dist/src/proto/gen/dxos/halo/keys.d.ts.map +1 -1
  19. package/dist/src/proto/gen/dxos/halo/keys.js +1 -0
  20. package/dist/src/proto/gen/dxos/halo/keys.js.map +1 -1
  21. package/dist/src/proto/gen/google/protobuf.d.ts +2 -2
  22. package/dist/src/proto/gen/google/protobuf.d.ts.map +1 -1
  23. package/dist/src/proto/gen/google/protobuf.js.map +1 -1
  24. package/dist/src/proto/gen/index.d.ts.map +1 -1
  25. package/dist/src/proto/gen/index.js +1 -1
  26. package/dist/src/proto/gen/index.js.map +1 -1
  27. package/dist/tsconfig.tsbuildinfo +1 -1
  28. package/package.json +19 -19
  29. package/src/api/halo-proxy.ts +1 -12
  30. package/src/client/client.test.ts +13 -10
  31. package/src/client/client.ts +19 -9
  32. package/src/client/local-client.test.ts +10 -7
  33. package/src/client/service-host/service-host.ts +6 -6
  34. package/src/proto/gen/dxos/halo/keys.ts +2 -1
  35. package/src/proto/gen/google/protobuf.ts +2 -2
  36. package/src/proto/gen/index.ts +1 -1
@@ -6,7 +6,7 @@ import assert from 'assert';
6
6
  import debug from 'debug';
7
7
 
8
8
  import { synchronized } from '@dxos/async';
9
- import { Config, defs } from '@dxos/config';
9
+ import { Config, ConfigV1Object } from '@dxos/config';
10
10
  import { InvalidParameterError, TimeoutError } from '@dxos/debug';
11
11
  import { OpenProgress, sortItemsTopologically } from '@dxos/echo-db';
12
12
  import { DatabaseSnapshot } from '@dxos/echo-protocol';
@@ -17,6 +17,7 @@ import { RpcPort } from '@dxos/rpc';
17
17
  import { EchoProxy, HaloProxy } from '../api';
18
18
  import { DevtoolsHook } from '../devtools';
19
19
  import { ClientServiceProvider, ClientServices, RemoteServiceConnectionTimeout } from '../interfaces';
20
+ import { InvalidConfigurationError } from '../interfaces/errors';
20
21
  import { System } from '../proto/gen/dxos/config';
21
22
  import { createWindowMessagePort, isNode } from '../util';
22
23
  import { ClientServiceHost } from './service-host';
@@ -24,12 +25,17 @@ import { ClientServiceProxy } from './service-proxy';
24
25
 
25
26
  const log = debug('dxos:client');
26
27
 
27
- export const defaultConfig: defs.Config = {};
28
+ const EXPECTED_CONFIG_VERSION = 1;
28
29
 
29
- export const defaultTestingConfig: defs.Config = {
30
- services: {
31
- signal: {
32
- server: 'ws://localhost:4000'
30
+ export const defaultConfig: ConfigV1Object = { version: 1 };
31
+
32
+ export const defaultTestingConfig: ConfigV1Object = {
33
+ version: 1,
34
+ runtime: {
35
+ services: {
36
+ signal: {
37
+ server: 'ws://localhost:4000'
38
+ }
33
39
  }
34
40
  }
35
41
  };
@@ -63,19 +69,23 @@ export class Client {
63
69
  * Creates the client object based on supplied configuration.
64
70
  * Requires initialization after creating by calling `.initialize()`.
65
71
  */
66
- constructor (config: defs.Config | Config = {}, options: ClientOptions = {}) {
72
+ constructor (config: ConfigV1Object | Config = { version: 1 }, options: ClientOptions = {}) {
67
73
  if (typeof config !== 'object' || config == null) {
68
74
  throw new InvalidParameterError('Invalid config.');
69
75
  }
70
76
  this._config = (config instanceof Config) ? config : new Config(config);
71
77
 
78
+ if (Object.keys(this._config.values).length > 0 && this._config.values.version !== EXPECTED_CONFIG_VERSION) {
79
+ throw new InvalidConfigurationError(`Expected config version 1, got ${this._config.values.version}.`);
80
+ }
81
+
72
82
  this._options = options;
73
83
 
74
84
  // TODO(burdon): Default error level: 'dxos:*:error'
75
85
  // TODO(burdon): config.getProperty('system.debug', process.env.DEBUG, '');
76
- debug.enable(this._config.values.system?.debug ?? process.env.DEBUG ?? 'dxos:*:error');
86
+ debug.enable(this._config.values.runtime?.system?.debug ?? process.env.DEBUG ?? 'dxos:*:error');
77
87
 
78
- this._mode = this._config.get('system.mode', System.Mode.AUTOMATIC)!;
88
+ this._mode = this._config.get('runtime.client.mode', System.Mode.AUTOMATIC)!;
79
89
  log(`mode=${System.Mode[this._mode]}`);
80
90
  }
81
91
 
@@ -6,7 +6,7 @@ import expect from 'expect';
6
6
  import { it as test } from 'mocha';
7
7
 
8
8
  import { waitForCondition } from '@dxos/async';
9
- import { defs } from '@dxos/config';
9
+ import { ConfigV1Object } from '@dxos/config';
10
10
 
11
11
  import { Client } from './client';
12
12
 
@@ -31,11 +31,14 @@ describe('Client', () => {
31
31
 
32
32
  describe('With persistent storage', () => {
33
33
  test('persistent storage', async () => {
34
- const config: defs.Config = {
35
- system: {
36
- storage: {
37
- persistent: true,
38
- path: `/tmp/dxos-${Date.now()}`
34
+ const config: ConfigV1Object = {
35
+ version: 1,
36
+ runtime: {
37
+ client: {
38
+ storage: {
39
+ persistent: true,
40
+ path: `/tmp/dxos-${Date.now()}`
41
+ }
39
42
  }
40
43
  }
41
44
  };
@@ -54,7 +57,7 @@ describe('Client', () => {
54
57
  {
55
58
  const client = new Client(config);
56
59
  await client.initialize();
57
- await waitForCondition(() => client.halo.hasProfile());
60
+ await waitForCondition(() => !!client.halo.profile);
58
61
 
59
62
  expect(client.halo.profile).toBeDefined();
60
63
  await client.destroy();
@@ -20,8 +20,8 @@ export class ClientServiceHost implements ClientServiceProvider {
20
20
  private readonly _config: Config
21
21
  ) {
22
22
  const { feedStorage, keyStorage, snapshotStorage, metadataStorage } = createStorageObjects(
23
- this._config.get('system.storage', {})!,
24
- this._config.get('system.enableSnapshots', false)
23
+ this._config.get('runtime.client.storage', {})!,
24
+ this._config.get('runtime.client.enableSnapshots', false)
25
25
  );
26
26
 
27
27
  this._echo = new ECHO({
@@ -30,12 +30,12 @@ export class ClientServiceHost implements ClientServiceProvider {
30
30
  snapshotStorage,
31
31
  metadataStorage,
32
32
  networkManagerOptions: {
33
- signal: this._config.get('services.signal.server') ? [this._config.get('services.signal.server')!] : undefined,
34
- ice: this._config.get('services.ice'),
33
+ signal: this._config.get('runtime.services.signal.server') ? [this._config.get('runtime.services.signal.server')!] : undefined,
34
+ ice: this._config.get('runtime.services.ice'),
35
35
  log: true
36
36
  },
37
- snapshots: this._config.get('system.enableSnapshots', false),
38
- snapshotInterval: this._config.get('system.snapshotInterval')
37
+ snapshots: this._config.get('runtime.client.enableSnapshots', false),
38
+ snapshotInterval: this._config.get('runtime.client.snapshotInterval')
39
39
  });
40
40
 
41
41
  this.services = {
@@ -15,7 +15,8 @@ export enum KeyType {
15
15
  IDENTITY = 1,
16
16
  DEVICE = 2,
17
17
  PARTY = 3,
18
- FEED = 4
18
+ FEED = 4,
19
+ DXNS = 5
19
20
  }
20
21
  export interface PubKey {
21
22
  data?: Uint8Array;
@@ -10,8 +10,6 @@ import * as dxos_echo_service from "../dxos/echo/service";
10
10
  import * as dxos_echo_snapshot from "../dxos/echo/snapshot";
11
11
  import * as dxos_halo_keys from "../dxos/halo/keys";
12
12
  import * as dxos_rpc from "../dxos/rpc";
13
- export interface Empty {
14
- }
15
13
  export interface Timestamp {
16
14
  seconds?: string;
17
15
  nanos?: number;
@@ -257,6 +255,8 @@ export namespace GeneratedCodeInfo {
257
255
  end?: number;
258
256
  }
259
257
  }
258
+ export interface Empty {
259
+ }
260
260
  export interface Any {
261
261
  type_url?: string;
262
262
  value?: Uint8Array;
@@ -185,5 +185,5 @@ export interface SERVICES {
185
185
  "dxos.devtools.TracingService": dxos_devtools.TracingService;
186
186
  "dxos.echo.service.DataService": dxos_echo_service.DataService;
187
187
  }
188
- export const schemaJson = JSON.parse("{\"nested\":{\"dxos\":{\"nested\":{\"client\":{\"nested\":{\"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},\"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},\"SubscribeContacts\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Contacts\",\"responseStream\":true,\"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},\"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\":{\"App\":{\"fields\":{\"title\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"org\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"theme\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"website\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"publicUrl\":{\"type\":\"string\",\"id\":5,\"options\":{\"(env)\":\"PUBLIC_URL\"},\"comment\":null}},\"comment\":\"App configuration\"},\"Bot\":{\"fields\":{\"uid\":{\"type\":\"string\",\"id\":1,\"options\":{\"(env)\":\"UID\"},\"comment\":null},\"name\":{\"type\":\"string\",\"id\":2,\"options\":{\"(env)\":\"NAME\"},\"comment\":null},\"cwd\":{\"type\":\"string\",\"id\":3,\"options\":{\"(env)\":\"CWD\"},\"comment\":null},\"restarted\":{\"type\":\"bool\",\"id\":4,\"options\":{\"(env)\":\"RESTARTED\"},\"comment\":null},\"reset\":{\"type\":\"bool\",\"id\":5,\"options\":{\"(env)\":\"RESET\"},\"comment\":null},\"peerId\":{\"type\":\"string\",\"id\":6,\"options\":{\"(env)\":\"PEER_ID\"},\"comment\":null},\"topic\":{\"type\":\"string\",\"id\":7,\"options\":{\"(env)\":\"TOPIC\"},\"comment\":null},\"secretKey\":{\"type\":\"string\",\"id\":8,\"options\":{\"(env)\":\"SECRET_KEY\"},\"comment\":null},\"localDev\":{\"type\":\"bool\",\"id\":9,\"options\":{\"(env)\":\"LOCAL_DEV\"},\"comment\":null},\"nodePath\":{\"type\":\"string\",\"id\":10,\"options\":{\"(env)\":\"NODE_PATH\"},\"comment\":null},\"controlTopic\":{\"type\":\"string\",\"id\":11,\"options\":{\"(env)\":\"CONTROL_TOPIC\"},\"comment\":null},\"dumpFile\":{\"type\":\"string\",\"id\":12,\"options\":{\"(env)\":\"DUMP_FILE\"},\"comment\":null},\"ipc\":{\"type\":\"Ipc\",\"id\":13,\"options\":{\"(env)\":\"IPC\"},\"comment\":null}},\"nested\":{\"Ipc\":{\"fields\":{\"portFrom\":{\"type\":\"int32\",\"id\":1,\"options\":{\"(env)\":\"PORT_FROM\"},\"comment\":null},\"portTo\":{\"type\":\"int32\",\"id\":2,\"options\":{\"(env)\":\"PORT_TO\"},\"comment\":null},\"serverId\":{\"type\":\"string\",\"id\":3,\"options\":{\"(env)\":\"SERVER_ID\"},\"comment\":null}},\"comment\":null}},\"comment\":\"Bot configuration\"},\"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\":\"Build metadata\"},\"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}},\"comment\":null}},\"comment\":null},\"Config\":{\"fields\":{\"system\":{\"type\":\"System\",\"id\":1,\"options\":{\"(env)\":\"SYSTEM\"},\"comment\":null},\"services\":{\"type\":\"Services\",\"id\":2,\"comment\":null},\"build\":{\"type\":\"Build\",\"id\":11,\"comment\":\"Build metdata\"},\"app\":{\"type\":\"App\",\"id\":101,\"options\":{\"(env)\":\"APP\"},\"comment\":\"App configuration. Incuded if this configuration is for an app.\"},\"bot\":{\"type\":\"Bot\",\"id\":102,\"options\":{\"(env)\":\"BOT\"},\"comment\":\"App configuration. Incuded if this configuration is for a bot.\"},\"cli\":{\"type\":\"CLI\",\"id\":103,\"comment\":\"CLI configuration.\"},\"custom\":{\"keyType\":\"string\",\"type\":\"string\",\"id\":1001,\"comment\":\"Custom configuration as string key-value pairs.\"}},\"comment\":null},\"env\":{\"type\":\"string\",\"id\":5001,\"extend\":\"google.protobuf.FieldOptions\",\"comment\":\"Name of the system env variable this config option maps to.\\nFor nested defintions names are concatenated with underscores.\"},\"regex\":{\"type\":\"string\",\"id\":5002,\"extend\":\"google.protobuf.FieldOptions\",\"comment\":\"Regex to validate string options.\"},\"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\":\"BotFactoryClient\",\"id\":8,\"comment\":null}},\"nested\":{\"AppServer\":{\"fields\":{\"prefix\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"server\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"BotFactoryClient\":{\"fields\":{\"topic\":{\"type\":\"string\",\"id\":1,\"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.\"}},\"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}},\"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}},\"comment\":null}},\"comment\":\"Services provided to all DXOS agents\"},\"System\":{\"fields\":{\"certEndpoint\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"debug\":{\"type\":\"string\",\"id\":2,\"options\":{\"(env)\":\"DEBUG\"},\"comment\":null},\"storage\":{\"type\":\"Storage\",\"id\":3,\"comment\":null},\"enableSnapshots\":{\"type\":\"bool\",\"id\":4,\"comment\":null},\"snapshotInterval\":{\"type\":\"int32\",\"id\":5,\"comment\":\"Milliseconds\"},\"invitationExpiration\":{\"type\":\"int32\",\"id\":6,\"comment\":\"Milliseconds\"},\"mode\":{\"type\":\"Mode\",\"id\":7,\"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}}},\"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\":\"google.protobuf.Timestamp\",\"id\":5,\"comment\":null},\"lastStateChange\":{\"type\":\"google.protobuf.Timestamp\",\"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\":\"Item creation.\"},\"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}},\"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}},\"comment\":null},\"HaloStateSnapshot\":{\"fields\":{\"messages\":{\"rule\":\"repeated\",\"type\":\"dxos.CredentialsMessage\",\"id\":1,\"comment\":null}},\"comment\":null},\"ItemSnapshot\":{\"fields\":{\"itemId\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"itemType\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"modelType\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"modelVersion\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"parentId\":{\"type\":\"string\",\"id\":5,\"comment\":null},\"model\":{\"type\":\"ModelSnapshot\",\"id\":6,\"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},\"ModelMutationArray\":{\"fields\":{\"mutations\":{\"rule\":\"repeated\",\"type\":\"ModelMutation\",\"id\":1,\"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\":[\"custom\",\"array\"],\"comment\":null}},\"fields\":{\"custom\":{\"type\":\"bytes\",\"id\":1,\"comment\":null},\"array\":{\"type\":\"ModelMutationArray\",\"id\":2,\"comment\":null}},\"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},\"comment\":null,\"comments\":{\"UNKNOWN\":null,\"IDENTITY\":null,\"DEVICE\":null,\"PARTY\":null,\"FEED\":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}}}}}}}");
188
+ export const schemaJson = JSON.parse("{\"nested\":{\"dxos\":{\"nested\":{\"client\":{\"nested\":{\"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},\"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},\"SubscribeContacts\":{\"requestType\":\"google.protobuf.Empty\",\"responseType\":\"Contacts\",\"responseStream\":true,\"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},\"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\":{\"App\":{\"fields\":{\"title\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"org\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"theme\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"website\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"publicUrl\":{\"type\":\"string\",\"id\":5,\"options\":{\"(env)\":\"PUBLIC_URL\"},\"comment\":null}},\"comment\":\"App configuration\"},\"Bot\":{\"fields\":{\"uid\":{\"type\":\"string\",\"id\":1,\"options\":{\"(env)\":\"UID\"},\"comment\":null},\"name\":{\"type\":\"string\",\"id\":2,\"options\":{\"(env)\":\"NAME\"},\"comment\":null},\"cwd\":{\"type\":\"string\",\"id\":3,\"options\":{\"(env)\":\"CWD\"},\"comment\":null},\"restarted\":{\"type\":\"bool\",\"id\":4,\"options\":{\"(env)\":\"RESTARTED\"},\"comment\":null},\"reset\":{\"type\":\"bool\",\"id\":5,\"options\":{\"(env)\":\"RESET\"},\"comment\":null},\"peerId\":{\"type\":\"string\",\"id\":6,\"options\":{\"(env)\":\"PEER_ID\"},\"comment\":null},\"topic\":{\"type\":\"string\",\"id\":7,\"options\":{\"(env)\":\"TOPIC\"},\"comment\":null},\"secretKey\":{\"type\":\"string\",\"id\":8,\"options\":{\"(env)\":\"SECRET_KEY\"},\"comment\":null},\"localDev\":{\"type\":\"bool\",\"id\":9,\"options\":{\"(env)\":\"LOCAL_DEV\"},\"comment\":null},\"nodePath\":{\"type\":\"string\",\"id\":10,\"options\":{\"(env)\":\"NODE_PATH\"},\"comment\":null},\"controlTopic\":{\"type\":\"string\",\"id\":11,\"options\":{\"(env)\":\"CONTROL_TOPIC\"},\"comment\":null},\"dumpFile\":{\"type\":\"string\",\"id\":12,\"options\":{\"(env)\":\"DUMP_FILE\"},\"comment\":null},\"ipc\":{\"type\":\"Ipc\",\"id\":13,\"options\":{\"(env)\":\"IPC\"},\"comment\":null}},\"nested\":{\"Ipc\":{\"fields\":{\"portFrom\":{\"type\":\"int32\",\"id\":1,\"options\":{\"(env)\":\"PORT_FROM\"},\"comment\":null},\"portTo\":{\"type\":\"int32\",\"id\":2,\"options\":{\"(env)\":\"PORT_TO\"},\"comment\":null},\"serverId\":{\"type\":\"string\",\"id\":3,\"options\":{\"(env)\":\"SERVER_ID\"},\"comment\":null}},\"comment\":null}},\"comment\":\"Bot configuration\"},\"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\":\"Build metadata\"},\"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}},\"comment\":null}},\"comment\":null},\"Config\":{\"fields\":{\"system\":{\"type\":\"System\",\"id\":1,\"options\":{\"(env)\":\"SYSTEM\"},\"comment\":null},\"services\":{\"type\":\"Services\",\"id\":2,\"comment\":null},\"build\":{\"type\":\"Build\",\"id\":11,\"comment\":\"Build metdata\"},\"app\":{\"type\":\"App\",\"id\":101,\"options\":{\"(env)\":\"APP\"},\"comment\":\"App configuration. Incuded if this configuration is for an app.\"},\"bot\":{\"type\":\"Bot\",\"id\":102,\"options\":{\"(env)\":\"BOT\"},\"comment\":\"App configuration. Incuded if this configuration is for a bot.\"},\"cli\":{\"type\":\"CLI\",\"id\":103,\"comment\":\"CLI configuration.\"},\"custom\":{\"keyType\":\"string\",\"type\":\"string\",\"id\":1001,\"comment\":\"Custom configuration as string key-value pairs.\"}},\"comment\":null},\"env\":{\"type\":\"string\",\"id\":5001,\"extend\":\"google.protobuf.FieldOptions\",\"comment\":\"Name of the system env variable this config option maps to.\\nFor nested defintions names are concatenated with underscores.\"},\"regex\":{\"type\":\"string\",\"id\":5002,\"extend\":\"google.protobuf.FieldOptions\",\"comment\":\"Regex to validate string options.\"},\"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\":\"BotFactoryClient\",\"id\":8,\"comment\":null}},\"nested\":{\"AppServer\":{\"fields\":{\"prefix\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"server\":{\"type\":\"string\",\"id\":2,\"comment\":null}},\"comment\":null},\"BotFactoryClient\":{\"fields\":{\"topic\":{\"type\":\"string\",\"id\":1,\"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.\"}},\"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}},\"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}},\"comment\":null}},\"comment\":\"Services provided to all DXOS agents\"},\"System\":{\"fields\":{\"certEndpoint\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"debug\":{\"type\":\"string\",\"id\":2,\"options\":{\"(env)\":\"DEBUG\"},\"comment\":null},\"storage\":{\"type\":\"Storage\",\"id\":3,\"comment\":null},\"enableSnapshots\":{\"type\":\"bool\",\"id\":4,\"comment\":null},\"snapshotInterval\":{\"type\":\"int32\",\"id\":5,\"comment\":\"Milliseconds\"},\"invitationExpiration\":{\"type\":\"int32\",\"id\":6,\"comment\":\"Milliseconds\"},\"mode\":{\"type\":\"Mode\",\"id\":7,\"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}}},\"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\":\"google.protobuf.Timestamp\",\"id\":5,\"comment\":null},\"lastStateChange\":{\"type\":\"google.protobuf.Timestamp\",\"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\":\"Item creation.\"},\"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}},\"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}},\"comment\":null},\"HaloStateSnapshot\":{\"fields\":{\"messages\":{\"rule\":\"repeated\",\"type\":\"dxos.CredentialsMessage\",\"id\":1,\"comment\":null}},\"comment\":null},\"ItemSnapshot\":{\"fields\":{\"itemId\":{\"type\":\"string\",\"id\":1,\"comment\":null},\"itemType\":{\"type\":\"string\",\"id\":2,\"comment\":null},\"modelType\":{\"type\":\"string\",\"id\":3,\"comment\":null},\"modelVersion\":{\"type\":\"string\",\"id\":4,\"comment\":null},\"parentId\":{\"type\":\"string\",\"id\":5,\"comment\":null},\"model\":{\"type\":\"ModelSnapshot\",\"id\":6,\"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},\"ModelMutationArray\":{\"fields\":{\"mutations\":{\"rule\":\"repeated\",\"type\":\"ModelMutation\",\"id\":1,\"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\":[\"custom\",\"array\"],\"comment\":null}},\"fields\":{\"custom\":{\"type\":\"bytes\",\"id\":1,\"comment\":null},\"array\":{\"type\":\"ModelMutationArray\",\"id\":2,\"comment\":null}},\"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\":5},\"comment\":null,\"comments\":{\"UNKNOWN\":null,\"IDENTITY\":null,\"DEVICE\":null,\"PARTY\":null,\"FEED\":null,\"DXNS\":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}}}}}}}");
189
189
  export const schema = Schema.fromJson<TYPES, SERVICES>(schemaJson, substitutions);