protobufs

This commit is contained in:
Christien Rioux 2023-07-08 10:38:23 -04:00
parent 41906366e6
commit 776976c7a7
11 changed files with 1809 additions and 186 deletions

View File

@ -1,3 +1,4 @@
#!/bin/bash
set -e
dart run build_runner build
protoc --dart_out=lib/entities proto/veilidchat.proto

View File

@ -1,9 +1,4 @@
import 'dart:typed_data';
import 'package:change_case/change_case.dart';
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:uuid/uuid.dart';
import 'package:veilid/veilid.dart';
part 'identity.freezed.dart';

View File

@ -1,9 +1,7 @@
import 'dart:typed_data';
import 'package:change_case/change_case.dart';
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:uuid/uuid.dart';
import 'package:veilid/veilid.dart';
import 'identity.dart';

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,55 @@
//
// Generated code. Do not modify.
// source: proto/veilidchat.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class AttachmentKind extends $pb.ProtobufEnum {
static const AttachmentKind ATTACHMENT_KIND_UNSPECIFIED = AttachmentKind._(0, _omitEnumNames ? '' : 'ATTACHMENT_KIND_UNSPECIFIED');
static const AttachmentKind ATTACHMENT_KIND_FILE = AttachmentKind._(1, _omitEnumNames ? '' : 'ATTACHMENT_KIND_FILE');
static const AttachmentKind ATTACHMENT_KIND_IMAGE = AttachmentKind._(2, _omitEnumNames ? '' : 'ATTACHMENT_KIND_IMAGE');
static const $core.List<AttachmentKind> values = <AttachmentKind> [
ATTACHMENT_KIND_UNSPECIFIED,
ATTACHMENT_KIND_FILE,
ATTACHMENT_KIND_IMAGE,
];
static final $core.Map<$core.int, AttachmentKind> _byValue = $pb.ProtobufEnum.initByValue(values);
static AttachmentKind? valueOf($core.int value) => _byValue[value];
const AttachmentKind._($core.int v, $core.String n) : super(v, n);
}
class Availability extends $pb.ProtobufEnum {
static const Availability AVAILABILITY_UNSPECIFIED = Availability._(0, _omitEnumNames ? '' : 'AVAILABILITY_UNSPECIFIED');
static const Availability AVAILABILITY_OFFLINE = Availability._(1, _omitEnumNames ? '' : 'AVAILABILITY_OFFLINE');
static const Availability AVAILABILITY_FREE = Availability._(2, _omitEnumNames ? '' : 'AVAILABILITY_FREE');
static const Availability AVAILABILITY_BUSY = Availability._(3, _omitEnumNames ? '' : 'AVAILABILITY_BUSY');
static const Availability AVAILABILITY_AWAY = Availability._(4, _omitEnumNames ? '' : 'AVAILABILITY_AWAY');
static const $core.List<Availability> values = <Availability> [
AVAILABILITY_UNSPECIFIED,
AVAILABILITY_OFFLINE,
AVAILABILITY_FREE,
AVAILABILITY_BUSY,
AVAILABILITY_AWAY,
];
static final $core.Map<$core.int, Availability> _byValue = $pb.ProtobufEnum.initByValue(values);
static Availability? valueOf($core.int value) => _byValue[value];
const Availability._($core.int v, $core.String n) : super(v, n);
}
const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');

View File

@ -0,0 +1,309 @@
//
// Generated code. Do not modify.
// source: proto/veilidchat.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use attachmentKindDescriptor instead')
const AttachmentKind$json = {
'1': 'AttachmentKind',
'2': [
{'1': 'ATTACHMENT_KIND_UNSPECIFIED', '2': 0},
{'1': 'ATTACHMENT_KIND_FILE', '2': 1},
{'1': 'ATTACHMENT_KIND_IMAGE', '2': 2},
],
};
/// Descriptor for `AttachmentKind`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List attachmentKindDescriptor = $convert.base64Decode(
'Cg5BdHRhY2htZW50S2luZBIfChtBVFRBQ0hNRU5UX0tJTkRfVU5TUEVDSUZJRUQQABIYChRBVF'
'RBQ0hNRU5UX0tJTkRfRklMRRABEhkKFUFUVEFDSE1FTlRfS0lORF9JTUFHRRAC');
@$core.Deprecated('Use availabilityDescriptor instead')
const Availability$json = {
'1': 'Availability',
'2': [
{'1': 'AVAILABILITY_UNSPECIFIED', '2': 0},
{'1': 'AVAILABILITY_OFFLINE', '2': 1},
{'1': 'AVAILABILITY_FREE', '2': 2},
{'1': 'AVAILABILITY_BUSY', '2': 3},
{'1': 'AVAILABILITY_AWAY', '2': 4},
],
};
/// Descriptor for `Availability`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List availabilityDescriptor = $convert.base64Decode(
'CgxBdmFpbGFiaWxpdHkSHAoYQVZBSUxBQklMSVRZX1VOU1BFQ0lGSUVEEAASGAoUQVZBSUxBQk'
'lMSVRZX09GRkxJTkUQARIVChFBVkFJTEFCSUxJVFlfRlJFRRACEhUKEUFWQUlMQUJJTElUWV9C'
'VVNZEAMSFQoRQVZBSUxBQklMSVRZX0FXQVkQBA==');
@$core.Deprecated('Use cryptoKeyDescriptor instead')
const CryptoKey$json = {
'1': 'CryptoKey',
'2': [
{'1': 'u0', '3': 1, '4': 1, '5': 7, '10': 'u0'},
{'1': 'u1', '3': 2, '4': 1, '5': 7, '10': 'u1'},
{'1': 'u2', '3': 3, '4': 1, '5': 7, '10': 'u2'},
{'1': 'u3', '3': 4, '4': 1, '5': 7, '10': 'u3'},
{'1': 'u4', '3': 5, '4': 1, '5': 7, '10': 'u4'},
{'1': 'u5', '3': 6, '4': 1, '5': 7, '10': 'u5'},
{'1': 'u6', '3': 7, '4': 1, '5': 7, '10': 'u6'},
{'1': 'u7', '3': 8, '4': 1, '5': 7, '10': 'u7'},
],
};
/// Descriptor for `CryptoKey`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List cryptoKeyDescriptor = $convert.base64Decode(
'CglDcnlwdG9LZXkSDgoCdTAYASABKAdSAnUwEg4KAnUxGAIgASgHUgJ1MRIOCgJ1MhgDIAEoB1'
'ICdTISDgoCdTMYBCABKAdSAnUzEg4KAnU0GAUgASgHUgJ1NBIOCgJ1NRgGIAEoB1ICdTUSDgoC'
'dTYYByABKAdSAnU2Eg4KAnU3GAggASgHUgJ1Nw==');
@$core.Deprecated('Use signatureDescriptor instead')
const Signature$json = {
'1': 'Signature',
'2': [
{'1': 'u0', '3': 1, '4': 1, '5': 7, '10': 'u0'},
{'1': 'u1', '3': 2, '4': 1, '5': 7, '10': 'u1'},
{'1': 'u2', '3': 3, '4': 1, '5': 7, '10': 'u2'},
{'1': 'u3', '3': 4, '4': 1, '5': 7, '10': 'u3'},
{'1': 'u4', '3': 5, '4': 1, '5': 7, '10': 'u4'},
{'1': 'u5', '3': 6, '4': 1, '5': 7, '10': 'u5'},
{'1': 'u6', '3': 7, '4': 1, '5': 7, '10': 'u6'},
{'1': 'u7', '3': 8, '4': 1, '5': 7, '10': 'u7'},
{'1': 'u8', '3': 9, '4': 1, '5': 7, '10': 'u8'},
{'1': 'u9', '3': 10, '4': 1, '5': 7, '10': 'u9'},
{'1': 'u10', '3': 11, '4': 1, '5': 7, '10': 'u10'},
{'1': 'u11', '3': 12, '4': 1, '5': 7, '10': 'u11'},
{'1': 'u12', '3': 13, '4': 1, '5': 7, '10': 'u12'},
{'1': 'u13', '3': 14, '4': 1, '5': 7, '10': 'u13'},
{'1': 'u14', '3': 15, '4': 1, '5': 7, '10': 'u14'},
{'1': 'u15', '3': 16, '4': 1, '5': 7, '10': 'u15'},
],
};
/// Descriptor for `Signature`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List signatureDescriptor = $convert.base64Decode(
'CglTaWduYXR1cmUSDgoCdTAYASABKAdSAnUwEg4KAnUxGAIgASgHUgJ1MRIOCgJ1MhgDIAEoB1'
'ICdTISDgoCdTMYBCABKAdSAnUzEg4KAnU0GAUgASgHUgJ1NBIOCgJ1NRgGIAEoB1ICdTUSDgoC'
'dTYYByABKAdSAnU2Eg4KAnU3GAggASgHUgJ1NxIOCgJ1OBgJIAEoB1ICdTgSDgoCdTkYCiABKA'
'dSAnU5EhAKA3UxMBgLIAEoB1IDdTEwEhAKA3UxMRgMIAEoB1IDdTExEhAKA3UxMhgNIAEoB1ID'
'dTEyEhAKA3UxMxgOIAEoB1IDdTEzEhAKA3UxNBgPIAEoB1IDdTE0EhAKA3UxNRgQIAEoB1IDdT'
'E1');
@$core.Deprecated('Use nonceDescriptor instead')
const Nonce$json = {
'1': 'Nonce',
'2': [
{'1': 'u0', '3': 1, '4': 1, '5': 7, '10': 'u0'},
{'1': 'u1', '3': 2, '4': 1, '5': 7, '10': 'u1'},
{'1': 'u2', '3': 3, '4': 1, '5': 7, '10': 'u2'},
{'1': 'u3', '3': 4, '4': 1, '5': 7, '10': 'u3'},
{'1': 'u4', '3': 5, '4': 1, '5': 7, '10': 'u4'},
{'1': 'u5', '3': 6, '4': 1, '5': 7, '10': 'u5'},
],
};
/// Descriptor for `Nonce`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List nonceDescriptor = $convert.base64Decode(
'CgVOb25jZRIOCgJ1MBgBIAEoB1ICdTASDgoCdTEYAiABKAdSAnUxEg4KAnUyGAMgASgHUgJ1Mh'
'IOCgJ1MxgEIAEoB1ICdTMSDgoCdTQYBSABKAdSAnU0Eg4KAnU1GAYgASgHUgJ1NQ==');
@$core.Deprecated('Use typedKeyDescriptor instead')
const TypedKey$json = {
'1': 'TypedKey',
'2': [
{'1': 'kind', '3': 1, '4': 1, '5': 7, '10': 'kind'},
{'1': 'value', '3': 2, '4': 1, '5': 11, '6': '.CryptoKey', '10': 'value'},
],
};
/// Descriptor for `TypedKey`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List typedKeyDescriptor = $convert.base64Decode(
'CghUeXBlZEtleRISCgRraW5kGAEgASgHUgRraW5kEiAKBXZhbHVlGAIgASgLMgouQ3J5cHRvS2'
'V5UgV2YWx1ZQ==');
@$core.Deprecated('Use dHTDataDescriptor instead')
const DHTData$json = {
'1': 'DHTData',
'2': [
{'1': 'keys', '3': 1, '4': 3, '5': 11, '6': '.TypedKey', '10': 'keys'},
{'1': 'hash', '3': 2, '4': 1, '5': 11, '6': '.TypedKey', '10': 'hash'},
{'1': 'chunk', '3': 3, '4': 1, '5': 13, '10': 'chunk'},
{'1': 'size', '3': 4, '4': 1, '5': 13, '10': 'size'},
],
};
/// Descriptor for `DHTData`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List dHTDataDescriptor = $convert.base64Decode(
'CgdESFREYXRhEh0KBGtleXMYASADKAsyCS5UeXBlZEtleVIEa2V5cxIdCgRoYXNoGAIgASgLMg'
'kuVHlwZWRLZXlSBGhhc2gSFAoFY2h1bmsYAyABKA1SBWNodW5rEhIKBHNpemUYBCABKA1SBHNp'
'emU=');
@$core.Deprecated('Use dHTListDescriptor instead')
const DHTList$json = {
'1': 'DHTList',
'2': [
{'1': 'keys', '3': 1, '4': 3, '5': 11, '6': '.TypedKey', '10': 'keys'},
{'1': 'index', '3': 2, '4': 3, '5': 13, '10': 'index'},
],
};
/// Descriptor for `DHTList`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List dHTListDescriptor = $convert.base64Decode(
'CgdESFRMaXN0Eh0KBGtleXMYASADKAsyCS5UeXBlZEtleVIEa2V5cxIUCgVpbmRleBgCIAMoDV'
'IFaW5kZXg=');
@$core.Deprecated('Use dHTLogDescriptor instead')
const DHTLog$json = {
'1': 'DHTLog',
'2': [
{'1': 'keys', '3': 1, '4': 3, '5': 11, '6': '.TypedKey', '10': 'keys'},
{'1': 'back', '3': 2, '4': 1, '5': 11, '6': '.TypedKey', '10': 'back'},
{'1': 'subkey_counts', '3': 3, '4': 3, '5': 13, '10': 'subkeyCounts'},
{'1': 'total_subkeys', '3': 4, '4': 1, '5': 13, '10': 'totalSubkeys'},
],
};
/// Descriptor for `DHTLog`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List dHTLogDescriptor = $convert.base64Decode(
'CgZESFRMb2cSHQoEa2V5cxgBIAMoCzIJLlR5cGVkS2V5UgRrZXlzEh0KBGJhY2sYAiABKAsyCS'
'5UeXBlZEtleVIEYmFjaxIjCg1zdWJrZXlfY291bnRzGAMgAygNUgxzdWJrZXlDb3VudHMSIwoN'
'dG90YWxfc3Via2V5cxgEIAEoDVIMdG90YWxTdWJrZXlz');
@$core.Deprecated('Use dataReferenceDescriptor instead')
const DataReference$json = {
'1': 'DataReference',
'2': [
{'1': 'dht_data', '3': 1, '4': 1, '5': 11, '6': '.TypedKey', '9': 0, '10': 'dhtData'},
],
'8': [
{'1': 'kind'},
],
};
/// Descriptor for `DataReference`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List dataReferenceDescriptor = $convert.base64Decode(
'Cg1EYXRhUmVmZXJlbmNlEiYKCGRodF9kYXRhGAEgASgLMgkuVHlwZWRLZXlIAFIHZGh0RGF0YU'
'IGCgRraW5k');
@$core.Deprecated('Use attachmentDescriptor instead')
const Attachment$json = {
'1': 'Attachment',
'2': [
{'1': 'kind', '3': 1, '4': 1, '5': 14, '6': '.AttachmentKind', '10': 'kind'},
{'1': 'mime', '3': 2, '4': 1, '5': 9, '10': 'mime'},
{'1': 'name', '3': 3, '4': 1, '5': 9, '10': 'name'},
{'1': 'content', '3': 4, '4': 1, '5': 11, '6': '.DataReference', '10': 'content'},
{'1': 'signature', '3': 5, '4': 1, '5': 11, '6': '.Signature', '10': 'signature'},
],
};
/// Descriptor for `Attachment`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List attachmentDescriptor = $convert.base64Decode(
'CgpBdHRhY2htZW50EiMKBGtpbmQYASABKA4yDy5BdHRhY2htZW50S2luZFIEa2luZBISCgRtaW'
'1lGAIgASgJUgRtaW1lEhIKBG5hbWUYAyABKAlSBG5hbWUSKAoHY29udGVudBgEIAEoCzIOLkRh'
'dGFSZWZlcmVuY2VSB2NvbnRlbnQSKAoJc2lnbmF0dXJlGAUgASgLMgouU2lnbmF0dXJlUglzaW'
'duYXR1cmU=');
@$core.Deprecated('Use messageDescriptor instead')
const Message$json = {
'1': 'Message',
'2': [
{'1': 'author', '3': 1, '4': 1, '5': 11, '6': '.TypedKey', '10': 'author'},
{'1': 'timestamp', '3': 2, '4': 1, '5': 4, '10': 'timestamp'},
{'1': 'text', '3': 3, '4': 1, '5': 9, '10': 'text'},
{'1': 'signature', '3': 4, '4': 1, '5': 11, '6': '.Signature', '10': 'signature'},
{'1': 'attachments', '3': 5, '4': 3, '5': 11, '6': '.Attachment', '10': 'attachments'},
],
};
/// Descriptor for `Message`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List messageDescriptor = $convert.base64Decode(
'CgdNZXNzYWdlEiEKBmF1dGhvchgBIAEoCzIJLlR5cGVkS2V5UgZhdXRob3ISHAoJdGltZXN0YW'
'1wGAIgASgEUgl0aW1lc3RhbXASEgoEdGV4dBgDIAEoCVIEdGV4dBIoCglzaWduYXR1cmUYBCAB'
'KAsyCi5TaWduYXR1cmVSCXNpZ25hdHVyZRItCgthdHRhY2htZW50cxgFIAMoCzILLkF0dGFjaG'
'1lbnRSC2F0dGFjaG1lbnRz');
@$core.Deprecated('Use conversationDescriptor instead')
const Conversation$json = {
'1': 'Conversation',
'2': [
{'1': 'profile', '3': 1, '4': 1, '5': 11, '6': '.Profile', '10': 'profile'},
{'1': 'identity', '3': 2, '4': 1, '5': 9, '10': 'identity'},
{'1': 'messages', '3': 3, '4': 1, '5': 11, '6': '.DHTLog', '10': 'messages'},
],
};
/// Descriptor for `Conversation`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List conversationDescriptor = $convert.base64Decode(
'CgxDb252ZXJzYXRpb24SIgoHcHJvZmlsZRgBIAEoCzIILlByb2ZpbGVSB3Byb2ZpbGUSGgoIaW'
'RlbnRpdHkYAiABKAlSCGlkZW50aXR5EiMKCG1lc3NhZ2VzGAMgASgLMgcuREhUTG9nUghtZXNz'
'YWdlcw==');
@$core.Deprecated('Use contactDescriptor instead')
const Contact$json = {
'1': 'Contact',
'2': [
{'1': 'edited_profile', '3': 1, '4': 1, '5': 11, '6': '.Profile', '10': 'editedProfile'},
{'1': 'remote_profile', '3': 2, '4': 1, '5': 11, '6': '.Profile', '10': 'remoteProfile'},
{'1': 'remote_identity', '3': 3, '4': 1, '5': 9, '10': 'remoteIdentity'},
{'1': 'remote_conversation', '3': 4, '4': 1, '5': 11, '6': '.TypedKey', '10': 'remoteConversation'},
{'1': 'local_conversation', '3': 5, '4': 1, '5': 11, '6': '.TypedKey', '10': 'localConversation'},
{'1': 'show_availability', '3': 6, '4': 1, '5': 8, '10': 'showAvailability'},
],
};
/// Descriptor for `Contact`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List contactDescriptor = $convert.base64Decode(
'CgdDb250YWN0Ei8KDmVkaXRlZF9wcm9maWxlGAEgASgLMgguUHJvZmlsZVINZWRpdGVkUHJvZm'
'lsZRIvCg5yZW1vdGVfcHJvZmlsZRgCIAEoCzIILlByb2ZpbGVSDXJlbW90ZVByb2ZpbGUSJwoP'
'cmVtb3RlX2lkZW50aXR5GAMgASgJUg5yZW1vdGVJZGVudGl0eRI6ChNyZW1vdGVfY29udmVyc2'
'F0aW9uGAQgASgLMgkuVHlwZWRLZXlSEnJlbW90ZUNvbnZlcnNhdGlvbhI4ChJsb2NhbF9jb252'
'ZXJzYXRpb24YBSABKAsyCS5UeXBlZEtleVIRbG9jYWxDb252ZXJzYXRpb24SKwoRc2hvd19hdm'
'FpbGFiaWxpdHkYBiABKAhSEHNob3dBdmFpbGFiaWxpdHk=');
@$core.Deprecated('Use profileDescriptor instead')
const Profile$json = {
'1': 'Profile',
'2': [
{'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
{'1': 'title', '3': 2, '4': 1, '5': 9, '10': 'title'},
{'1': 'status', '3': 3, '4': 1, '5': 9, '10': 'status'},
{'1': 'availability', '3': 4, '4': 1, '5': 14, '6': '.Availability', '10': 'availability'},
{'1': 'icon', '3': 5, '4': 1, '5': 11, '6': '.TypedKey', '10': 'icon'},
],
};
/// Descriptor for `Profile`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List profileDescriptor = $convert.base64Decode(
'CgdQcm9maWxlEhIKBG5hbWUYASABKAlSBG5hbWUSFAoFdGl0bGUYAiABKAlSBXRpdGxlEhYKBn'
'N0YXR1cxgDIAEoCVIGc3RhdHVzEjEKDGF2YWlsYWJpbGl0eRgEIAEoDjINLkF2YWlsYWJpbGl0'
'eVIMYXZhaWxhYmlsaXR5Eh0KBGljb24YBSABKAsyCS5UeXBlZEtleVIEaWNvbg==');
@$core.Deprecated('Use accountDescriptor instead')
const Account$json = {
'1': 'Account',
'2': [
{'1': 'profile', '3': 1, '4': 1, '5': 11, '6': '.Profile', '10': 'profile'},
{'1': 'invisible', '3': 2, '4': 1, '5': 8, '10': 'invisible'},
{'1': 'auto_away_timeout_sec', '3': 3, '4': 1, '5': 13, '10': 'autoAwayTimeoutSec'},
{'1': 'contact_list', '3': 4, '4': 1, '5': 11, '6': '.TypedKey', '10': 'contactList'},
],
};
/// Descriptor for `Account`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List accountDescriptor = $convert.base64Decode(
'CgdBY2NvdW50EiIKB3Byb2ZpbGUYASABKAsyCC5Qcm9maWxlUgdwcm9maWxlEhwKCWludmlzaW'
'JsZRgCIAEoCFIJaW52aXNpYmxlEjEKFWF1dG9fYXdheV90aW1lb3V0X3NlYxgDIAEoDVISYXV0'
'b0F3YXlUaW1lb3V0U2VjEiwKDGNvbnRhY3RfbGlzdBgEIAEoCzIJLlR5cGVkS2V5Ugtjb250YW'
'N0TGlzdA==');

View File

@ -0,0 +1,14 @@
//
// Generated code. Do not modify.
// source: proto/veilidchat.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'veilidchat.pb.dart';

View File

@ -1,195 +1,245 @@
syntax = "proto3";
// import 'dart:typed_data';
// 32-byte value in bigendian format
message CryptoKey {
fixed32 u0 = 1;
fixed32 u1 = 2;
fixed32 u2 = 3;
fixed32 u3 = 4;
fixed32 u4 = 5;
fixed32 u5 = 6;
fixed32 u6 = 7;
fixed32 u7 = 8;
}
// import 'package:change_case/change_case.dart';
// import 'package:flutter/material.dart';
// import 'package:freezed_annotation/freezed_annotation.dart';
// import 'package:uuid/uuid.dart';
// import 'package:veilid/veilid.dart';
// 64-byte value in bigendian format
message Signature {
fixed32 u0 = 1;
fixed32 u1 = 2;
fixed32 u2 = 3;
fixed32 u3 = 4;
fixed32 u4 = 5;
fixed32 u5 = 6;
fixed32 u6 = 7;
fixed32 u7 = 8;
fixed32 u8 = 9;
fixed32 u9 = 10;
fixed32 u10 = 11;
fixed32 u11 = 12;
fixed32 u12 = 13;
fixed32 u13 = 14;
fixed32 u14 = 15;
fixed32 u15 = 16;
}
// part 'dht.freezed.dart';
// part 'dht.g.dart';
// 24-byte value in bigendian format
message Nonce {
fixed32 u0 = 1;
fixed32 u1 = 2;
fixed32 u2 = 3;
fixed32 u3 = 4;
fixed32 u4 = 5;
fixed32 u5 = 6;
}
// // DHTData - represents chunked blob data in the DHT
// // Header in subkey 0 follows this structure
// //
// // Subkeys 1..=stride on the first key are concatenated chunks
// // Subkeys 0..stride on the 'keys' keys are concatenated chunks
// //
// // Keys must use writable schema in order to make this data mutable
// @freezed
// class DHTData with _$DHTData {
// const factory DHTData({
// // Other keys to concatenate
// required List<TypedKey> keys,
// // Hash of reassembled data to verify contents
// required TypedHashDigest hash,
// // Subkeys per key
// required int stride,
// // Chunk size per subkey
// required int chunk,
// // Total data size
// required int size,
// }) = _DHTData;
// factory DHTData.fromJson(Map<String, dynamic> json) => _$DHTData(json);
// }
// 36-byte typed crpyto key
message TypedKey {
// CryptoKind FourCC in bigendian format
fixed32 kind = 1;
// Key value
CryptoKey value = 2;
}
// // DHTList - represents an ordered collection of individual elements
// // Header in subkey 0 follows this structure
// //
// // Subkeys 1..=stride on the first key are individual elements
// // Subkeys 0..stride on the 'keys' keys are also individual elements
// //
// // Keys must use writable schema in order to make this list mutable
// @freezed
// class DHTList with _$DHTList {
// const factory DHTList({
// // Other keys to concatenate
// required List<TypedKey> keys,
// // Subkeys per key
// required int stride,
// // Item position index
// // Actual item location is:
// // idx = index[n] + 1 (offset for header at idx 0)
// // key = idx / stride
// // subkey = idx % stride
// required List<int> index,
// }) = _DHTList;
// factory DHTList.fromJson(Map<String, dynamic> json) => _$DHTList(json);
// }
// DHTData - represents chunked blob data in the DHT
// Header in subkey 0 follows this structure
//
// stride = descriptor subkey count on first key - 1
// Subkeys 1..=stride on the first key are concatenated chunks
// Subkeys 0..stride on the 'keys' keys are concatenated chunks
//
// Keys must use writable schema in order to make this data mutable
message DHTData {
// Other keys to concatenate
repeated TypedKey keys = 1;
// Hash of reassembled data to verify contents
TypedKey hash = 2;
// Chunk size per subkey
uint32 chunk = 3;
// Total data size
uint32 size = 4;
}
// // A single message as part of a series of messages
// @freezed
// class Message with _$Message {
// const factory Message(
// {
// // Identity public key of the message author
// required TypedKey author,
// // Identity signature of all of the message fields
// required Signature sig,
// // Time the message was sent (ms since epoch)
// required int ts,
// // Text of the message
// required String text}) = _Message;
// DHTList - represents a re-orderable collection of individual elements
// Header in subkey 0 of first key follows this structure
//
// stride = descriptor subkey count on first key - 1
// Subkeys 1..=stride on the first key are individual elements
// Subkeys 0..stride on the 'keys' keys are also individual elements
//
// Keys must use writable schema in order to make this list mutable
message DHTList {
// Other keys to concatenate
repeated TypedKey keys = 1;
// Item position index
// Actual item location is:
// idx = index[n] + 1 (offset for header at idx 0)
// key = idx / stride
// subkey = idx % stride
repeated uint32 index = 2;
// Free items are not represented in the list but can be
// calculated through iteration
}
// factory Message.fromJson(Map<String, dynamic> json) =>
// _$MessageFromJson(json);
// }
// DHTLog - represents an appendable/truncatable log collection of individual elements
// Header in subkey 0 of first key follows this structure
//
// stride = descriptor subkey count on first key - 1
// Subkeys 1..=stride on the first key are individual elements
// Subkeys 0..stride on the 'keys' keys are also individual elements
//
// Keys must use writable schema in order to make this list mutable
message DHTLog {
// Other keys to concatenate
repeated TypedKey keys = 1;
// Back link to another DHTLog further back
TypedKey back = 2;
// Count of subkeys in all keys in this DHTLog
repeated uint32 subkey_counts = 3;
// Total count of subkeys in all keys in this DHTLog including all backlogs
uint32 total_subkeys = 4;
}
// // A record of a chunk of messages as reconciled from a conversation
// // Element of a DHTList of messages
// // DHT Key (Private): messagesKey
// // DHT Secret: messagesSecret
// // Encryption: Symmetric(messagesSecret)
// // * for Conversation messagesSecret is: DH(IdentityA, IdentityB)
// DataReference
// Pointer to data somewhere in Veilid
// Abstraction over DHTData and BlockStore
message DataReference {
oneof kind {
TypedKey dht_data = 1;
// TypedKey block = 2;
}
}
// @freezed
// class Messages with _$Messages {
// const factory Messages(
// {required Profile profile,
// required Identity identity,
// required bool available}) = _Messages;
// AttachmentKind
// Enumeration of well-known attachment types
enum AttachmentKind {
ATTACHMENT_KIND_UNSPECIFIED = 0;
ATTACHMENT_KIND_FILE = 1;
ATTACHMENT_KIND_IMAGE = 2;
}
// factory Messages.fromJson(Map<String, dynamic> json) =>
// _$MessagesFromJson(json);
// }
// A single attachment
message Attachment {
// Type of the data
AttachmentKind kind = 1;
// MIME type of the data
string mime = 2;
// Title or filename
string name = 3;
// Pointer to the data content
DataReference content = 4;
// Author signature over all attachment fields and content fields and bytes
Signature signature = 5;
}
// // A record of a 1-1 chat that is synchronized between
// // two users. Backed up on a DHT key. Visible and encrypted
// // for the other party
// //
// // DHT Schema: SMPL(0,1,[identityPublicKey])
// // DHT Key (UnicastOutbox): localConversation
// // DHT Secret: None
// // Encryption: DH(IdentityA, IdentityB)
// A single message as part of a series of messages
// Messages are stored in an append-only log in DHT
message Message {
// Author of the message
TypedKey author = 1;
// Time the message was sent (us since epoch)
uint64 timestamp = 2;
// Text of the message
string text = 3;
// Author signature over all of the fields and attachment signatures
Signature signature = 4;
// Attachments on the message
repeated Attachment attachments = 5;
}
// @freezed
// class Conversation with _$Conversation {
// const factory Conversation(
// {
// // Profile to publish to friend
// required Profile profile,
// // Identity to publish to friend
// required Identity identity,
// // Messages DHTList
// required TypedKey}) = _Contact;
// A record of a 1-1 chat that is synchronized between
// two users. Visible and encrypted for the other party
//
// DHT Schema: SMPL(0,1,[identityPublicKey])
// DHT Key (UnicastOutbox): localConversation
// DHT Secret: None
// Encryption: DH(IdentityA, IdentityB)
// factory Conversation.fromJson(Map<String, dynamic> json) =>
// _$ConversationFromJson(json);
// }
message Conversation {
// Profile to publish to friend
Profile profile = 1;
// Identity master (JSON) to publish to friend
string identity = 2;
// Messages DHTLog
DHTLog messages = 3;
}
// // A record of a contact that has accepted a contact invitation
// // Contains a copy of the most recent remote profile as well as
// // a locally edited profile.
// // Contains a copy of the most recent identity from the contact's
// // Master identity dht key
// //
// // Stored in ContactList DHTList
// //
// A record of a contact that has accepted a contact invitation
// Contains a copy of the most recent remote profile as well as
// a locally edited profile.
// Contains a copy of the most recent identity from the contact's
// Master identity dht key
//
// Stored in ContactList DHTList
message Contact {
// Friend's profile as locally edited
Profile edited_profile = 1;
// Copy of friend's profile from remote conversation
Profile remote_profile = 2;
// Copy of friend's identity (JSON) from remote conversation
string remote_identity = 3;
// Remote conversation key to sync from friend
TypedKey remote_conversation = 4;
// Our conversation key for friend to sync
TypedKey local_conversation = 5;
// Show availability
bool show_availability = 6;
}
// @freezed
// class Contact with _$Contact {
// const factory Contact({
// // Friend's profile as locally edited
// required Profile editedProfile,
// // Copy of friend's profile from remote conversation
// required Profile remoteProfile,
// // Copy of friend's identity from remote conversation
// required Identity remoteIdentity,
// // Remote conversation key to sync from friend
// required TypedKey remoteConversation,
// // Our conversation key for friend to sync
// required TypedKey localConversation,
// }) = _Contact;
// Contact availability as specified by the
enum Availability {
AVAILABILITY_UNSPECIFIED = 0;
AVAILABILITY_OFFLINE = 1;
AVAILABILITY_FREE = 2;
AVAILABILITY_BUSY = 3;
AVAILABILITY_AWAY = 4;
}
// factory Contact.fromJson(Map<String, dynamic> json) =>
// _$ContactFromJson(json);
// }
// Publicly shared profile information for both contacts and accounts
// Contains:
// Name - Friendly name
// Title - Title of user
// Icon - Little picture to represent user in contact list
//
// DHT Key: None
// Encryption: None
message Profile {
// Friendy name
string name = 1;
// Title of user
string title = 2;
// Status/away message
string status = 3;
// Availability
Availability availability = 4;
// Icon DHTData
TypedKey icon = 5;
}
// // Publicly shared profile information for both contacts and accounts
// // Contains:
// // Name - Friendly name
// // Title - Title of user
// // Icon - Little picture to represent user in contact list
// //
// // DHT Key: None
// // Encryption: None
// @freezed
// class Profile with _$Profile {
// const factory Profile({
// // Friendy name
// required String name,
// // Title of user
// required String title,
// // Status/away message
// required String status,
// // Icon DHTData
// required TypedKey icon,
// }) = _Profile;
// factory Profile.fromJson(Map<String, dynamic> json) =>
// _$ProfileFromJson(json);
// }
// // A record of an individual account
// //
// // DHT Schema: DFLT(1)
// // DHT Key (Private): accountPublicKey
// // DHT Secret: accountSecretKey
// @freezed
// class Account with _$Account {
// const factory Account({
// // The user's profile that gets shared with contacts
// required Profile profile,
// // Invisibility makes you always look 'Offline'
// required bool invisible,
// // Auto-away sets 'away' mode after an inactivity time
// required autoAwayTimeoutSec,
// // The contacts DHTList for this account
// // Schema: SMPL(0,64,[accountPublicKey]) Encryption: accountSecretKey
// required TypedKey contactList,
// }) = _Account;
// factory Account.fromJson(Map<String, dynamic> json) =>
// _$AccountFromJson(json);
// }
// A record of an individual account
// Pointed to by the identity account map in the identity key
//
// DHT Schema: DFLT(1)
// DHT Key (Private): accountPublicKey
// DHT Secret: accountSecretKey
message Account {
// The user's profile that gets shared with contacts
Profile profile = 1;
// Invisibility makes you always look 'Offline'
bool invisible = 2;
// Auto-away sets 'away' mode after an inactivity time
uint32 auto_away_timeout_sec = 3;
// The contacts DHTList for this account
// Schema: SMPL(0,64,[accountPublicKey]) Encryption: accountSecretKey
TypedKey contact_list = 4;
}

View File

@ -298,7 +298,7 @@ packages:
source: hosted
version: "1.0.1"
fixnum:
dependency: transitive
dependency: "direct main"
description:
name: fixnum
sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
@ -629,6 +629,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.2.4"
protobuf:
dependency: "direct main"
description:
name: protobuf
sha256: "4034a02b7e231e7e60bff30a8ac13a7347abfdac0798595fae0b90a3f0afe759"
url: "https://pub.dev"
source: hosted
version: "3.0.0"
pub_semver:
dependency: transitive
description:

View File

@ -36,6 +36,8 @@ dependencies:
radix_colors: ^1.0.4
flutter_translate: ^4.0.4
intl: ^0.18.0
fixnum: ^1.1.0
protobuf: ^3.0.0
dev_dependencies:
flutter_test:

View File

@ -18,7 +18,6 @@ $VEILIDDIR/setup_linux.sh
# run setup for veilid_flutter
$VEILIDDIR/veilid-flutter/setup_flutter.sh
# ensure protoc is installed
if command -v protoc &> /dev/null; then
echo '[X] protoc is available in the path'