From b79dc26aff78d10adf71cf63fba1ab1f22fe20f7 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 7 Oct 2022 10:55:02 +1300 Subject: [PATCH 01/49] treewide: add prefixes to internal proto package names --- .../trustix-nix-reprod/reprod-api/api.pb.go | 409 +++++++++--------- .../trustix-nix-reprod/reprod-api/api.proto | 2 + .../reprod_apiconnect/api.connect.go | 57 +-- packages/trustix-proto/api/api.pb.go | 378 ++++++++-------- packages/trustix-proto/api/api.proto | 8 +- .../api/apiconnect/api.connect.go | 124 +++--- packages/trustix-proto/doc.md | 212 ++++----- packages/trustix-proto/rpc/rpc.pb.go | 246 ++++++----- packages/trustix-proto/rpc/rpc.proto | 14 +- .../rpc/rpcconnect/rpc.connect.go | 94 ++-- packages/trustix-proto/schema/loghead.pb.go | 37 +- packages/trustix-proto/schema/loghead.proto | 1 + packages/trustix-proto/schema/logleaf.pb.go | 27 +- packages/trustix-proto/schema/logleaf.proto | 1 + packages/trustix-proto/schema/mapentry.pb.go | 23 +- packages/trustix-proto/schema/mapentry.proto | 1 + packages/trustix-proto/schema/queue.pb.go | 21 +- packages/trustix-proto/schema/queue.proto | 1 + 18 files changed, 855 insertions(+), 801 deletions(-) diff --git a/packages/trustix-nix-reprod/reprod-api/api.pb.go b/packages/trustix-nix-reprod/reprod-api/api.pb.go index dad0ae1b..6f832104 100644 --- a/packages/trustix-nix-reprod/reprod-api/api.pb.go +++ b/packages/trustix-nix-reprod/reprod-api/api.pb.go @@ -5,7 +5,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.19.4 +// protoc v3.21.6 // source: reprod-api/api.proto package reprod_api @@ -705,172 +705,191 @@ var File_reprod_api_api_proto protoreflect.FileDescriptor var file_reprod_api_api_proto_rawDesc = []byte{ 0x0a, 0x14, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x69, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3c, 0x0a, 0x20, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x72, - 0x76, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x72, 0x76, - 0x50, 0x61, 0x74, 0x68, 0x22, 0xbb, 0x0b, 0x0a, 0x21, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x72, - 0x76, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x72, 0x76, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x67, 0x0a, 0x11, 0x55, 0x6e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x39, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x55, 0x6e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, - 0x50, 0x61, 0x74, 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x55, 0x6e, 0x72, 0x65, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x61, 0x0a, - 0x0f, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0f, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, - 0x12, 0x58, 0x0a, 0x0c, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x22, 0x3c, 0x0a, 0x20, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x55, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x58, 0x0a, 0x0c, 0x4d, 0x69, - 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x74, 0x68, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, - 0x61, 0x74, 0x68, 0x73, 0x1a, 0x2e, 0x0a, 0x14, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, - 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06, 0x4c, 0x6f, - 0x67, 0x49, 0x44, 0x73, 0x1a, 0xad, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, - 0x69, 0x0a, 0x0c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x72, 0x76, + 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x72, 0x76, 0x50, + 0x61, 0x74, 0x68, 0x22, 0xe5, 0x0c, 0x0a, 0x21, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x1a, 0x78, 0x0a, 0x11, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xd3, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x07, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x72, 0x76, + 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x72, 0x76, 0x50, + 0x61, 0x74, 0x68, 0x12, 0x75, 0x0a, 0x11, 0x55, 0x6e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, + 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x55, 0x6e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, + 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x55, 0x6e, 0x72, 0x65, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x6f, 0x0a, 0x0f, 0x52, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, + 0x50, 0x61, 0x74, 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x52, 0x65, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x66, 0x0a, 0x0c, 0x55, + 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x42, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x12, 0x66, 0x0a, 0x0c, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x61, + 0x74, 0x68, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x72, 0x65, 0x70, 0x72, + 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x69, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x50, 0x61, 0x74, 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x4d, + 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x74, 0x68, 0x73, 0x1a, 0x2e, 0x0a, 0x14, 0x44, + 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x03, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x1a, 0xca, 0x02, 0x0a, 0x10, + 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x77, 0x0a, 0x0c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x53, 0x2e, 0x72, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, + 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2e, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, 0x1a, + 0x86, 0x01, 0x0a, 0x11, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x1a, 0x6f, 0x0a, 0x0c, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x44, 0x65, 0x72, + 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xef, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x07, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, + 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x07, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x1a, 0x7d, 0x0a, 0x0c, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x57, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x72, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x16, 0x55, 0x6e, - 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x81, 0x01, 0x0a, 0x16, 0x55, + 0x6e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7f, + 0x0a, 0x14, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, + 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x71, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x50, 0x61, 0x74, - 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x6e, 0x0a, 0x11, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x74, - 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x6e, 0x0a, 0x11, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x74, - 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xa2, 0x01, 0x0a, 0x22, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, + 0x7c, 0x0a, 0x11, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7c, 0x0a, + 0x11, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x74, 0x68, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x51, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, 0x01, 0x0a, 0x22, + 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x06, 0x45, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x45, 0x76, + 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x45, 0x76, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x18, 0x0a, 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x63, + 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, + 0x22, 0x98, 0x01, 0x0a, 0x25, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x72, 0x65, 0x70, + 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x50, 0x63, + 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x22, 0x7e, 0x0a, 0x24, 0x41, + 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x74, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x41, 0x74, 0x74, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x53, 0x74, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x74, 0x6f, + 0x70, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x3a, 0x0a, 0x18, 0x53, + 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x50, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x41, 0x74, 0x74, + 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x30, 0x0a, 0x18, 0x53, 0x75, 0x67, 0x67, 0x65, + 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x74, 0x74, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x41, 0x74, 0x74, 0x72, 0x73, 0x22, 0x51, 0x0a, 0x0b, 0x44, 0x69, 0x66, + 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x31, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x32, 0x22, 0x2a, 0x0a, 0x0c, + 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x48, 0x54, 0x4d, 0x4c, 0x44, 0x69, 0x66, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x48, 0x54, 0x4d, 0x4c, 0x44, 0x69, 0x66, 0x66, 0x32, 0xd1, 0x03, 0x0a, 0x12, 0x52, 0x65, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x50, 0x49, 0x12, + 0x80, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2f, 0x2e, + 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x8c, 0x01, 0x0a, 0x1d, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x76, 0x61, - 0x6c, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x45, 0x76, 0x61, 0x6c, 0x49, - 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x45, 0x76, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x45, 0x76, 0x61, 0x6c, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, - 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x22, 0x8a, 0x01, 0x0a, 0x25, 0x41, 0x74, 0x74, 0x72, - 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, - 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x24, - 0x0a, 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x65, 0x64, 0x22, 0x7e, 0x0a, 0x24, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x41, 0x74, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x41, 0x74, 0x74, 0x72, - 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x3a, 0x0a, 0x18, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x22, 0x30, 0x0a, 0x18, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x41, 0x74, 0x74, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x41, 0x74, 0x74, - 0x72, 0x73, 0x22, 0x51, 0x0a, 0x0b, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x31, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, - 0x73, 0x68, 0x31, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, - 0x68, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x48, 0x61, 0x73, 0x68, 0x32, 0x22, 0x2a, 0x0a, 0x0c, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x48, 0x54, 0x4d, 0x4c, 0x44, 0x69, 0x66, - 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x48, 0x54, 0x4d, 0x4c, 0x44, 0x69, 0x66, - 0x66, 0x32, 0xdf, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x50, 0x49, 0x12, 0x64, 0x0a, 0x19, 0x44, 0x65, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x21, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x70, - 0x0a, 0x1d, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, - 0x25, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, - 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x4a, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x19, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x25, 0x0a, 0x04, - 0x44, 0x69, 0x66, 0x66, 0x12, 0x0c, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x42, 0x49, 0x5a, 0x47, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, - 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, - 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x6e, 0x69, 0x78, 0x2d, 0x72, 0x65, 0x70, - 0x72, 0x6f, 0x64, 0x2f, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x2d, 0x61, 0x70, 0x69, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x69, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x70, 0x72, + 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x66, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, + 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x04, 0x44, 0x69, 0x66, + 0x66, 0x12, 0x1a, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, + 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x49, 0x5a, 0x47, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, + 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, + 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, + 0x78, 0x2d, 0x6e, 0x69, 0x78, 0x2d, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x2f, 0x72, 0x65, 0x70, + 0x72, 0x6f, 0x64, 0x2d, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -887,47 +906,47 @@ func file_reprod_api_api_proto_rawDescGZIP() []byte { var file_reprod_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_reprod_api_api_proto_goTypes = []interface{}{ - (*DerivationReproducibilityRequest)(nil), // 0: DerivationReproducibilityRequest - (*DerivationReproducibilityResponse)(nil), // 1: DerivationReproducibilityResponse - (*AttrReproducibilityTimeSeriesPoint)(nil), // 2: AttrReproducibilityTimeSeriesPoint - (*AttrReproducibilityTimeSeriesResponse)(nil), // 3: AttrReproducibilityTimeSeriesResponse - (*AttrReproducibilityTimeSeriesRequest)(nil), // 4: AttrReproducibilityTimeSeriesRequest - (*SuggestsAttributeRequest)(nil), // 5: SuggestsAttributeRequest - (*SuggestAttributeResponse)(nil), // 6: SuggestAttributeResponse - (*DiffRequest)(nil), // 7: DiffRequest - (*DiffResponse)(nil), // 8: DiffResponse - (*DerivationReproducibilityResponse_DerivationOutputHash)(nil), // 9: DerivationReproducibilityResponse.DerivationOutputHash - (*DerivationReproducibilityResponse_DerivationOutput)(nil), // 10: DerivationReproducibilityResponse.DerivationOutput - (*DerivationReproducibilityResponse_Derivation)(nil), // 11: DerivationReproducibilityResponse.Derivation - nil, // 12: DerivationReproducibilityResponse.UnreproducedPathsEntry - nil, // 13: DerivationReproducibilityResponse.ReproducedPathsEntry - nil, // 14: DerivationReproducibilityResponse.UnknownPathsEntry - nil, // 15: DerivationReproducibilityResponse.MissingPathsEntry - nil, // 16: DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry - nil, // 17: DerivationReproducibilityResponse.Derivation.OutputsEntry + (*DerivationReproducibilityRequest)(nil), // 0: reprod_api.v1.DerivationReproducibilityRequest + (*DerivationReproducibilityResponse)(nil), // 1: reprod_api.v1.DerivationReproducibilityResponse + (*AttrReproducibilityTimeSeriesPoint)(nil), // 2: reprod_api.v1.AttrReproducibilityTimeSeriesPoint + (*AttrReproducibilityTimeSeriesResponse)(nil), // 3: reprod_api.v1.AttrReproducibilityTimeSeriesResponse + (*AttrReproducibilityTimeSeriesRequest)(nil), // 4: reprod_api.v1.AttrReproducibilityTimeSeriesRequest + (*SuggestsAttributeRequest)(nil), // 5: reprod_api.v1.SuggestsAttributeRequest + (*SuggestAttributeResponse)(nil), // 6: reprod_api.v1.SuggestAttributeResponse + (*DiffRequest)(nil), // 7: reprod_api.v1.DiffRequest + (*DiffResponse)(nil), // 8: reprod_api.v1.DiffResponse + (*DerivationReproducibilityResponse_DerivationOutputHash)(nil), // 9: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash + (*DerivationReproducibilityResponse_DerivationOutput)(nil), // 10: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput + (*DerivationReproducibilityResponse_Derivation)(nil), // 11: reprod_api.v1.DerivationReproducibilityResponse.Derivation + nil, // 12: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry + nil, // 13: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry + nil, // 14: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry + nil, // 15: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry + nil, // 16: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry + nil, // 17: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry } var file_reprod_api_api_proto_depIdxs = []int32{ - 12, // 0: DerivationReproducibilityResponse.UnreproducedPaths:type_name -> DerivationReproducibilityResponse.UnreproducedPathsEntry - 13, // 1: DerivationReproducibilityResponse.ReproducedPaths:type_name -> DerivationReproducibilityResponse.ReproducedPathsEntry - 14, // 2: DerivationReproducibilityResponse.UnknownPaths:type_name -> DerivationReproducibilityResponse.UnknownPathsEntry - 15, // 3: DerivationReproducibilityResponse.MissingPaths:type_name -> DerivationReproducibilityResponse.MissingPathsEntry - 2, // 4: AttrReproducibilityTimeSeriesResponse.Points:type_name -> AttrReproducibilityTimeSeriesPoint - 16, // 5: DerivationReproducibilityResponse.DerivationOutput.OutputHashes:type_name -> DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry - 17, // 6: DerivationReproducibilityResponse.Derivation.Outputs:type_name -> DerivationReproducibilityResponse.Derivation.OutputsEntry - 11, // 7: DerivationReproducibilityResponse.UnreproducedPathsEntry.value:type_name -> DerivationReproducibilityResponse.Derivation - 11, // 8: DerivationReproducibilityResponse.ReproducedPathsEntry.value:type_name -> DerivationReproducibilityResponse.Derivation - 11, // 9: DerivationReproducibilityResponse.UnknownPathsEntry.value:type_name -> DerivationReproducibilityResponse.Derivation - 11, // 10: DerivationReproducibilityResponse.MissingPathsEntry.value:type_name -> DerivationReproducibilityResponse.Derivation - 9, // 11: DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry.value:type_name -> DerivationReproducibilityResponse.DerivationOutputHash - 10, // 12: DerivationReproducibilityResponse.Derivation.OutputsEntry.value:type_name -> DerivationReproducibilityResponse.DerivationOutput - 0, // 13: ReproducibilityAPI.DerivationReproducibility:input_type -> DerivationReproducibilityRequest - 4, // 14: ReproducibilityAPI.AttrReproducibilityTimeSeries:input_type -> AttrReproducibilityTimeSeriesRequest - 5, // 15: ReproducibilityAPI.SuggestAttribute:input_type -> SuggestsAttributeRequest - 7, // 16: ReproducibilityAPI.Diff:input_type -> DiffRequest - 1, // 17: ReproducibilityAPI.DerivationReproducibility:output_type -> DerivationReproducibilityResponse - 3, // 18: ReproducibilityAPI.AttrReproducibilityTimeSeries:output_type -> AttrReproducibilityTimeSeriesResponse - 6, // 19: ReproducibilityAPI.SuggestAttribute:output_type -> SuggestAttributeResponse - 8, // 20: ReproducibilityAPI.Diff:output_type -> DiffResponse + 12, // 0: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry + 13, // 1: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry + 14, // 2: reprod_api.v1.DerivationReproducibilityResponse.UnknownPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry + 15, // 3: reprod_api.v1.DerivationReproducibilityResponse.MissingPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry + 2, // 4: reprod_api.v1.AttrReproducibilityTimeSeriesResponse.Points:type_name -> reprod_api.v1.AttrReproducibilityTimeSeriesPoint + 16, // 5: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashes:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry + 17, // 6: reprod_api.v1.DerivationReproducibilityResponse.Derivation.Outputs:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry + 11, // 7: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 11, // 8: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 11, // 9: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 11, // 10: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 9, // 11: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash + 10, // 12: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput + 0, // 13: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:input_type -> reprod_api.v1.DerivationReproducibilityRequest + 4, // 14: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:input_type -> reprod_api.v1.AttrReproducibilityTimeSeriesRequest + 5, // 15: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:input_type -> reprod_api.v1.SuggestsAttributeRequest + 7, // 16: reprod_api.v1.ReproducibilityAPI.Diff:input_type -> reprod_api.v1.DiffRequest + 1, // 17: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:output_type -> reprod_api.v1.DerivationReproducibilityResponse + 3, // 18: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:output_type -> reprod_api.v1.AttrReproducibilityTimeSeriesResponse + 6, // 19: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:output_type -> reprod_api.v1.SuggestAttributeResponse + 8, // 20: reprod_api.v1.ReproducibilityAPI.Diff:output_type -> reprod_api.v1.DiffResponse 17, // [17:21] is the sub-list for method output_type 13, // [13:17] is the sub-list for method input_type 13, // [13:13] is the sub-list for extension type_name diff --git a/packages/trustix-nix-reprod/reprod-api/api.proto b/packages/trustix-nix-reprod/reprod-api/api.proto index 23d670b0..0a1841bc 100644 --- a/packages/trustix-nix-reprod/reprod-api/api.proto +++ b/packages/trustix-nix-reprod/reprod-api/api.proto @@ -4,6 +4,8 @@ syntax = "proto3"; +package reprod_api.v1; + option go_package = "github.com/nix-community/trustix/packages/trustix-nix-reprod/reprod-api"; message DerivationReproducibilityRequest { string DrvPath = 1; } diff --git a/packages/trustix-nix-reprod/reprod-api/reprod_apiconnect/api.connect.go b/packages/trustix-nix-reprod/reprod-api/reprod_apiconnect/api.connect.go index 9ba3fdd4..e1855cea 100644 --- a/packages/trustix-nix-reprod/reprod-api/reprod_apiconnect/api.connect.go +++ b/packages/trustix-nix-reprod/reprod-api/reprod_apiconnect/api.connect.go @@ -22,10 +22,10 @@ const _ = connect_go.IsAtLeastVersion0_1_0 const ( // ReproducibilityAPIName is the fully-qualified name of the ReproducibilityAPI service. - ReproducibilityAPIName = "ReproducibilityAPI" + ReproducibilityAPIName = "reprod_api.v1.ReproducibilityAPI" ) -// ReproducibilityAPIClient is a client for the ReproducibilityAPI service. +// ReproducibilityAPIClient is a client for the reprod_api.v1.ReproducibilityAPI service. type ReproducibilityAPIClient interface { DerivationReproducibility(context.Context, *connect_go.Request[reprod_api.DerivationReproducibilityRequest]) (*connect_go.Response[reprod_api.DerivationReproducibilityResponse], error) AttrReproducibilityTimeSeries(context.Context, *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesResponse], error) @@ -33,10 +33,10 @@ type ReproducibilityAPIClient interface { Diff(context.Context, *connect_go.Request[reprod_api.DiffRequest]) (*connect_go.Response[reprod_api.DiffResponse], error) } -// NewReproducibilityAPIClient constructs a client for the ReproducibilityAPI service. By default, -// it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and -// sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() -// or connect.WithGRPCWeb() options. +// NewReproducibilityAPIClient constructs a client for the reprod_api.v1.ReproducibilityAPI service. +// By default, it uses the Connect protocol with the binary Protobuf Codec, asks for gzipped +// responses, and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the +// connect.WithGRPC() or connect.WithGRPCWeb() options. // // The URL supplied here should be the base URL for the Connect or gRPC server (for example, // http://api.acme.com or https://acme.com/grpc). @@ -45,22 +45,22 @@ func NewReproducibilityAPIClient(httpClient connect_go.HTTPClient, baseURL strin return &reproducibilityAPIClient{ derivationReproducibility: connect_go.NewClient[reprod_api.DerivationReproducibilityRequest, reprod_api.DerivationReproducibilityResponse]( httpClient, - baseURL+"/.ReproducibilityAPI/DerivationReproducibility", + baseURL+"/reprod_api.v1.ReproducibilityAPI/DerivationReproducibility", opts..., ), attrReproducibilityTimeSeries: connect_go.NewClient[reprod_api.AttrReproducibilityTimeSeriesRequest, reprod_api.AttrReproducibilityTimeSeriesResponse]( httpClient, - baseURL+"/.ReproducibilityAPI/AttrReproducibilityTimeSeries", + baseURL+"/reprod_api.v1.ReproducibilityAPI/AttrReproducibilityTimeSeries", opts..., ), suggestAttribute: connect_go.NewClient[reprod_api.SuggestsAttributeRequest, reprod_api.SuggestAttributeResponse]( httpClient, - baseURL+"/.ReproducibilityAPI/SuggestAttribute", + baseURL+"/reprod_api.v1.ReproducibilityAPI/SuggestAttribute", opts..., ), diff: connect_go.NewClient[reprod_api.DiffRequest, reprod_api.DiffResponse]( httpClient, - baseURL+"/.ReproducibilityAPI/Diff", + baseURL+"/reprod_api.v1.ReproducibilityAPI/Diff", opts..., ), } @@ -74,27 +74,28 @@ type reproducibilityAPIClient struct { diff *connect_go.Client[reprod_api.DiffRequest, reprod_api.DiffResponse] } -// DerivationReproducibility calls ReproducibilityAPI.DerivationReproducibility. +// DerivationReproducibility calls reprod_api.v1.ReproducibilityAPI.DerivationReproducibility. func (c *reproducibilityAPIClient) DerivationReproducibility(ctx context.Context, req *connect_go.Request[reprod_api.DerivationReproducibilityRequest]) (*connect_go.Response[reprod_api.DerivationReproducibilityResponse], error) { return c.derivationReproducibility.CallUnary(ctx, req) } -// AttrReproducibilityTimeSeries calls ReproducibilityAPI.AttrReproducibilityTimeSeries. +// AttrReproducibilityTimeSeries calls +// reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries. func (c *reproducibilityAPIClient) AttrReproducibilityTimeSeries(ctx context.Context, req *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesResponse], error) { return c.attrReproducibilityTimeSeries.CallUnary(ctx, req) } -// SuggestAttribute calls ReproducibilityAPI.SuggestAttribute. +// SuggestAttribute calls reprod_api.v1.ReproducibilityAPI.SuggestAttribute. func (c *reproducibilityAPIClient) SuggestAttribute(ctx context.Context, req *connect_go.Request[reprod_api.SuggestsAttributeRequest]) (*connect_go.Response[reprod_api.SuggestAttributeResponse], error) { return c.suggestAttribute.CallUnary(ctx, req) } -// Diff calls ReproducibilityAPI.Diff. +// Diff calls reprod_api.v1.ReproducibilityAPI.Diff. func (c *reproducibilityAPIClient) Diff(ctx context.Context, req *connect_go.Request[reprod_api.DiffRequest]) (*connect_go.Response[reprod_api.DiffResponse], error) { return c.diff.CallUnary(ctx, req) } -// ReproducibilityAPIHandler is an implementation of the ReproducibilityAPI service. +// ReproducibilityAPIHandler is an implementation of the reprod_api.v1.ReproducibilityAPI service. type ReproducibilityAPIHandler interface { DerivationReproducibility(context.Context, *connect_go.Request[reprod_api.DerivationReproducibilityRequest]) (*connect_go.Response[reprod_api.DerivationReproducibilityResponse], error) AttrReproducibilityTimeSeries(context.Context, *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesResponse], error) @@ -109,44 +110,44 @@ type ReproducibilityAPIHandler interface { // and JSON codecs. They also support gzip compression. func NewReproducibilityAPIHandler(svc ReproducibilityAPIHandler, opts ...connect_go.HandlerOption) (string, http.Handler) { mux := http.NewServeMux() - mux.Handle("/.ReproducibilityAPI/DerivationReproducibility", connect_go.NewUnaryHandler( - "/.ReproducibilityAPI/DerivationReproducibility", + mux.Handle("/reprod_api.v1.ReproducibilityAPI/DerivationReproducibility", connect_go.NewUnaryHandler( + "/reprod_api.v1.ReproducibilityAPI/DerivationReproducibility", svc.DerivationReproducibility, opts..., )) - mux.Handle("/.ReproducibilityAPI/AttrReproducibilityTimeSeries", connect_go.NewUnaryHandler( - "/.ReproducibilityAPI/AttrReproducibilityTimeSeries", + mux.Handle("/reprod_api.v1.ReproducibilityAPI/AttrReproducibilityTimeSeries", connect_go.NewUnaryHandler( + "/reprod_api.v1.ReproducibilityAPI/AttrReproducibilityTimeSeries", svc.AttrReproducibilityTimeSeries, opts..., )) - mux.Handle("/.ReproducibilityAPI/SuggestAttribute", connect_go.NewUnaryHandler( - "/.ReproducibilityAPI/SuggestAttribute", + mux.Handle("/reprod_api.v1.ReproducibilityAPI/SuggestAttribute", connect_go.NewUnaryHandler( + "/reprod_api.v1.ReproducibilityAPI/SuggestAttribute", svc.SuggestAttribute, opts..., )) - mux.Handle("/.ReproducibilityAPI/Diff", connect_go.NewUnaryHandler( - "/.ReproducibilityAPI/Diff", + mux.Handle("/reprod_api.v1.ReproducibilityAPI/Diff", connect_go.NewUnaryHandler( + "/reprod_api.v1.ReproducibilityAPI/Diff", svc.Diff, opts..., )) - return "/.ReproducibilityAPI/", mux + return "/reprod_api.v1.ReproducibilityAPI/", mux } // UnimplementedReproducibilityAPIHandler returns CodeUnimplemented from all methods. type UnimplementedReproducibilityAPIHandler struct{} func (UnimplementedReproducibilityAPIHandler) DerivationReproducibility(context.Context, *connect_go.Request[reprod_api.DerivationReproducibilityRequest]) (*connect_go.Response[reprod_api.DerivationReproducibilityResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("ReproducibilityAPI.DerivationReproducibility is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("reprod_api.v1.ReproducibilityAPI.DerivationReproducibility is not implemented")) } func (UnimplementedReproducibilityAPIHandler) AttrReproducibilityTimeSeries(context.Context, *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("ReproducibilityAPI.AttrReproducibilityTimeSeries is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries is not implemented")) } func (UnimplementedReproducibilityAPIHandler) SuggestAttribute(context.Context, *connect_go.Request[reprod_api.SuggestsAttributeRequest]) (*connect_go.Response[reprod_api.SuggestAttributeResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("ReproducibilityAPI.SuggestAttribute is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("reprod_api.v1.ReproducibilityAPI.SuggestAttribute is not implemented")) } func (UnimplementedReproducibilityAPIHandler) Diff(context.Context, *connect_go.Request[reprod_api.DiffRequest]) (*connect_go.Response[reprod_api.DiffResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("ReproducibilityAPI.Diff is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("reprod_api.v1.ReproducibilityAPI.Diff is not implemented")) } diff --git a/packages/trustix-proto/api/api.pb.go b/packages/trustix-proto/api/api.pb.go index 50bccf98..22668612 100644 --- a/packages/trustix-proto/api/api.pb.go +++ b/packages/trustix-proto/api/api.pb.go @@ -5,7 +5,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.19.4 +// protoc v3.21.6 // source: api/api.proto package api @@ -874,7 +874,7 @@ type LogSigner struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - KeyType *LogSigner_KeyTypes `protobuf:"varint,1,req,name=KeyType,enum=trustix.LogSigner_KeyTypes" json:"KeyType,omitempty"` + KeyType *LogSigner_KeyTypes `protobuf:"varint,1,req,name=KeyType,enum=trustix_api.v1.LogSigner_KeyTypes" json:"KeyType,omitempty"` Public *string `protobuf:"bytes,2,req,name=Public" json:"Public,omitempty"` } @@ -930,7 +930,7 @@ type Log struct { unknownFields protoimpl.UnknownFields LogID *string `protobuf:"bytes,1,req,name=LogID" json:"LogID,omitempty"` - Mode *Log_LogModes `protobuf:"varint,2,req,name=Mode,enum=trustix.Log_LogModes" json:"Mode,omitempty"` + Mode *Log_LogModes `protobuf:"varint,2,req,name=Mode,enum=trustix_api.v1.Log_LogModes" json:"Mode,omitempty"` Protocol *string `protobuf:"bytes,3,req,name=Protocol" json:"Protocol,omitempty"` Signer *LogSigner `protobuf:"bytes,4,req,name=Signer" json:"Signer,omitempty"` Meta map[string]string `protobuf:"bytes,5,rep,name=Meta" json:"Meta,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` @@ -1054,59 +1054,61 @@ var File_api_api_proto protoreflect.FileDescriptor var file_api_api_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x07, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x1a, 0x14, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2f, 0x6c, 0x6f, 0x67, 0x68, 0x65, 0x61, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x66, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x26, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x22, 0x73, 0x0a, 0x1d, - 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, - 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, + 0x0e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x1a, + 0x14, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x6f, 0x67, 0x68, 0x65, 0x61, 0x64, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x6f, + 0x67, 0x6c, 0x65, 0x61, 0x66, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x26, 0x0a, 0x0e, 0x4c, + 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, - 0x67, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x69, 0x72, 0x73, 0x74, 0x53, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, 0x09, 0x46, 0x69, 0x72, 0x73, 0x74, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x03, 0x20, 0x02, 0x28, 0x04, 0x52, 0x0a, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x53, 0x69, 0x7a, - 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0c, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x61, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4c, - 0x6f, 0x67, 0x41, 0x75, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, - 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x1a, 0x0a, 0x08, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x02, 0x28, - 0x04, 0x52, 0x08, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x47, - 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, - 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x18, 0x03, 0x20, 0x02, 0x28, 0x04, 0x52, - 0x06, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x22, 0x56, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x61, - 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, - 0x67, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0c, - 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, - 0x18, 0x03, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x07, 0x4d, 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x22, - 0xac, 0x01, 0x0a, 0x18, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, - 0x74, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x1c, 0x0a, 0x09, - 0x53, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, - 0x09, 0x53, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x15, 0x4e, 0x6f, - 0x6e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x4c, 0x65, 0x61, 0x66, 0x44, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x15, 0x4e, 0x6f, 0x6e, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x4c, 0x65, 0x61, 0x66, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, 0x74, 0x4d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x02, 0x28, - 0x0c, 0x52, 0x07, 0x42, 0x69, 0x74, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x75, - 0x6d, 0x53, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x04, 0x20, 0x02, 0x28, 0x04, - 0x52, 0x0c, 0x4e, 0x75, 0x6d, 0x53, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x61, - 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, - 0x0c, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, - 0x78, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, - 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x22, 0x36, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x61, + 0x67, 0x49, 0x44, 0x22, 0x73, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x46, 0x69, + 0x72, 0x73, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, 0x09, 0x46, + 0x69, 0x72, 0x73, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x02, 0x28, 0x04, 0x52, 0x0a, 0x53, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6f, + 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, + 0x61, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x41, 0x75, 0x64, 0x69, 0x74, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, + 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, + 0x12, 0x14, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, + 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x18, 0x03, 0x20, 0x02, 0x28, 0x04, 0x52, 0x08, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x22, 0x5a, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, + 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, + 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, + 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, + 0x18, 0x03, 0x20, 0x02, 0x28, 0x04, 0x52, 0x06, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x22, 0x56, + 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, + 0x79, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, + 0x4d, 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x07, 0x4d, + 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x22, 0xac, 0x01, 0x0a, 0x18, 0x53, 0x70, 0x61, 0x72, 0x73, + 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09, 0x53, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x12, 0x34, 0x0a, 0x15, 0x4e, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, + 0x69, 0x70, 0x4c, 0x65, 0x61, 0x66, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0c, + 0x52, 0x15, 0x4e, 0x6f, 0x6e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x4c, + 0x65, 0x61, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x42, 0x69, 0x74, 0x4d, 0x61, + 0x73, 0x6b, 0x18, 0x03, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x07, 0x42, 0x69, 0x74, 0x4d, 0x61, 0x73, + 0x6b, 0x12, 0x22, 0x0a, 0x0c, 0x4e, 0x75, 0x6d, 0x53, 0x69, 0x64, 0x65, 0x4e, 0x6f, 0x64, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x02, 0x28, 0x04, 0x52, 0x0c, 0x4e, 0x75, 0x6d, 0x53, 0x69, 0x64, 0x65, + 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x22, 0x68, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x3e, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x4d, 0x65, 0x72, + 0x6b, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, + 0x48, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x61, 0x66, 0x52, 0x06, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x0c, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x56, @@ -1118,86 +1120,98 @@ var file_api_api_proto_rawDesc = []byte{ 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2b, 0x0a, 0x0b, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x22, 0x73, 0x0a, - 0x09, 0x4c, 0x6f, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x07, 0x4b, 0x65, - 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x74, 0x72, - 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x2e, - 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x02, 0x20, 0x02, 0x28, - 0x09, 0x52, 0x06, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x22, 0x17, 0x0a, 0x08, 0x4b, 0x65, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x65, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, - 0x10, 0x00, 0x22, 0x88, 0x02, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, - 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, - 0x12, 0x29, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x15, - 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x2e, 0x4c, 0x6f, 0x67, - 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x2a, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, - 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x52, 0x06, 0x53, 0x69, 0x67, - 0x6e, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x1a, - 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x13, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4d, - 0x6f, 0x64, 0x65, 0x73, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x00, 0x22, 0x30, 0x0a, - 0x0c, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, - 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x74, 0x72, - 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x32, - 0x7d, 0x0a, 0x07, 0x4e, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x49, 0x12, 0x35, 0x0a, 0x04, 0x4c, 0x6f, - 0x67, 0x73, 0x12, 0x14, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, - 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x3b, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x15, 0x2e, - 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xfd, - 0x04, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x41, 0x50, 0x49, 0x12, 0x2e, 0x0a, 0x07, 0x47, 0x65, 0x74, - 0x48, 0x65, 0x61, 0x64, 0x12, 0x17, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, - 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x08, 0x2e, - 0x4c, 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x16, 0x47, 0x65, 0x74, - 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x12, 0x26, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x47, 0x65, + 0x28, 0x09, 0x52, 0x09, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x22, 0x7a, 0x0a, + 0x09, 0x4c, 0x6f, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x07, 0x4b, 0x65, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x74, 0x72, + 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, + 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, + 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x06, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x22, 0x17, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, + 0x65, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x00, 0x22, 0x9d, 0x02, 0x0a, 0x03, 0x4c, 0x6f, + 0x67, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, + 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x6f, + 0x64, 0x65, 0x73, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x31, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, + 0x04, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, + 0x52, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, + 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, + 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x13, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x73, + 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x00, 0x22, 0x37, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x4c, 0x6f, 0x67, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, + 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x04, 0x4c, 0x6f, + 0x67, 0x73, 0x32, 0x99, 0x01, 0x0a, 0x07, 0x4e, 0x6f, 0x64, 0x65, 0x41, 0x50, 0x49, 0x12, 0x43, + 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x1b, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, + 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1c, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf8, + 0x05, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x41, 0x50, 0x49, 0x12, 0x47, 0x0a, 0x07, 0x47, 0x65, 0x74, + 0x48, 0x65, 0x61, 0x64, 0x12, 0x1e, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, + 0x22, 0x00, 0x12, 0x68, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x2d, 0x2e, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x72, - 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x41, - 0x75, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x75, 0x73, - 0x74, 0x69, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x41, 0x75, 0x64, 0x69, 0x74, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x72, - 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x45, - 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, - 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, - 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x19, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, - 0x18, 0x47, 0x65, 0x74, 0x4d, 0x48, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x26, 0x2e, 0x74, 0x72, 0x75, 0x73, - 0x74, 0x69, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x4d, 0x48, 0x4c, 0x6f, 0x67, 0x41, 0x75, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x12, 0x20, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4c, - 0x6f, 0x67, 0x41, 0x75, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x4d, 0x48, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x12, 0x1d, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, - 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3d, - 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, - 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, - 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, - 0x74, 0x69, 0x78, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x70, 0x69, + 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x72, + 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x10, + 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x41, 0x75, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x12, 0x27, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x41, 0x75, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x72, 0x75, 0x73, + 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0d, 0x47, 0x65, + 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x74, 0x72, + 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x61, + 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, + 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x72, 0x75, + 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, + 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4d, 0x48, 0x4c, 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x2d, 0x2e, 0x74, 0x72, 0x75, + 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, + 0x6f, 0x67, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x72, 0x75, 0x73, + 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x4d, 0x48, 0x4c, 0x6f, 0x67, 0x41, 0x75, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x12, 0x27, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x41, 0x75, 0x64, 0x69, 0x74, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x72, 0x75, 0x73, + 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x4d, 0x48, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x24, 0x2e, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, + 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x70, 0x69, } var ( @@ -1215,56 +1229,56 @@ func file_api_api_proto_rawDescGZIP() []byte { var file_api_api_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 17) var file_api_api_proto_goTypes = []interface{}{ - (LogSigner_KeyTypes)(0), // 0: trustix.LogSigner.KeyTypes - (Log_LogModes)(0), // 1: trustix.Log.LogModes - (*LogHeadRequest)(nil), // 2: trustix.LogHeadRequest - (*GetLogConsistencyProofRequest)(nil), // 3: trustix.GetLogConsistencyProofRequest - (*ProofResponse)(nil), // 4: trustix.ProofResponse - (*GetLogAuditProofRequest)(nil), // 5: trustix.GetLogAuditProofRequest - (*GetLogEntriesRequest)(nil), // 6: trustix.GetLogEntriesRequest - (*GetMapValueRequest)(nil), // 7: trustix.GetMapValueRequest - (*SparseCompactMerkleProof)(nil), // 8: trustix.SparseCompactMerkleProof - (*MapValueResponse)(nil), // 9: trustix.MapValueResponse - (*LogEntriesResponse)(nil), // 10: trustix.LogEntriesResponse - (*KeyValuePair)(nil), // 11: trustix.KeyValuePair - (*ValueRequest)(nil), // 12: trustix.ValueRequest - (*ValueResponse)(nil), // 13: trustix.ValueResponse - (*LogsRequest)(nil), // 14: trustix.LogsRequest - (*LogSigner)(nil), // 15: trustix.LogSigner - (*Log)(nil), // 16: trustix.Log - (*LogsResponse)(nil), // 17: trustix.LogsResponse - nil, // 18: trustix.Log.MetaEntry - (*schema.LogLeaf)(nil), // 19: LogLeaf - (*schema.LogHead)(nil), // 20: LogHead + (LogSigner_KeyTypes)(0), // 0: trustix_api.v1.LogSigner.KeyTypes + (Log_LogModes)(0), // 1: trustix_api.v1.Log.LogModes + (*LogHeadRequest)(nil), // 2: trustix_api.v1.LogHeadRequest + (*GetLogConsistencyProofRequest)(nil), // 3: trustix_api.v1.GetLogConsistencyProofRequest + (*ProofResponse)(nil), // 4: trustix_api.v1.ProofResponse + (*GetLogAuditProofRequest)(nil), // 5: trustix_api.v1.GetLogAuditProofRequest + (*GetLogEntriesRequest)(nil), // 6: trustix_api.v1.GetLogEntriesRequest + (*GetMapValueRequest)(nil), // 7: trustix_api.v1.GetMapValueRequest + (*SparseCompactMerkleProof)(nil), // 8: trustix_api.v1.SparseCompactMerkleProof + (*MapValueResponse)(nil), // 9: trustix_api.v1.MapValueResponse + (*LogEntriesResponse)(nil), // 10: trustix_api.v1.LogEntriesResponse + (*KeyValuePair)(nil), // 11: trustix_api.v1.KeyValuePair + (*ValueRequest)(nil), // 12: trustix_api.v1.ValueRequest + (*ValueResponse)(nil), // 13: trustix_api.v1.ValueResponse + (*LogsRequest)(nil), // 14: trustix_api.v1.LogsRequest + (*LogSigner)(nil), // 15: trustix_api.v1.LogSigner + (*Log)(nil), // 16: trustix_api.v1.Log + (*LogsResponse)(nil), // 17: trustix_api.v1.LogsResponse + nil, // 18: trustix_api.v1.Log.MetaEntry + (*schema.LogLeaf)(nil), // 19: trustix_schema.v1.LogLeaf + (*schema.LogHead)(nil), // 20: trustix_schema.v1.LogHead } var file_api_api_proto_depIdxs = []int32{ - 8, // 0: trustix.MapValueResponse.Proof:type_name -> trustix.SparseCompactMerkleProof - 19, // 1: trustix.LogEntriesResponse.Leaves:type_name -> LogLeaf - 0, // 2: trustix.LogSigner.KeyType:type_name -> trustix.LogSigner.KeyTypes - 1, // 3: trustix.Log.Mode:type_name -> trustix.Log.LogModes - 15, // 4: trustix.Log.Signer:type_name -> trustix.LogSigner - 18, // 5: trustix.Log.Meta:type_name -> trustix.Log.MetaEntry - 16, // 6: trustix.LogsResponse.Logs:type_name -> trustix.Log - 14, // 7: trustix.NodeAPI.Logs:input_type -> trustix.LogsRequest - 12, // 8: trustix.NodeAPI.GetValue:input_type -> trustix.ValueRequest - 2, // 9: trustix.LogAPI.GetHead:input_type -> trustix.LogHeadRequest - 3, // 10: trustix.LogAPI.GetLogConsistencyProof:input_type -> trustix.GetLogConsistencyProofRequest - 5, // 11: trustix.LogAPI.GetLogAuditProof:input_type -> trustix.GetLogAuditProofRequest - 6, // 12: trustix.LogAPI.GetLogEntries:input_type -> trustix.GetLogEntriesRequest - 7, // 13: trustix.LogAPI.GetMapValue:input_type -> trustix.GetMapValueRequest - 3, // 14: trustix.LogAPI.GetMHLogConsistencyProof:input_type -> trustix.GetLogConsistencyProofRequest - 5, // 15: trustix.LogAPI.GetMHLogAuditProof:input_type -> trustix.GetLogAuditProofRequest - 6, // 16: trustix.LogAPI.GetMHLogEntries:input_type -> trustix.GetLogEntriesRequest - 17, // 17: trustix.NodeAPI.Logs:output_type -> trustix.LogsResponse - 13, // 18: trustix.NodeAPI.GetValue:output_type -> trustix.ValueResponse - 20, // 19: trustix.LogAPI.GetHead:output_type -> LogHead - 4, // 20: trustix.LogAPI.GetLogConsistencyProof:output_type -> trustix.ProofResponse - 4, // 21: trustix.LogAPI.GetLogAuditProof:output_type -> trustix.ProofResponse - 10, // 22: trustix.LogAPI.GetLogEntries:output_type -> trustix.LogEntriesResponse - 9, // 23: trustix.LogAPI.GetMapValue:output_type -> trustix.MapValueResponse - 4, // 24: trustix.LogAPI.GetMHLogConsistencyProof:output_type -> trustix.ProofResponse - 4, // 25: trustix.LogAPI.GetMHLogAuditProof:output_type -> trustix.ProofResponse - 10, // 26: trustix.LogAPI.GetMHLogEntries:output_type -> trustix.LogEntriesResponse + 8, // 0: trustix_api.v1.MapValueResponse.Proof:type_name -> trustix_api.v1.SparseCompactMerkleProof + 19, // 1: trustix_api.v1.LogEntriesResponse.Leaves:type_name -> trustix_schema.v1.LogLeaf + 0, // 2: trustix_api.v1.LogSigner.KeyType:type_name -> trustix_api.v1.LogSigner.KeyTypes + 1, // 3: trustix_api.v1.Log.Mode:type_name -> trustix_api.v1.Log.LogModes + 15, // 4: trustix_api.v1.Log.Signer:type_name -> trustix_api.v1.LogSigner + 18, // 5: trustix_api.v1.Log.Meta:type_name -> trustix_api.v1.Log.MetaEntry + 16, // 6: trustix_api.v1.LogsResponse.Logs:type_name -> trustix_api.v1.Log + 14, // 7: trustix_api.v1.NodeAPI.Logs:input_type -> trustix_api.v1.LogsRequest + 12, // 8: trustix_api.v1.NodeAPI.GetValue:input_type -> trustix_api.v1.ValueRequest + 2, // 9: trustix_api.v1.LogAPI.GetHead:input_type -> trustix_api.v1.LogHeadRequest + 3, // 10: trustix_api.v1.LogAPI.GetLogConsistencyProof:input_type -> trustix_api.v1.GetLogConsistencyProofRequest + 5, // 11: trustix_api.v1.LogAPI.GetLogAuditProof:input_type -> trustix_api.v1.GetLogAuditProofRequest + 6, // 12: trustix_api.v1.LogAPI.GetLogEntries:input_type -> trustix_api.v1.GetLogEntriesRequest + 7, // 13: trustix_api.v1.LogAPI.GetMapValue:input_type -> trustix_api.v1.GetMapValueRequest + 3, // 14: trustix_api.v1.LogAPI.GetMHLogConsistencyProof:input_type -> trustix_api.v1.GetLogConsistencyProofRequest + 5, // 15: trustix_api.v1.LogAPI.GetMHLogAuditProof:input_type -> trustix_api.v1.GetLogAuditProofRequest + 6, // 16: trustix_api.v1.LogAPI.GetMHLogEntries:input_type -> trustix_api.v1.GetLogEntriesRequest + 17, // 17: trustix_api.v1.NodeAPI.Logs:output_type -> trustix_api.v1.LogsResponse + 13, // 18: trustix_api.v1.NodeAPI.GetValue:output_type -> trustix_api.v1.ValueResponse + 20, // 19: trustix_api.v1.LogAPI.GetHead:output_type -> trustix_schema.v1.LogHead + 4, // 20: trustix_api.v1.LogAPI.GetLogConsistencyProof:output_type -> trustix_api.v1.ProofResponse + 4, // 21: trustix_api.v1.LogAPI.GetLogAuditProof:output_type -> trustix_api.v1.ProofResponse + 10, // 22: trustix_api.v1.LogAPI.GetLogEntries:output_type -> trustix_api.v1.LogEntriesResponse + 9, // 23: trustix_api.v1.LogAPI.GetMapValue:output_type -> trustix_api.v1.MapValueResponse + 4, // 24: trustix_api.v1.LogAPI.GetMHLogConsistencyProof:output_type -> trustix_api.v1.ProofResponse + 4, // 25: trustix_api.v1.LogAPI.GetMHLogAuditProof:output_type -> trustix_api.v1.ProofResponse + 10, // 26: trustix_api.v1.LogAPI.GetMHLogEntries:output_type -> trustix_api.v1.LogEntriesResponse 17, // [17:27] is the sub-list for method output_type 7, // [7:17] is the sub-list for method input_type 7, // [7:7] is the sub-list for extension type_name diff --git a/packages/trustix-proto/api/api.proto b/packages/trustix-proto/api/api.proto index 496a90f5..d1ea0c9e 100644 --- a/packages/trustix-proto/api/api.proto +++ b/packages/trustix-proto/api/api.proto @@ -7,9 +7,9 @@ syntax = "proto2"; import "schema/loghead.proto"; import "schema/logleaf.proto"; -option go_package = "github.com/nix-community/trustix/packages/trustix-proto/api"; +package trustix_api.v1; -package trustix; +option go_package = "github.com/nix-community/trustix/packages/trustix-proto/api"; // Request a signed head for a given log message LogHeadRequest { @@ -86,7 +86,7 @@ message MapValueResponse { required SparseCompactMerkleProof Proof = 2; } -message LogEntriesResponse { repeated LogLeaf Leaves = 1; } +message LogEntriesResponse { repeated trustix_schema.v1.LogLeaf Leaves = 1; } message KeyValuePair { @@ -142,7 +142,7 @@ service NodeAPI { service LogAPI { // Get signed head - rpc GetHead(LogHeadRequest) returns (LogHead) {} + rpc GetHead(LogHeadRequest) returns (trustix_schema.v1.LogHead) {} // Log diff --git a/packages/trustix-proto/api/apiconnect/api.connect.go b/packages/trustix-proto/api/apiconnect/api.connect.go index 7738ab2e..3df292f2 100644 --- a/packages/trustix-proto/api/apiconnect/api.connect.go +++ b/packages/trustix-proto/api/apiconnect/api.connect.go @@ -23,12 +23,12 @@ const _ = connect_go.IsAtLeastVersion0_1_0 const ( // NodeAPIName is the fully-qualified name of the NodeAPI service. - NodeAPIName = "trustix.NodeAPI" + NodeAPIName = "trustix_api.v1.NodeAPI" // LogAPIName is the fully-qualified name of the LogAPI service. - LogAPIName = "trustix.LogAPI" + LogAPIName = "trustix_api.v1.LogAPI" ) -// NodeAPIClient is a client for the trustix.NodeAPI service. +// NodeAPIClient is a client for the trustix_api.v1.NodeAPI service. type NodeAPIClient interface { // Get a list of all logs published by this node Logs(context.Context, *connect_go.Request[api.LogsRequest]) (*connect_go.Response[api.LogsResponse], error) @@ -36,8 +36,8 @@ type NodeAPIClient interface { GetValue(context.Context, *connect_go.Request[api.ValueRequest]) (*connect_go.Response[api.ValueResponse], error) } -// NewNodeAPIClient constructs a client for the trustix.NodeAPI service. By default, it uses the -// Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends +// NewNodeAPIClient constructs a client for the trustix_api.v1.NodeAPI service. By default, it uses +// the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends // uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or // connect.WithGRPCWeb() options. // @@ -48,12 +48,12 @@ func NewNodeAPIClient(httpClient connect_go.HTTPClient, baseURL string, opts ... return &nodeAPIClient{ logs: connect_go.NewClient[api.LogsRequest, api.LogsResponse]( httpClient, - baseURL+"/trustix.NodeAPI/Logs", + baseURL+"/trustix_api.v1.NodeAPI/Logs", opts..., ), getValue: connect_go.NewClient[api.ValueRequest, api.ValueResponse]( httpClient, - baseURL+"/trustix.NodeAPI/GetValue", + baseURL+"/trustix_api.v1.NodeAPI/GetValue", opts..., ), } @@ -65,17 +65,17 @@ type nodeAPIClient struct { getValue *connect_go.Client[api.ValueRequest, api.ValueResponse] } -// Logs calls trustix.NodeAPI.Logs. +// Logs calls trustix_api.v1.NodeAPI.Logs. func (c *nodeAPIClient) Logs(ctx context.Context, req *connect_go.Request[api.LogsRequest]) (*connect_go.Response[api.LogsResponse], error) { return c.logs.CallUnary(ctx, req) } -// GetValue calls trustix.NodeAPI.GetValue. +// GetValue calls trustix_api.v1.NodeAPI.GetValue. func (c *nodeAPIClient) GetValue(ctx context.Context, req *connect_go.Request[api.ValueRequest]) (*connect_go.Response[api.ValueResponse], error) { return c.getValue.CallUnary(ctx, req) } -// NodeAPIHandler is an implementation of the trustix.NodeAPI service. +// NodeAPIHandler is an implementation of the trustix_api.v1.NodeAPI service. type NodeAPIHandler interface { // Get a list of all logs published by this node Logs(context.Context, *connect_go.Request[api.LogsRequest]) (*connect_go.Response[api.LogsResponse], error) @@ -90,31 +90,31 @@ type NodeAPIHandler interface { // and JSON codecs. They also support gzip compression. func NewNodeAPIHandler(svc NodeAPIHandler, opts ...connect_go.HandlerOption) (string, http.Handler) { mux := http.NewServeMux() - mux.Handle("/trustix.NodeAPI/Logs", connect_go.NewUnaryHandler( - "/trustix.NodeAPI/Logs", + mux.Handle("/trustix_api.v1.NodeAPI/Logs", connect_go.NewUnaryHandler( + "/trustix_api.v1.NodeAPI/Logs", svc.Logs, opts..., )) - mux.Handle("/trustix.NodeAPI/GetValue", connect_go.NewUnaryHandler( - "/trustix.NodeAPI/GetValue", + mux.Handle("/trustix_api.v1.NodeAPI/GetValue", connect_go.NewUnaryHandler( + "/trustix_api.v1.NodeAPI/GetValue", svc.GetValue, opts..., )) - return "/trustix.NodeAPI/", mux + return "/trustix_api.v1.NodeAPI/", mux } // UnimplementedNodeAPIHandler returns CodeUnimplemented from all methods. type UnimplementedNodeAPIHandler struct{} func (UnimplementedNodeAPIHandler) Logs(context.Context, *connect_go.Request[api.LogsRequest]) (*connect_go.Response[api.LogsResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.NodeAPI.Logs is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.NodeAPI.Logs is not implemented")) } func (UnimplementedNodeAPIHandler) GetValue(context.Context, *connect_go.Request[api.ValueRequest]) (*connect_go.Response[api.ValueResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.NodeAPI.GetValue is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.NodeAPI.GetValue is not implemented")) } -// LogAPIClient is a client for the trustix.LogAPI service. +// LogAPIClient is a client for the trustix_api.v1.LogAPI service. type LogAPIClient interface { // Get signed head GetHead(context.Context, *connect_go.Request[api.LogHeadRequest]) (*connect_go.Response[schema.LogHead], error) @@ -127,8 +127,8 @@ type LogAPIClient interface { GetMHLogEntries(context.Context, *connect_go.Request[api.GetLogEntriesRequest]) (*connect_go.Response[api.LogEntriesResponse], error) } -// NewLogAPIClient constructs a client for the trustix.LogAPI service. By default, it uses the -// Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends +// NewLogAPIClient constructs a client for the trustix_api.v1.LogAPI service. By default, it uses +// the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends // uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or // connect.WithGRPCWeb() options. // @@ -139,42 +139,42 @@ func NewLogAPIClient(httpClient connect_go.HTTPClient, baseURL string, opts ...c return &logAPIClient{ getHead: connect_go.NewClient[api.LogHeadRequest, schema.LogHead]( httpClient, - baseURL+"/trustix.LogAPI/GetHead", + baseURL+"/trustix_api.v1.LogAPI/GetHead", opts..., ), getLogConsistencyProof: connect_go.NewClient[api.GetLogConsistencyProofRequest, api.ProofResponse]( httpClient, - baseURL+"/trustix.LogAPI/GetLogConsistencyProof", + baseURL+"/trustix_api.v1.LogAPI/GetLogConsistencyProof", opts..., ), getLogAuditProof: connect_go.NewClient[api.GetLogAuditProofRequest, api.ProofResponse]( httpClient, - baseURL+"/trustix.LogAPI/GetLogAuditProof", + baseURL+"/trustix_api.v1.LogAPI/GetLogAuditProof", opts..., ), getLogEntries: connect_go.NewClient[api.GetLogEntriesRequest, api.LogEntriesResponse]( httpClient, - baseURL+"/trustix.LogAPI/GetLogEntries", + baseURL+"/trustix_api.v1.LogAPI/GetLogEntries", opts..., ), getMapValue: connect_go.NewClient[api.GetMapValueRequest, api.MapValueResponse]( httpClient, - baseURL+"/trustix.LogAPI/GetMapValue", + baseURL+"/trustix_api.v1.LogAPI/GetMapValue", opts..., ), getMHLogConsistencyProof: connect_go.NewClient[api.GetLogConsistencyProofRequest, api.ProofResponse]( httpClient, - baseURL+"/trustix.LogAPI/GetMHLogConsistencyProof", + baseURL+"/trustix_api.v1.LogAPI/GetMHLogConsistencyProof", opts..., ), getMHLogAuditProof: connect_go.NewClient[api.GetLogAuditProofRequest, api.ProofResponse]( httpClient, - baseURL+"/trustix.LogAPI/GetMHLogAuditProof", + baseURL+"/trustix_api.v1.LogAPI/GetMHLogAuditProof", opts..., ), getMHLogEntries: connect_go.NewClient[api.GetLogEntriesRequest, api.LogEntriesResponse]( httpClient, - baseURL+"/trustix.LogAPI/GetMHLogEntries", + baseURL+"/trustix_api.v1.LogAPI/GetMHLogEntries", opts..., ), } @@ -192,47 +192,47 @@ type logAPIClient struct { getMHLogEntries *connect_go.Client[api.GetLogEntriesRequest, api.LogEntriesResponse] } -// GetHead calls trustix.LogAPI.GetHead. +// GetHead calls trustix_api.v1.LogAPI.GetHead. func (c *logAPIClient) GetHead(ctx context.Context, req *connect_go.Request[api.LogHeadRequest]) (*connect_go.Response[schema.LogHead], error) { return c.getHead.CallUnary(ctx, req) } -// GetLogConsistencyProof calls trustix.LogAPI.GetLogConsistencyProof. +// GetLogConsistencyProof calls trustix_api.v1.LogAPI.GetLogConsistencyProof. func (c *logAPIClient) GetLogConsistencyProof(ctx context.Context, req *connect_go.Request[api.GetLogConsistencyProofRequest]) (*connect_go.Response[api.ProofResponse], error) { return c.getLogConsistencyProof.CallUnary(ctx, req) } -// GetLogAuditProof calls trustix.LogAPI.GetLogAuditProof. +// GetLogAuditProof calls trustix_api.v1.LogAPI.GetLogAuditProof. func (c *logAPIClient) GetLogAuditProof(ctx context.Context, req *connect_go.Request[api.GetLogAuditProofRequest]) (*connect_go.Response[api.ProofResponse], error) { return c.getLogAuditProof.CallUnary(ctx, req) } -// GetLogEntries calls trustix.LogAPI.GetLogEntries. +// GetLogEntries calls trustix_api.v1.LogAPI.GetLogEntries. func (c *logAPIClient) GetLogEntries(ctx context.Context, req *connect_go.Request[api.GetLogEntriesRequest]) (*connect_go.Response[api.LogEntriesResponse], error) { return c.getLogEntries.CallUnary(ctx, req) } -// GetMapValue calls trustix.LogAPI.GetMapValue. +// GetMapValue calls trustix_api.v1.LogAPI.GetMapValue. func (c *logAPIClient) GetMapValue(ctx context.Context, req *connect_go.Request[api.GetMapValueRequest]) (*connect_go.Response[api.MapValueResponse], error) { return c.getMapValue.CallUnary(ctx, req) } -// GetMHLogConsistencyProof calls trustix.LogAPI.GetMHLogConsistencyProof. +// GetMHLogConsistencyProof calls trustix_api.v1.LogAPI.GetMHLogConsistencyProof. func (c *logAPIClient) GetMHLogConsistencyProof(ctx context.Context, req *connect_go.Request[api.GetLogConsistencyProofRequest]) (*connect_go.Response[api.ProofResponse], error) { return c.getMHLogConsistencyProof.CallUnary(ctx, req) } -// GetMHLogAuditProof calls trustix.LogAPI.GetMHLogAuditProof. +// GetMHLogAuditProof calls trustix_api.v1.LogAPI.GetMHLogAuditProof. func (c *logAPIClient) GetMHLogAuditProof(ctx context.Context, req *connect_go.Request[api.GetLogAuditProofRequest]) (*connect_go.Response[api.ProofResponse], error) { return c.getMHLogAuditProof.CallUnary(ctx, req) } -// GetMHLogEntries calls trustix.LogAPI.GetMHLogEntries. +// GetMHLogEntries calls trustix_api.v1.LogAPI.GetMHLogEntries. func (c *logAPIClient) GetMHLogEntries(ctx context.Context, req *connect_go.Request[api.GetLogEntriesRequest]) (*connect_go.Response[api.LogEntriesResponse], error) { return c.getMHLogEntries.CallUnary(ctx, req) } -// LogAPIHandler is an implementation of the trustix.LogAPI service. +// LogAPIHandler is an implementation of the trustix_api.v1.LogAPI service. type LogAPIHandler interface { // Get signed head GetHead(context.Context, *connect_go.Request[api.LogHeadRequest]) (*connect_go.Response[schema.LogHead], error) @@ -252,80 +252,80 @@ type LogAPIHandler interface { // and JSON codecs. They also support gzip compression. func NewLogAPIHandler(svc LogAPIHandler, opts ...connect_go.HandlerOption) (string, http.Handler) { mux := http.NewServeMux() - mux.Handle("/trustix.LogAPI/GetHead", connect_go.NewUnaryHandler( - "/trustix.LogAPI/GetHead", + mux.Handle("/trustix_api.v1.LogAPI/GetHead", connect_go.NewUnaryHandler( + "/trustix_api.v1.LogAPI/GetHead", svc.GetHead, opts..., )) - mux.Handle("/trustix.LogAPI/GetLogConsistencyProof", connect_go.NewUnaryHandler( - "/trustix.LogAPI/GetLogConsistencyProof", + mux.Handle("/trustix_api.v1.LogAPI/GetLogConsistencyProof", connect_go.NewUnaryHandler( + "/trustix_api.v1.LogAPI/GetLogConsistencyProof", svc.GetLogConsistencyProof, opts..., )) - mux.Handle("/trustix.LogAPI/GetLogAuditProof", connect_go.NewUnaryHandler( - "/trustix.LogAPI/GetLogAuditProof", + mux.Handle("/trustix_api.v1.LogAPI/GetLogAuditProof", connect_go.NewUnaryHandler( + "/trustix_api.v1.LogAPI/GetLogAuditProof", svc.GetLogAuditProof, opts..., )) - mux.Handle("/trustix.LogAPI/GetLogEntries", connect_go.NewUnaryHandler( - "/trustix.LogAPI/GetLogEntries", + mux.Handle("/trustix_api.v1.LogAPI/GetLogEntries", connect_go.NewUnaryHandler( + "/trustix_api.v1.LogAPI/GetLogEntries", svc.GetLogEntries, opts..., )) - mux.Handle("/trustix.LogAPI/GetMapValue", connect_go.NewUnaryHandler( - "/trustix.LogAPI/GetMapValue", + mux.Handle("/trustix_api.v1.LogAPI/GetMapValue", connect_go.NewUnaryHandler( + "/trustix_api.v1.LogAPI/GetMapValue", svc.GetMapValue, opts..., )) - mux.Handle("/trustix.LogAPI/GetMHLogConsistencyProof", connect_go.NewUnaryHandler( - "/trustix.LogAPI/GetMHLogConsistencyProof", + mux.Handle("/trustix_api.v1.LogAPI/GetMHLogConsistencyProof", connect_go.NewUnaryHandler( + "/trustix_api.v1.LogAPI/GetMHLogConsistencyProof", svc.GetMHLogConsistencyProof, opts..., )) - mux.Handle("/trustix.LogAPI/GetMHLogAuditProof", connect_go.NewUnaryHandler( - "/trustix.LogAPI/GetMHLogAuditProof", + mux.Handle("/trustix_api.v1.LogAPI/GetMHLogAuditProof", connect_go.NewUnaryHandler( + "/trustix_api.v1.LogAPI/GetMHLogAuditProof", svc.GetMHLogAuditProof, opts..., )) - mux.Handle("/trustix.LogAPI/GetMHLogEntries", connect_go.NewUnaryHandler( - "/trustix.LogAPI/GetMHLogEntries", + mux.Handle("/trustix_api.v1.LogAPI/GetMHLogEntries", connect_go.NewUnaryHandler( + "/trustix_api.v1.LogAPI/GetMHLogEntries", svc.GetMHLogEntries, opts..., )) - return "/trustix.LogAPI/", mux + return "/trustix_api.v1.LogAPI/", mux } // UnimplementedLogAPIHandler returns CodeUnimplemented from all methods. type UnimplementedLogAPIHandler struct{} func (UnimplementedLogAPIHandler) GetHead(context.Context, *connect_go.Request[api.LogHeadRequest]) (*connect_go.Response[schema.LogHead], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogAPI.GetHead is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.LogAPI.GetHead is not implemented")) } func (UnimplementedLogAPIHandler) GetLogConsistencyProof(context.Context, *connect_go.Request[api.GetLogConsistencyProofRequest]) (*connect_go.Response[api.ProofResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogAPI.GetLogConsistencyProof is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.LogAPI.GetLogConsistencyProof is not implemented")) } func (UnimplementedLogAPIHandler) GetLogAuditProof(context.Context, *connect_go.Request[api.GetLogAuditProofRequest]) (*connect_go.Response[api.ProofResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogAPI.GetLogAuditProof is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.LogAPI.GetLogAuditProof is not implemented")) } func (UnimplementedLogAPIHandler) GetLogEntries(context.Context, *connect_go.Request[api.GetLogEntriesRequest]) (*connect_go.Response[api.LogEntriesResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogAPI.GetLogEntries is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.LogAPI.GetLogEntries is not implemented")) } func (UnimplementedLogAPIHandler) GetMapValue(context.Context, *connect_go.Request[api.GetMapValueRequest]) (*connect_go.Response[api.MapValueResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogAPI.GetMapValue is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.LogAPI.GetMapValue is not implemented")) } func (UnimplementedLogAPIHandler) GetMHLogConsistencyProof(context.Context, *connect_go.Request[api.GetLogConsistencyProofRequest]) (*connect_go.Response[api.ProofResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogAPI.GetMHLogConsistencyProof is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.LogAPI.GetMHLogConsistencyProof is not implemented")) } func (UnimplementedLogAPIHandler) GetMHLogAuditProof(context.Context, *connect_go.Request[api.GetLogAuditProofRequest]) (*connect_go.Response[api.ProofResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogAPI.GetMHLogAuditProof is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.LogAPI.GetMHLogAuditProof is not implemented")) } func (UnimplementedLogAPIHandler) GetMHLogEntries(context.Context, *connect_go.Request[api.GetLogEntriesRequest]) (*connect_go.Response[api.LogEntriesResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogAPI.GetMHLogEntries is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_api.v1.LogAPI.GetMHLogEntries is not implemented")) } diff --git a/packages/trustix-proto/doc.md b/packages/trustix-proto/doc.md index cf554718..03a9517f 100644 --- a/packages/trustix-proto/doc.md +++ b/packages/trustix-proto/doc.md @@ -4,58 +4,58 @@ ## Table of Contents - [api/api.proto](#api_api-proto) - - [GetLogAuditProofRequest](#trustix-GetLogAuditProofRequest) - - [GetLogConsistencyProofRequest](#trustix-GetLogConsistencyProofRequest) - - [GetLogEntriesRequest](#trustix-GetLogEntriesRequest) - - [GetMapValueRequest](#trustix-GetMapValueRequest) - - [KeyValuePair](#trustix-KeyValuePair) - - [Log](#trustix-Log) - - [Log.MetaEntry](#trustix-Log-MetaEntry) - - [LogEntriesResponse](#trustix-LogEntriesResponse) - - [LogHeadRequest](#trustix-LogHeadRequest) - - [LogSigner](#trustix-LogSigner) - - [LogsRequest](#trustix-LogsRequest) - - [LogsResponse](#trustix-LogsResponse) - - [MapValueResponse](#trustix-MapValueResponse) - - [ProofResponse](#trustix-ProofResponse) - - [SparseCompactMerkleProof](#trustix-SparseCompactMerkleProof) - - [ValueRequest](#trustix-ValueRequest) - - [ValueResponse](#trustix-ValueResponse) + - [GetLogAuditProofRequest](#trustix_api-v1-GetLogAuditProofRequest) + - [GetLogConsistencyProofRequest](#trustix_api-v1-GetLogConsistencyProofRequest) + - [GetLogEntriesRequest](#trustix_api-v1-GetLogEntriesRequest) + - [GetMapValueRequest](#trustix_api-v1-GetMapValueRequest) + - [KeyValuePair](#trustix_api-v1-KeyValuePair) + - [Log](#trustix_api-v1-Log) + - [Log.MetaEntry](#trustix_api-v1-Log-MetaEntry) + - [LogEntriesResponse](#trustix_api-v1-LogEntriesResponse) + - [LogHeadRequest](#trustix_api-v1-LogHeadRequest) + - [LogSigner](#trustix_api-v1-LogSigner) + - [LogsRequest](#trustix_api-v1-LogsRequest) + - [LogsResponse](#trustix_api-v1-LogsResponse) + - [MapValueResponse](#trustix_api-v1-MapValueResponse) + - [ProofResponse](#trustix_api-v1-ProofResponse) + - [SparseCompactMerkleProof](#trustix_api-v1-SparseCompactMerkleProof) + - [ValueRequest](#trustix_api-v1-ValueRequest) + - [ValueResponse](#trustix_api-v1-ValueResponse) - - [Log.LogModes](#trustix-Log-LogModes) - - [LogSigner.KeyTypes](#trustix-LogSigner-KeyTypes) + - [Log.LogModes](#trustix_api-v1-Log-LogModes) + - [LogSigner.KeyTypes](#trustix_api-v1-LogSigner-KeyTypes) - - [LogAPI](#trustix-LogAPI) - - [NodeAPI](#trustix-NodeAPI) + - [LogAPI](#trustix_api-v1-LogAPI) + - [NodeAPI](#trustix_api-v1-NodeAPI) - [rpc/rpc.proto](#rpc_rpc-proto) - - [DecideRequest](#trustix-DecideRequest) - - [DecisionResponse](#trustix-DecisionResponse) - - [EntriesResponse](#trustix-EntriesResponse) - - [EntriesResponse.EntriesEntry](#trustix-EntriesResponse-EntriesEntry) - - [FlushRequest](#trustix-FlushRequest) - - [FlushResponse](#trustix-FlushResponse) - - [LogValueDecision](#trustix-LogValueDecision) - - [LogValueResponse](#trustix-LogValueResponse) - - [SubmitRequest](#trustix-SubmitRequest) - - [SubmitResponse](#trustix-SubmitResponse) + - [DecideRequest](#trustix_rpc-v1-DecideRequest) + - [DecisionResponse](#trustix_rpc-v1-DecisionResponse) + - [EntriesResponse](#trustix_rpc-v1-EntriesResponse) + - [EntriesResponse.EntriesEntry](#trustix_rpc-v1-EntriesResponse-EntriesEntry) + - [FlushRequest](#trustix_rpc-v1-FlushRequest) + - [FlushResponse](#trustix_rpc-v1-FlushResponse) + - [LogValueDecision](#trustix_rpc-v1-LogValueDecision) + - [LogValueResponse](#trustix_rpc-v1-LogValueResponse) + - [SubmitRequest](#trustix_rpc-v1-SubmitRequest) + - [SubmitResponse](#trustix_rpc-v1-SubmitResponse) - - [SubmitResponse.Status](#trustix-SubmitResponse-Status) + - [SubmitResponse.Status](#trustix_rpc-v1-SubmitResponse-Status) - - [LogRPC](#trustix-LogRPC) - - [RPCApi](#trustix-RPCApi) + - [LogRPC](#trustix_rpc-v1-LogRPC) + - [RPCApi](#trustix_rpc-v1-RPCApi) - [schema/loghead.proto](#schema_loghead-proto) - - [LogHead](#-LogHead) + - [LogHead](#trustix_schema-v1-LogHead) - [schema/logleaf.proto](#schema_logleaf-proto) - - [LogLeaf](#-LogLeaf) + - [LogLeaf](#trustix_schema-v1-LogLeaf) - [schema/mapentry.proto](#schema_mapentry-proto) - - [MapEntry](#-MapEntry) + - [MapEntry](#trustix_schema-v1-MapEntry) - [schema/queue.proto](#schema_queue-proto) - - [SubmitQueue](#-SubmitQueue) + - [SubmitQueue](#trustix_schema-v1-SubmitQueue) - [Scalar Value Types](#scalar-value-types) @@ -68,7 +68,7 @@ - + ### GetLogAuditProofRequest Get log audit proof for a given tree @@ -85,7 +85,7 @@ Get log audit proof for a given tree - + ### GetLogConsistencyProofRequest Get a consistency proof between two given log sizes @@ -102,7 +102,7 @@ Get a consistency proof between two given log sizes - + ### GetLogEntriesRequest @@ -119,7 +119,7 @@ Get a consistency proof between two given log sizes - + ### GetMapValueRequest @@ -136,7 +136,7 @@ Get a consistency proof between two given log sizes - + ### KeyValuePair @@ -152,7 +152,7 @@ Get a consistency proof between two given log sizes - + ### Log @@ -161,17 +161,17 @@ Get a consistency proof between two given log sizes | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | LogID | [string](#string) | required | | -| Mode | [Log.LogModes](#trustix-Log-LogModes) | required | | +| Mode | [Log.LogModes](#trustix_api-v1-Log-LogModes) | required | | | Protocol | [string](#string) | required | | -| Signer | [LogSigner](#trustix-LogSigner) | required | | -| Meta | [Log.MetaEntry](#trustix-Log-MetaEntry) | repeated | | +| Signer | [LogSigner](#trustix_api-v1-LogSigner) | required | | +| Meta | [Log.MetaEntry](#trustix_api-v1-Log-MetaEntry) | repeated | | - + ### Log.MetaEntry @@ -187,7 +187,7 @@ Get a consistency proof between two given log sizes - + ### LogEntriesResponse @@ -195,14 +195,14 @@ Get a consistency proof between two given log sizes | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Leaves | [LogLeaf](#LogLeaf) | repeated | | +| Leaves | [trustix_schema.v1.LogLeaf](#trustix_schema-v1-LogLeaf) | repeated | | - + ### LogHeadRequest Request a signed head for a given log @@ -217,7 +217,7 @@ Request a signed head for a given log - + ### LogSigner @@ -225,7 +225,7 @@ Request a signed head for a given log | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| KeyType | [LogSigner.KeyTypes](#trustix-LogSigner-KeyTypes) | required | | +| KeyType | [LogSigner.KeyTypes](#trustix_api-v1-LogSigner-KeyTypes) | required | | | Public | [string](#string) | required | | @@ -233,7 +233,7 @@ Request a signed head for a given log - + ### LogsRequest @@ -248,7 +248,7 @@ Request a signed head for a given log - + ### LogsResponse @@ -256,14 +256,14 @@ Request a signed head for a given log | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Logs | [Log](#trustix-Log) | repeated | | +| Logs | [Log](#trustix_api-v1-Log) | repeated | | - + ### MapValueResponse @@ -272,14 +272,14 @@ Request a signed head for a given log | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | Value | [bytes](#bytes) | required | Note that the Value field is actually a MapEntry but we need to return the marshaled version as that's what the proof is created from | -| Proof | [SparseCompactMerkleProof](#trustix-SparseCompactMerkleProof) | required | | +| Proof | [SparseCompactMerkleProof](#trustix_api-v1-SparseCompactMerkleProof) | required | | - + ### ProofResponse @@ -294,7 +294,7 @@ Request a signed head for a given log - + ### SparseCompactMerkleProof Sparse merkle tree proof @@ -312,7 +312,7 @@ Sparse merkle tree proof - + ### ValueRequest @@ -327,7 +327,7 @@ Sparse merkle tree proof - + ### ValueResponse @@ -344,7 +344,7 @@ Sparse merkle tree proof - + ### Log.LogModes @@ -355,7 +355,7 @@ Sparse merkle tree proof - + ### LogSigner.KeyTypes @@ -370,7 +370,7 @@ Sparse merkle tree proof - + ### LogAPI LogAPI is a logical grouping for RPC methods that are specific to a given @@ -378,17 +378,17 @@ log. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| -| GetHead | [LogHeadRequest](#trustix-LogHeadRequest) | [.LogHead](#LogHead) | Get signed head | -| GetLogConsistencyProof | [GetLogConsistencyProofRequest](#trustix-GetLogConsistencyProofRequest) | [ProofResponse](#trustix-ProofResponse) | | -| GetLogAuditProof | [GetLogAuditProofRequest](#trustix-GetLogAuditProofRequest) | [ProofResponse](#trustix-ProofResponse) | | -| GetLogEntries | [GetLogEntriesRequest](#trustix-GetLogEntriesRequest) | [LogEntriesResponse](#trustix-LogEntriesResponse) | | -| GetMapValue | [GetMapValueRequest](#trustix-GetMapValueRequest) | [MapValueResponse](#trustix-MapValueResponse) | | -| GetMHLogConsistencyProof | [GetLogConsistencyProofRequest](#trustix-GetLogConsistencyProofRequest) | [ProofResponse](#trustix-ProofResponse) | | -| GetMHLogAuditProof | [GetLogAuditProofRequest](#trustix-GetLogAuditProofRequest) | [ProofResponse](#trustix-ProofResponse) | | -| GetMHLogEntries | [GetLogEntriesRequest](#trustix-GetLogEntriesRequest) | [LogEntriesResponse](#trustix-LogEntriesResponse) | | +| GetHead | [LogHeadRequest](#trustix_api-v1-LogHeadRequest) | [.trustix_schema.v1.LogHead](#trustix_schema-v1-LogHead) | Get signed head | +| GetLogConsistencyProof | [GetLogConsistencyProofRequest](#trustix_api-v1-GetLogConsistencyProofRequest) | [ProofResponse](#trustix_api-v1-ProofResponse) | | +| GetLogAuditProof | [GetLogAuditProofRequest](#trustix_api-v1-GetLogAuditProofRequest) | [ProofResponse](#trustix_api-v1-ProofResponse) | | +| GetLogEntries | [GetLogEntriesRequest](#trustix_api-v1-GetLogEntriesRequest) | [LogEntriesResponse](#trustix_api-v1-LogEntriesResponse) | | +| GetMapValue | [GetMapValueRequest](#trustix_api-v1-GetMapValueRequest) | [MapValueResponse](#trustix_api-v1-MapValueResponse) | | +| GetMHLogConsistencyProof | [GetLogConsistencyProofRequest](#trustix_api-v1-GetLogConsistencyProofRequest) | [ProofResponse](#trustix_api-v1-ProofResponse) | | +| GetMHLogAuditProof | [GetLogAuditProofRequest](#trustix_api-v1-GetLogAuditProofRequest) | [ProofResponse](#trustix_api-v1-ProofResponse) | | +| GetMHLogEntries | [GetLogEntriesRequest](#trustix_api-v1-GetLogEntriesRequest) | [LogEntriesResponse](#trustix_api-v1-LogEntriesResponse) | | - + ### NodeAPI NodeAPI is a logical grouping for RPC methods that are for the entire node @@ -396,8 +396,8 @@ rather than individual logs. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| -| Logs | [LogsRequest](#trustix-LogsRequest) | [LogsResponse](#trustix-LogsResponse) | Get a list of all logs published by this node | -| GetValue | [ValueRequest](#trustix-ValueRequest) | [ValueResponse](#trustix-ValueResponse) | Get values by their content-address | +| Logs | [LogsRequest](#trustix_api-v1-LogsRequest) | [LogsResponse](#trustix_api-v1-LogsResponse) | Get a list of all logs published by this node | +| GetValue | [ValueRequest](#trustix_api-v1-ValueRequest) | [ValueResponse](#trustix_api-v1-ValueResponse) | Get values by their content-address | @@ -410,7 +410,7 @@ rather than individual logs. - + ### DecideRequest @@ -426,7 +426,7 @@ rather than individual logs. - + ### DecisionResponse @@ -434,8 +434,8 @@ rather than individual logs. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| Decision | [LogValueDecision](#trustix-LogValueDecision) | required | | -| Mismatches | [LogValueResponse](#trustix-LogValueResponse) | repeated | Non-matches (hash mismatch) | +| Decision | [LogValueDecision](#trustix_rpc-v1-LogValueDecision) | required | | +| Mismatches | [LogValueResponse](#trustix_rpc-v1-LogValueResponse) | repeated | Non-matches (hash mismatch) | | Misses | [string](#string) | repeated | Full misses (log ids missing log entry entirely) | @@ -443,7 +443,7 @@ rather than individual logs. - + ### EntriesResponse @@ -452,14 +452,14 @@ rather than individual logs. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | Key | [bytes](#bytes) | required | | -| Entries | [EntriesResponse.EntriesEntry](#trustix-EntriesResponse-EntriesEntry) | repeated | | +| Entries | [EntriesResponse.EntriesEntry](#trustix_rpc-v1-EntriesResponse-EntriesEntry) | repeated | | - + ### EntriesResponse.EntriesEntry @@ -468,14 +468,14 @@ rather than individual logs. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | key | [string](#string) | optional | | -| value | [MapEntry](#MapEntry) | optional | | +| value | [trustix_schema.v1.MapEntry](#trustix_schema-v1-MapEntry) | optional | | - + ### FlushRequest @@ -490,7 +490,7 @@ rather than individual logs. - + ### FlushResponse @@ -500,7 +500,7 @@ rather than individual logs. - + ### LogValueDecision @@ -518,7 +518,7 @@ rather than individual logs. - + ### LogValueResponse @@ -534,7 +534,7 @@ rather than individual logs. - + ### SubmitRequest @@ -543,14 +543,14 @@ rather than individual logs. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | LogID | [string](#string) | required | | -| Items | [KeyValuePair](#trustix-KeyValuePair) | repeated | | +| Items | [trustix_api.v1.KeyValuePair](#trustix_api-v1-KeyValuePair) | repeated | | - + ### SubmitResponse @@ -558,7 +558,7 @@ rather than individual logs. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| status | [SubmitResponse.Status](#trustix-SubmitResponse-Status) | required | | +| status | [SubmitResponse.Status](#trustix_rpc-v1-SubmitResponse-Status) | required | | @@ -567,7 +567,7 @@ rather than individual logs. - + ### SubmitResponse.Status @@ -582,7 +582,7 @@ rather than individual logs. - + ### LogRPC RPCApi are "private" rpc methods for an instance related to a specific log. @@ -590,13 +590,13 @@ This should only be available to trusted parties. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| -| GetHead | [LogHeadRequest](#trustix-LogHeadRequest) | [.LogHead](#LogHead) | | -| GetLogEntries | [GetLogEntriesRequest](#trustix-GetLogEntriesRequest) | [LogEntriesResponse](#trustix-LogEntriesResponse) | | -| Submit | [SubmitRequest](#trustix-SubmitRequest) | [SubmitResponse](#trustix-SubmitResponse) | | -| Flush | [FlushRequest](#trustix-FlushRequest) | [FlushResponse](#trustix-FlushResponse) | | +| GetHead | [.trustix_api.v1.LogHeadRequest](#trustix_api-v1-LogHeadRequest) | [.trustix_schema.v1.LogHead](#trustix_schema-v1-LogHead) | | +| GetLogEntries | [.trustix_api.v1.GetLogEntriesRequest](#trustix_api-v1-GetLogEntriesRequest) | [.trustix_api.v1.LogEntriesResponse](#trustix_api-v1-LogEntriesResponse) | | +| Submit | [SubmitRequest](#trustix_rpc-v1-SubmitRequest) | [SubmitResponse](#trustix_rpc-v1-SubmitResponse) | | +| Flush | [FlushRequest](#trustix_rpc-v1-FlushRequest) | [FlushResponse](#trustix_rpc-v1-FlushResponse) | | - + ### RPCApi RPCApi are "private" rpc methods for an instance. @@ -604,9 +604,9 @@ This should only be available to trusted parties. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| -| Logs | [LogsRequest](#trustix-LogsRequest) | [LogsResponse](#trustix-LogsResponse) | Get a list of all logs published/subscribed by this node | -| Decide | [DecideRequest](#trustix-DecideRequest) | [DecisionResponse](#trustix-DecisionResponse) | Decide on an output for key based on the configured decision method | -| GetValue | [ValueRequest](#trustix-ValueRequest) | [ValueResponse](#trustix-ValueResponse) | Get values by their content-address | +| Logs | [.trustix_api.v1.LogsRequest](#trustix_api-v1-LogsRequest) | [.trustix_api.v1.LogsResponse](#trustix_api-v1-LogsResponse) | Get a list of all logs published/subscribed by this node | +| Decide | [DecideRequest](#trustix_rpc-v1-DecideRequest) | [DecisionResponse](#trustix_rpc-v1-DecisionResponse) | Decide on an output for key based on the configured decision method | +| GetValue | [.trustix_api.v1.ValueRequest](#trustix_api-v1-ValueRequest) | [.trustix_api.v1.ValueResponse](#trustix_api-v1-ValueResponse) | Get values by their content-address | @@ -619,7 +619,7 @@ This should only be available to trusted parties. - + ### LogHead Log @@ -655,7 +655,7 @@ Log - + ### LogLeaf Leaf value of a merkle tree @@ -688,7 +688,7 @@ Leaf value of a merkle tree - + ### MapEntry @@ -720,7 +720,7 @@ Leaf value of a merkle tree - + ### SubmitQueue This type is internal only and not guaranteed stable diff --git a/packages/trustix-proto/rpc/rpc.pb.go b/packages/trustix-proto/rpc/rpc.pb.go index adfecf1f..f2ee7a56 100644 --- a/packages/trustix-proto/rpc/rpc.pb.go +++ b/packages/trustix-proto/rpc/rpc.pb.go @@ -5,7 +5,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.19.4 +// protoc v3.21.6 // source: rpc/rpc.proto package rpc @@ -440,7 +440,7 @@ type SubmitResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Status *SubmitResponse_Status `protobuf:"varint,1,req,name=status,enum=trustix.SubmitResponse_Status" json:"status,omitempty"` + Status *SubmitResponse_Status `protobuf:"varint,1,req,name=status,enum=trustix_rpc.v1.SubmitResponse_Status" json:"status,omitempty"` } func (x *SubmitResponse) Reset() { @@ -571,24 +571,26 @@ var File_rpc_rpc_proto protoreflect.FileDescriptor var file_rpc_rpc_proto_rawDesc = []byte{ 0x0a, 0x0d, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x07, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x1a, 0x15, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2f, 0x6d, 0x61, 0x70, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x14, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x6f, 0x67, 0x68, 0x65, 0x61, 0x64, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3d, 0x0a, 0x0d, 0x44, 0x65, 0x63, 0x69, 0x64, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x02, - 0x28, 0x0c, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x22, 0xab, 0x01, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x02, 0x28, 0x0c, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x3f, 0x0a, 0x07, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x72, 0x75, - 0x73, 0x74, 0x69, 0x78, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x07, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x45, 0x0a, 0x0c, 0x45, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x4d, 0x61, + 0x0e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x1a, + 0x15, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6d, 0x61, 0x70, 0x65, 0x6e, 0x74, 0x72, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, + 0x6f, 0x67, 0x68, 0x65, 0x61, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x61, 0x70, + 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3d, 0x0a, 0x0d, 0x44, + 0x65, 0x63, 0x69, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x02, 0x28, 0x09, + 0x52, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0xc4, 0x01, 0x0a, 0x0f, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x03, 0x4b, 0x65, 0x79, + 0x12, 0x46, 0x0a, 0x07, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x07, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x57, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x74, 0x72, 0x75, 0x73, + 0x74, 0x69, 0x78, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, @@ -601,64 +603,72 @@ var file_rpc_rpc_proto_rawDesc = []byte{ 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x02, 0x28, 0x05, 0x52, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x04, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9c, 0x01, + 0x18, 0x04, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xaa, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x02, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, - 0x6f, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x4d, 0x69, 0x73, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x4d, 0x69, 0x73, 0x6d, 0x61, 0x74, - 0x63, 0x68, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, 0x73, 0x73, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x69, 0x73, 0x73, 0x65, 0x73, 0x22, 0x52, 0x0a, 0x0d, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, - 0x67, 0x49, 0x44, 0x12, 0x2b, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4b, 0x65, 0x79, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x5a, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x02, - 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x10, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x22, 0x24, 0x0a, 0x0c, - 0x46, 0x6c, 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, - 0x49, 0x44, 0x22, 0x0f, 0x0a, 0x0d, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x32, 0xbb, 0x01, 0x0a, 0x06, 0x52, 0x50, 0x43, 0x41, 0x70, 0x69, 0x12, 0x35, - 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x14, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, - 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x06, 0x44, 0x65, 0x63, 0x69, 0x64, 0x65, 0x12, - 0x16, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, - 0x78, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x15, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, - 0x78, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x32, 0xfe, 0x01, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x52, 0x50, 0x43, 0x12, 0x2e, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x12, 0x17, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, - 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x08, 0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x0d, - 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x2e, - 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x06, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x38, 0x0a, 0x05, 0x46, 0x6c, 0x75, 0x73, - 0x68, 0x12, 0x15, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2e, 0x46, 0x6c, 0x75, 0x73, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, - 0x69, 0x78, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, - 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x70, - 0x63, + 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x02, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x72, + 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x40, 0x0a, 0x0a, 0x4d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x72, + 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x4d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x69, 0x73, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x4d, 0x69, 0x73, 0x73, 0x65, 0x73, 0x22, 0x59, 0x0a, 0x0d, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, + 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, + 0x44, 0x12, 0x32, 0x0a, 0x05, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x05, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x61, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, + 0x78, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x10, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x22, 0x24, 0x0a, 0x0c, 0x46, 0x6c, 0x75, 0x73, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x22, 0x0f, + 0x0a, 0x0d, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0xe5, 0x01, 0x0a, 0x06, 0x52, 0x50, 0x43, 0x41, 0x70, 0x69, 0x12, 0x43, 0x0a, 0x04, 0x4c, 0x6f, + 0x67, 0x73, 0x12, 0x1b, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1c, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x4b, 0x0a, 0x06, 0x44, 0x65, 0x63, 0x69, 0x64, 0x65, 0x12, 0x1d, 0x2e, 0x74, 0x72, 0x75, 0x73, + 0x74, 0x69, 0x78, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, + 0x69, 0x78, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x08, + 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, + 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, + 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xc1, 0x02, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x52, + 0x50, 0x43, 0x12, 0x47, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x48, 0x65, 0x61, 0x64, 0x12, 0x1e, 0x2e, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x48, 0x65, 0x61, 0x64, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0d, 0x47, + 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x06, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x12, 0x1d, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x72, 0x70, 0x63, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x72, 0x70, 0x63, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x05, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x12, 0x1c, 0x2e, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6c, + 0x75, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x72, 0x75, + 0x73, 0x74, 0x69, 0x78, 0x5f, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6c, 0x75, 0x73, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3d, 0x5a, 0x3b, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, + 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x70, 0x63, } var ( @@ -676,49 +686,49 @@ func file_rpc_rpc_proto_rawDescGZIP() []byte { var file_rpc_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_rpc_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 10) var file_rpc_rpc_proto_goTypes = []interface{}{ - (SubmitResponse_Status)(0), // 0: trustix.SubmitResponse.Status - (*DecideRequest)(nil), // 1: trustix.DecideRequest - (*EntriesResponse)(nil), // 2: trustix.EntriesResponse - (*LogValueResponse)(nil), // 3: trustix.LogValueResponse - (*LogValueDecision)(nil), // 4: trustix.LogValueDecision - (*DecisionResponse)(nil), // 5: trustix.DecisionResponse - (*SubmitRequest)(nil), // 6: trustix.SubmitRequest - (*SubmitResponse)(nil), // 7: trustix.SubmitResponse - (*FlushRequest)(nil), // 8: trustix.FlushRequest - (*FlushResponse)(nil), // 9: trustix.FlushResponse - nil, // 10: trustix.EntriesResponse.EntriesEntry - (*api.KeyValuePair)(nil), // 11: trustix.KeyValuePair - (*schema.MapEntry)(nil), // 12: MapEntry - (*api.LogsRequest)(nil), // 13: trustix.LogsRequest - (*api.ValueRequest)(nil), // 14: trustix.ValueRequest - (*api.LogHeadRequest)(nil), // 15: trustix.LogHeadRequest - (*api.GetLogEntriesRequest)(nil), // 16: trustix.GetLogEntriesRequest - (*api.LogsResponse)(nil), // 17: trustix.LogsResponse - (*api.ValueResponse)(nil), // 18: trustix.ValueResponse - (*schema.LogHead)(nil), // 19: LogHead - (*api.LogEntriesResponse)(nil), // 20: trustix.LogEntriesResponse + (SubmitResponse_Status)(0), // 0: trustix_rpc.v1.SubmitResponse.Status + (*DecideRequest)(nil), // 1: trustix_rpc.v1.DecideRequest + (*EntriesResponse)(nil), // 2: trustix_rpc.v1.EntriesResponse + (*LogValueResponse)(nil), // 3: trustix_rpc.v1.LogValueResponse + (*LogValueDecision)(nil), // 4: trustix_rpc.v1.LogValueDecision + (*DecisionResponse)(nil), // 5: trustix_rpc.v1.DecisionResponse + (*SubmitRequest)(nil), // 6: trustix_rpc.v1.SubmitRequest + (*SubmitResponse)(nil), // 7: trustix_rpc.v1.SubmitResponse + (*FlushRequest)(nil), // 8: trustix_rpc.v1.FlushRequest + (*FlushResponse)(nil), // 9: trustix_rpc.v1.FlushResponse + nil, // 10: trustix_rpc.v1.EntriesResponse.EntriesEntry + (*api.KeyValuePair)(nil), // 11: trustix_api.v1.KeyValuePair + (*schema.MapEntry)(nil), // 12: trustix_schema.v1.MapEntry + (*api.LogsRequest)(nil), // 13: trustix_api.v1.LogsRequest + (*api.ValueRequest)(nil), // 14: trustix_api.v1.ValueRequest + (*api.LogHeadRequest)(nil), // 15: trustix_api.v1.LogHeadRequest + (*api.GetLogEntriesRequest)(nil), // 16: trustix_api.v1.GetLogEntriesRequest + (*api.LogsResponse)(nil), // 17: trustix_api.v1.LogsResponse + (*api.ValueResponse)(nil), // 18: trustix_api.v1.ValueResponse + (*schema.LogHead)(nil), // 19: trustix_schema.v1.LogHead + (*api.LogEntriesResponse)(nil), // 20: trustix_api.v1.LogEntriesResponse } var file_rpc_rpc_proto_depIdxs = []int32{ - 10, // 0: trustix.EntriesResponse.Entries:type_name -> trustix.EntriesResponse.EntriesEntry - 4, // 1: trustix.DecisionResponse.Decision:type_name -> trustix.LogValueDecision - 3, // 2: trustix.DecisionResponse.Mismatches:type_name -> trustix.LogValueResponse - 11, // 3: trustix.SubmitRequest.Items:type_name -> trustix.KeyValuePair - 0, // 4: trustix.SubmitResponse.status:type_name -> trustix.SubmitResponse.Status - 12, // 5: trustix.EntriesResponse.EntriesEntry.value:type_name -> MapEntry - 13, // 6: trustix.RPCApi.Logs:input_type -> trustix.LogsRequest - 1, // 7: trustix.RPCApi.Decide:input_type -> trustix.DecideRequest - 14, // 8: trustix.RPCApi.GetValue:input_type -> trustix.ValueRequest - 15, // 9: trustix.LogRPC.GetHead:input_type -> trustix.LogHeadRequest - 16, // 10: trustix.LogRPC.GetLogEntries:input_type -> trustix.GetLogEntriesRequest - 6, // 11: trustix.LogRPC.Submit:input_type -> trustix.SubmitRequest - 8, // 12: trustix.LogRPC.Flush:input_type -> trustix.FlushRequest - 17, // 13: trustix.RPCApi.Logs:output_type -> trustix.LogsResponse - 5, // 14: trustix.RPCApi.Decide:output_type -> trustix.DecisionResponse - 18, // 15: trustix.RPCApi.GetValue:output_type -> trustix.ValueResponse - 19, // 16: trustix.LogRPC.GetHead:output_type -> LogHead - 20, // 17: trustix.LogRPC.GetLogEntries:output_type -> trustix.LogEntriesResponse - 7, // 18: trustix.LogRPC.Submit:output_type -> trustix.SubmitResponse - 9, // 19: trustix.LogRPC.Flush:output_type -> trustix.FlushResponse + 10, // 0: trustix_rpc.v1.EntriesResponse.Entries:type_name -> trustix_rpc.v1.EntriesResponse.EntriesEntry + 4, // 1: trustix_rpc.v1.DecisionResponse.Decision:type_name -> trustix_rpc.v1.LogValueDecision + 3, // 2: trustix_rpc.v1.DecisionResponse.Mismatches:type_name -> trustix_rpc.v1.LogValueResponse + 11, // 3: trustix_rpc.v1.SubmitRequest.Items:type_name -> trustix_api.v1.KeyValuePair + 0, // 4: trustix_rpc.v1.SubmitResponse.status:type_name -> trustix_rpc.v1.SubmitResponse.Status + 12, // 5: trustix_rpc.v1.EntriesResponse.EntriesEntry.value:type_name -> trustix_schema.v1.MapEntry + 13, // 6: trustix_rpc.v1.RPCApi.Logs:input_type -> trustix_api.v1.LogsRequest + 1, // 7: trustix_rpc.v1.RPCApi.Decide:input_type -> trustix_rpc.v1.DecideRequest + 14, // 8: trustix_rpc.v1.RPCApi.GetValue:input_type -> trustix_api.v1.ValueRequest + 15, // 9: trustix_rpc.v1.LogRPC.GetHead:input_type -> trustix_api.v1.LogHeadRequest + 16, // 10: trustix_rpc.v1.LogRPC.GetLogEntries:input_type -> trustix_api.v1.GetLogEntriesRequest + 6, // 11: trustix_rpc.v1.LogRPC.Submit:input_type -> trustix_rpc.v1.SubmitRequest + 8, // 12: trustix_rpc.v1.LogRPC.Flush:input_type -> trustix_rpc.v1.FlushRequest + 17, // 13: trustix_rpc.v1.RPCApi.Logs:output_type -> trustix_api.v1.LogsResponse + 5, // 14: trustix_rpc.v1.RPCApi.Decide:output_type -> trustix_rpc.v1.DecisionResponse + 18, // 15: trustix_rpc.v1.RPCApi.GetValue:output_type -> trustix_api.v1.ValueResponse + 19, // 16: trustix_rpc.v1.LogRPC.GetHead:output_type -> trustix_schema.v1.LogHead + 20, // 17: trustix_rpc.v1.LogRPC.GetLogEntries:output_type -> trustix_api.v1.LogEntriesResponse + 7, // 18: trustix_rpc.v1.LogRPC.Submit:output_type -> trustix_rpc.v1.SubmitResponse + 9, // 19: trustix_rpc.v1.LogRPC.Flush:output_type -> trustix_rpc.v1.FlushResponse 13, // [13:20] is the sub-list for method output_type 6, // [6:13] is the sub-list for method input_type 6, // [6:6] is the sub-list for extension type_name diff --git a/packages/trustix-proto/rpc/rpc.proto b/packages/trustix-proto/rpc/rpc.proto index 7bad7332..0c946183 100644 --- a/packages/trustix-proto/rpc/rpc.proto +++ b/packages/trustix-proto/rpc/rpc.proto @@ -10,26 +10,26 @@ import "api/api.proto"; option go_package = "github.com/nix-community/trustix/packages/trustix-proto/rpc"; -package trustix; +package trustix_rpc.v1; // RPCApi are "private" rpc methods for an instance. // This should only be available to trusted parties. service RPCApi { // Get a list of all logs published/subscribed by this node - rpc Logs(LogsRequest) returns (LogsResponse) {} + rpc Logs(trustix_api.v1.LogsRequest) returns (trustix_api.v1.LogsResponse) {} // Decide on an output for key based on the configured decision method rpc Decide(DecideRequest) returns (DecisionResponse) {} // Get values by their content-address - rpc GetValue(ValueRequest) returns (ValueResponse) {} + rpc GetValue(trustix_api.v1.ValueRequest) returns (trustix_api.v1.ValueResponse) {} } // RPCApi are "private" rpc methods for an instance related to a specific log. // This should only be available to trusted parties. service LogRPC { - rpc GetHead(LogHeadRequest) returns (LogHead) {} - rpc GetLogEntries(GetLogEntriesRequest) returns (LogEntriesResponse) {} + rpc GetHead(trustix_api.v1.LogHeadRequest) returns (trustix_schema.v1.LogHead) {} + rpc GetLogEntries(trustix_api.v1.GetLogEntriesRequest) returns (trustix_api.v1.LogEntriesResponse) {} rpc Submit(SubmitRequest) returns (SubmitResponse) {} rpc Flush(FlushRequest) returns (FlushResponse) {} } @@ -41,7 +41,7 @@ message DecideRequest { message EntriesResponse { required bytes Key = 1; - map Entries = 2; + map Entries = 2; } message LogValueResponse { @@ -68,7 +68,7 @@ message DecisionResponse { message SubmitRequest { required string LogID = 1; - repeated KeyValuePair Items = 2; + repeated trustix_api.v1.KeyValuePair Items = 2; } message SubmitResponse { diff --git a/packages/trustix-proto/rpc/rpcconnect/rpc.connect.go b/packages/trustix-proto/rpc/rpcconnect/rpc.connect.go index e6f94842..7fc6ce54 100644 --- a/packages/trustix-proto/rpc/rpcconnect/rpc.connect.go +++ b/packages/trustix-proto/rpc/rpcconnect/rpc.connect.go @@ -24,12 +24,12 @@ const _ = connect_go.IsAtLeastVersion0_1_0 const ( // RPCApiName is the fully-qualified name of the RPCApi service. - RPCApiName = "trustix.RPCApi" + RPCApiName = "trustix_rpc.v1.RPCApi" // LogRPCName is the fully-qualified name of the LogRPC service. - LogRPCName = "trustix.LogRPC" + LogRPCName = "trustix_rpc.v1.LogRPC" ) -// RPCApiClient is a client for the trustix.RPCApi service. +// RPCApiClient is a client for the trustix_rpc.v1.RPCApi service. type RPCApiClient interface { // Get a list of all logs published/subscribed by this node Logs(context.Context, *connect_go.Request[api.LogsRequest]) (*connect_go.Response[api.LogsResponse], error) @@ -39,8 +39,8 @@ type RPCApiClient interface { GetValue(context.Context, *connect_go.Request[api.ValueRequest]) (*connect_go.Response[api.ValueResponse], error) } -// NewRPCApiClient constructs a client for the trustix.RPCApi service. By default, it uses the -// Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends +// NewRPCApiClient constructs a client for the trustix_rpc.v1.RPCApi service. By default, it uses +// the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends // uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or // connect.WithGRPCWeb() options. // @@ -51,17 +51,17 @@ func NewRPCApiClient(httpClient connect_go.HTTPClient, baseURL string, opts ...c return &rPCApiClient{ logs: connect_go.NewClient[api.LogsRequest, api.LogsResponse]( httpClient, - baseURL+"/trustix.RPCApi/Logs", + baseURL+"/trustix_rpc.v1.RPCApi/Logs", opts..., ), decide: connect_go.NewClient[rpc.DecideRequest, rpc.DecisionResponse]( httpClient, - baseURL+"/trustix.RPCApi/Decide", + baseURL+"/trustix_rpc.v1.RPCApi/Decide", opts..., ), getValue: connect_go.NewClient[api.ValueRequest, api.ValueResponse]( httpClient, - baseURL+"/trustix.RPCApi/GetValue", + baseURL+"/trustix_rpc.v1.RPCApi/GetValue", opts..., ), } @@ -74,22 +74,22 @@ type rPCApiClient struct { getValue *connect_go.Client[api.ValueRequest, api.ValueResponse] } -// Logs calls trustix.RPCApi.Logs. +// Logs calls trustix_rpc.v1.RPCApi.Logs. func (c *rPCApiClient) Logs(ctx context.Context, req *connect_go.Request[api.LogsRequest]) (*connect_go.Response[api.LogsResponse], error) { return c.logs.CallUnary(ctx, req) } -// Decide calls trustix.RPCApi.Decide. +// Decide calls trustix_rpc.v1.RPCApi.Decide. func (c *rPCApiClient) Decide(ctx context.Context, req *connect_go.Request[rpc.DecideRequest]) (*connect_go.Response[rpc.DecisionResponse], error) { return c.decide.CallUnary(ctx, req) } -// GetValue calls trustix.RPCApi.GetValue. +// GetValue calls trustix_rpc.v1.RPCApi.GetValue. func (c *rPCApiClient) GetValue(ctx context.Context, req *connect_go.Request[api.ValueRequest]) (*connect_go.Response[api.ValueResponse], error) { return c.getValue.CallUnary(ctx, req) } -// RPCApiHandler is an implementation of the trustix.RPCApi service. +// RPCApiHandler is an implementation of the trustix_rpc.v1.RPCApi service. type RPCApiHandler interface { // Get a list of all logs published/subscribed by this node Logs(context.Context, *connect_go.Request[api.LogsRequest]) (*connect_go.Response[api.LogsResponse], error) @@ -106,40 +106,40 @@ type RPCApiHandler interface { // and JSON codecs. They also support gzip compression. func NewRPCApiHandler(svc RPCApiHandler, opts ...connect_go.HandlerOption) (string, http.Handler) { mux := http.NewServeMux() - mux.Handle("/trustix.RPCApi/Logs", connect_go.NewUnaryHandler( - "/trustix.RPCApi/Logs", + mux.Handle("/trustix_rpc.v1.RPCApi/Logs", connect_go.NewUnaryHandler( + "/trustix_rpc.v1.RPCApi/Logs", svc.Logs, opts..., )) - mux.Handle("/trustix.RPCApi/Decide", connect_go.NewUnaryHandler( - "/trustix.RPCApi/Decide", + mux.Handle("/trustix_rpc.v1.RPCApi/Decide", connect_go.NewUnaryHandler( + "/trustix_rpc.v1.RPCApi/Decide", svc.Decide, opts..., )) - mux.Handle("/trustix.RPCApi/GetValue", connect_go.NewUnaryHandler( - "/trustix.RPCApi/GetValue", + mux.Handle("/trustix_rpc.v1.RPCApi/GetValue", connect_go.NewUnaryHandler( + "/trustix_rpc.v1.RPCApi/GetValue", svc.GetValue, opts..., )) - return "/trustix.RPCApi/", mux + return "/trustix_rpc.v1.RPCApi/", mux } // UnimplementedRPCApiHandler returns CodeUnimplemented from all methods. type UnimplementedRPCApiHandler struct{} func (UnimplementedRPCApiHandler) Logs(context.Context, *connect_go.Request[api.LogsRequest]) (*connect_go.Response[api.LogsResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.RPCApi.Logs is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_rpc.v1.RPCApi.Logs is not implemented")) } func (UnimplementedRPCApiHandler) Decide(context.Context, *connect_go.Request[rpc.DecideRequest]) (*connect_go.Response[rpc.DecisionResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.RPCApi.Decide is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_rpc.v1.RPCApi.Decide is not implemented")) } func (UnimplementedRPCApiHandler) GetValue(context.Context, *connect_go.Request[api.ValueRequest]) (*connect_go.Response[api.ValueResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.RPCApi.GetValue is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_rpc.v1.RPCApi.GetValue is not implemented")) } -// LogRPCClient is a client for the trustix.LogRPC service. +// LogRPCClient is a client for the trustix_rpc.v1.LogRPC service. type LogRPCClient interface { GetHead(context.Context, *connect_go.Request[api.LogHeadRequest]) (*connect_go.Response[schema.LogHead], error) GetLogEntries(context.Context, *connect_go.Request[api.GetLogEntriesRequest]) (*connect_go.Response[api.LogEntriesResponse], error) @@ -147,8 +147,8 @@ type LogRPCClient interface { Flush(context.Context, *connect_go.Request[rpc.FlushRequest]) (*connect_go.Response[rpc.FlushResponse], error) } -// NewLogRPCClient constructs a client for the trustix.LogRPC service. By default, it uses the -// Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends +// NewLogRPCClient constructs a client for the trustix_rpc.v1.LogRPC service. By default, it uses +// the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends // uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or // connect.WithGRPCWeb() options. // @@ -159,22 +159,22 @@ func NewLogRPCClient(httpClient connect_go.HTTPClient, baseURL string, opts ...c return &logRPCClient{ getHead: connect_go.NewClient[api.LogHeadRequest, schema.LogHead]( httpClient, - baseURL+"/trustix.LogRPC/GetHead", + baseURL+"/trustix_rpc.v1.LogRPC/GetHead", opts..., ), getLogEntries: connect_go.NewClient[api.GetLogEntriesRequest, api.LogEntriesResponse]( httpClient, - baseURL+"/trustix.LogRPC/GetLogEntries", + baseURL+"/trustix_rpc.v1.LogRPC/GetLogEntries", opts..., ), submit: connect_go.NewClient[rpc.SubmitRequest, rpc.SubmitResponse]( httpClient, - baseURL+"/trustix.LogRPC/Submit", + baseURL+"/trustix_rpc.v1.LogRPC/Submit", opts..., ), flush: connect_go.NewClient[rpc.FlushRequest, rpc.FlushResponse]( httpClient, - baseURL+"/trustix.LogRPC/Flush", + baseURL+"/trustix_rpc.v1.LogRPC/Flush", opts..., ), } @@ -188,27 +188,27 @@ type logRPCClient struct { flush *connect_go.Client[rpc.FlushRequest, rpc.FlushResponse] } -// GetHead calls trustix.LogRPC.GetHead. +// GetHead calls trustix_rpc.v1.LogRPC.GetHead. func (c *logRPCClient) GetHead(ctx context.Context, req *connect_go.Request[api.LogHeadRequest]) (*connect_go.Response[schema.LogHead], error) { return c.getHead.CallUnary(ctx, req) } -// GetLogEntries calls trustix.LogRPC.GetLogEntries. +// GetLogEntries calls trustix_rpc.v1.LogRPC.GetLogEntries. func (c *logRPCClient) GetLogEntries(ctx context.Context, req *connect_go.Request[api.GetLogEntriesRequest]) (*connect_go.Response[api.LogEntriesResponse], error) { return c.getLogEntries.CallUnary(ctx, req) } -// Submit calls trustix.LogRPC.Submit. +// Submit calls trustix_rpc.v1.LogRPC.Submit. func (c *logRPCClient) Submit(ctx context.Context, req *connect_go.Request[rpc.SubmitRequest]) (*connect_go.Response[rpc.SubmitResponse], error) { return c.submit.CallUnary(ctx, req) } -// Flush calls trustix.LogRPC.Flush. +// Flush calls trustix_rpc.v1.LogRPC.Flush. func (c *logRPCClient) Flush(ctx context.Context, req *connect_go.Request[rpc.FlushRequest]) (*connect_go.Response[rpc.FlushResponse], error) { return c.flush.CallUnary(ctx, req) } -// LogRPCHandler is an implementation of the trustix.LogRPC service. +// LogRPCHandler is an implementation of the trustix_rpc.v1.LogRPC service. type LogRPCHandler interface { GetHead(context.Context, *connect_go.Request[api.LogHeadRequest]) (*connect_go.Response[schema.LogHead], error) GetLogEntries(context.Context, *connect_go.Request[api.GetLogEntriesRequest]) (*connect_go.Response[api.LogEntriesResponse], error) @@ -223,44 +223,44 @@ type LogRPCHandler interface { // and JSON codecs. They also support gzip compression. func NewLogRPCHandler(svc LogRPCHandler, opts ...connect_go.HandlerOption) (string, http.Handler) { mux := http.NewServeMux() - mux.Handle("/trustix.LogRPC/GetHead", connect_go.NewUnaryHandler( - "/trustix.LogRPC/GetHead", + mux.Handle("/trustix_rpc.v1.LogRPC/GetHead", connect_go.NewUnaryHandler( + "/trustix_rpc.v1.LogRPC/GetHead", svc.GetHead, opts..., )) - mux.Handle("/trustix.LogRPC/GetLogEntries", connect_go.NewUnaryHandler( - "/trustix.LogRPC/GetLogEntries", + mux.Handle("/trustix_rpc.v1.LogRPC/GetLogEntries", connect_go.NewUnaryHandler( + "/trustix_rpc.v1.LogRPC/GetLogEntries", svc.GetLogEntries, opts..., )) - mux.Handle("/trustix.LogRPC/Submit", connect_go.NewUnaryHandler( - "/trustix.LogRPC/Submit", + mux.Handle("/trustix_rpc.v1.LogRPC/Submit", connect_go.NewUnaryHandler( + "/trustix_rpc.v1.LogRPC/Submit", svc.Submit, opts..., )) - mux.Handle("/trustix.LogRPC/Flush", connect_go.NewUnaryHandler( - "/trustix.LogRPC/Flush", + mux.Handle("/trustix_rpc.v1.LogRPC/Flush", connect_go.NewUnaryHandler( + "/trustix_rpc.v1.LogRPC/Flush", svc.Flush, opts..., )) - return "/trustix.LogRPC/", mux + return "/trustix_rpc.v1.LogRPC/", mux } // UnimplementedLogRPCHandler returns CodeUnimplemented from all methods. type UnimplementedLogRPCHandler struct{} func (UnimplementedLogRPCHandler) GetHead(context.Context, *connect_go.Request[api.LogHeadRequest]) (*connect_go.Response[schema.LogHead], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogRPC.GetHead is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_rpc.v1.LogRPC.GetHead is not implemented")) } func (UnimplementedLogRPCHandler) GetLogEntries(context.Context, *connect_go.Request[api.GetLogEntriesRequest]) (*connect_go.Response[api.LogEntriesResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogRPC.GetLogEntries is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_rpc.v1.LogRPC.GetLogEntries is not implemented")) } func (UnimplementedLogRPCHandler) Submit(context.Context, *connect_go.Request[rpc.SubmitRequest]) (*connect_go.Response[rpc.SubmitResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogRPC.Submit is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_rpc.v1.LogRPC.Submit is not implemented")) } func (UnimplementedLogRPCHandler) Flush(context.Context, *connect_go.Request[rpc.FlushRequest]) (*connect_go.Response[rpc.FlushResponse], error) { - return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix.LogRPC.Flush is not implemented")) + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("trustix_rpc.v1.LogRPC.Flush is not implemented")) } diff --git a/packages/trustix-proto/schema/loghead.pb.go b/packages/trustix-proto/schema/loghead.pb.go index 635438eb..90988f47 100644 --- a/packages/trustix-proto/schema/loghead.pb.go +++ b/packages/trustix-proto/schema/loghead.pb.go @@ -5,7 +5,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.19.4 +// protoc v3.21.6 // source: schema/loghead.proto package schema @@ -116,22 +116,23 @@ var File_schema_loghead_proto protoreflect.FileDescriptor var file_schema_loghead_proto_rawDesc = []byte{ 0x0a, 0x14, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x6f, 0x67, 0x68, 0x65, 0x61, 0x64, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xaf, 0x01, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x48, 0x65, - 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, - 0x02, 0x28, 0x0c, 0x52, 0x07, 0x4c, 0x6f, 0x67, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, 0x08, - 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, 0x61, 0x70, 0x52, - 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x07, 0x4d, 0x61, 0x70, 0x52, 0x6f, - 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x48, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x02, - 0x28, 0x0c, 0x52, 0x06, 0x4d, 0x48, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4d, 0x48, - 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x02, 0x28, 0x04, 0x52, 0x0a, - 0x4d, 0x48, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x09, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, - 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x22, 0xaf, 0x01, 0x0a, 0x07, 0x4c, 0x6f, + 0x67, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x52, 0x6f, 0x6f, 0x74, + 0x18, 0x01, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x07, 0x4c, 0x6f, 0x67, 0x52, 0x6f, 0x6f, 0x74, 0x12, + 0x1a, 0x0a, 0x08, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x02, 0x28, + 0x04, 0x52, 0x08, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x4d, + 0x61, 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x07, 0x4d, 0x61, + 0x70, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x48, 0x52, 0x6f, 0x6f, 0x74, 0x18, + 0x04, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x06, 0x4d, 0x48, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x1e, 0x0a, + 0x0a, 0x4d, 0x48, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x02, 0x28, + 0x04, 0x52, 0x0a, 0x4d, 0x48, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x02, 0x28, 0x0c, + 0x52, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x40, 0x5a, 0x3e, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, + 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, + 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, } var ( @@ -148,7 +149,7 @@ func file_schema_loghead_proto_rawDescGZIP() []byte { var file_schema_loghead_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_schema_loghead_proto_goTypes = []interface{}{ - (*LogHead)(nil), // 0: LogHead + (*LogHead)(nil), // 0: trustix_schema.v1.LogHead } var file_schema_loghead_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type diff --git a/packages/trustix-proto/schema/loghead.proto b/packages/trustix-proto/schema/loghead.proto index c688b4bb..d5bf03e4 100644 --- a/packages/trustix-proto/schema/loghead.proto +++ b/packages/trustix-proto/schema/loghead.proto @@ -5,6 +5,7 @@ syntax = "proto2"; option go_package = "github.com/nix-community/trustix/packages/trustix-proto/schema"; +package trustix_schema.v1; message LogHead { // Log diff --git a/packages/trustix-proto/schema/logleaf.pb.go b/packages/trustix-proto/schema/logleaf.pb.go index 72d29014..151a6cfe 100644 --- a/packages/trustix-proto/schema/logleaf.pb.go +++ b/packages/trustix-proto/schema/logleaf.pb.go @@ -5,7 +5,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.19.4 +// protoc v3.21.6 // source: schema/logleaf.proto package schema @@ -92,17 +92,18 @@ var File_schema_logleaf_proto protoreflect.FileDescriptor var file_schema_logleaf_proto_rawDesc = []byte{ 0x0a, 0x14, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6c, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x66, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5d, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x61, - 0x66, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, - 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x65, 0x61, 0x66, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x0a, 0x4c, 0x65, 0x61, 0x66, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, - 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x22, 0x5d, 0x0a, 0x07, 0x4c, 0x6f, 0x67, + 0x4c, 0x65, 0x61, 0x66, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x4c, 0x65, 0x61, 0x66, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x0a, 0x4c, 0x65, + 0x61, 0x66, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, + 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, } var ( @@ -119,7 +120,7 @@ func file_schema_logleaf_proto_rawDescGZIP() []byte { var file_schema_logleaf_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_schema_logleaf_proto_goTypes = []interface{}{ - (*LogLeaf)(nil), // 0: LogLeaf + (*LogLeaf)(nil), // 0: trustix_schema.v1.LogLeaf } var file_schema_logleaf_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type diff --git a/packages/trustix-proto/schema/logleaf.proto b/packages/trustix-proto/schema/logleaf.proto index 827183ed..6660c857 100644 --- a/packages/trustix-proto/schema/logleaf.proto +++ b/packages/trustix-proto/schema/logleaf.proto @@ -5,6 +5,7 @@ syntax = "proto2"; option go_package = "github.com/nix-community/trustix/packages/trustix-proto/schema"; +package trustix_schema.v1; // Leaf value of a merkle tree message LogLeaf { diff --git a/packages/trustix-proto/schema/mapentry.pb.go b/packages/trustix-proto/schema/mapentry.pb.go index 2eeb55b4..cf3b8790 100644 --- a/packages/trustix-proto/schema/mapentry.pb.go +++ b/packages/trustix-proto/schema/mapentry.pb.go @@ -5,7 +5,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.19.4 +// protoc v3.21.6 // source: schema/mapentry.proto package schema @@ -85,15 +85,16 @@ var File_schema_mapentry_proto protoreflect.FileDescriptor var file_schema_mapentry_proto_rawDesc = []byte{ 0x0a, 0x15, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x6d, 0x61, 0x70, 0x65, 0x6e, 0x74, 0x72, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x38, 0x0a, 0x08, 0x4d, 0x61, 0x70, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x02, 0x28, 0x0c, 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, 0x05, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, - 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, + 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x22, 0x38, 0x0a, 0x08, 0x4d, 0x61, + 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x02, 0x28, 0x0c, 0x52, 0x06, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, 0x05, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, + 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, } var ( @@ -110,7 +111,7 @@ func file_schema_mapentry_proto_rawDescGZIP() []byte { var file_schema_mapentry_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_schema_mapentry_proto_goTypes = []interface{}{ - (*MapEntry)(nil), // 0: MapEntry + (*MapEntry)(nil), // 0: trustix_schema.v1.MapEntry } var file_schema_mapentry_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type diff --git a/packages/trustix-proto/schema/mapentry.proto b/packages/trustix-proto/schema/mapentry.proto index cca386e1..ae62a237 100644 --- a/packages/trustix-proto/schema/mapentry.proto +++ b/packages/trustix-proto/schema/mapentry.proto @@ -5,6 +5,7 @@ syntax = "proto2"; option go_package = "github.com/nix-community/trustix/packages/trustix-proto/schema"; +package trustix_schema.v1; message MapEntry { // Value digest of tree node diff --git a/packages/trustix-proto/schema/queue.pb.go b/packages/trustix-proto/schema/queue.pb.go index 8b6772e5..0a5d54b3 100644 --- a/packages/trustix-proto/schema/queue.pb.go +++ b/packages/trustix-proto/schema/queue.pb.go @@ -5,7 +5,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v3.19.4 +// protoc v3.21.6 // source: schema/queue.proto package schema @@ -86,14 +86,15 @@ var File_schema_queue_proto protoreflect.FileDescriptor var file_schema_queue_proto_rawDesc = []byte{ 0x0a, 0x12, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x31, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x51, 0x75, - 0x65, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x02, 0x28, 0x04, - 0x52, 0x03, 0x4d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x02, - 0x28, 0x04, 0x52, 0x03, 0x4d, 0x61, 0x78, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, - 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x11, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x5f, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x22, 0x31, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x02, 0x28, 0x04, 0x52, 0x03, 0x4d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x4d, 0x61, 0x78, 0x18, + 0x02, 0x20, 0x02, 0x28, 0x04, 0x52, 0x03, 0x4d, 0x61, 0x78, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, } var ( @@ -110,7 +111,7 @@ func file_schema_queue_proto_rawDescGZIP() []byte { var file_schema_queue_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_schema_queue_proto_goTypes = []interface{}{ - (*SubmitQueue)(nil), // 0: SubmitQueue + (*SubmitQueue)(nil), // 0: trustix_schema.v1.SubmitQueue } var file_schema_queue_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type diff --git a/packages/trustix-proto/schema/queue.proto b/packages/trustix-proto/schema/queue.proto index 2e06e4b5..66c28802 100644 --- a/packages/trustix-proto/schema/queue.proto +++ b/packages/trustix-proto/schema/queue.proto @@ -5,6 +5,7 @@ syntax = "proto2"; option go_package = "github.com/nix-community/trustix/packages/trustix-proto/schema"; +package trustix_schema.v1; // This type is internal only and not guaranteed stable message SubmitQueue { From 00620d7967d78e68d2751975f73853452465aa23 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 7 Oct 2022 14:34:57 +1300 Subject: [PATCH 02/49] trustix-nix-reprod: fix first response skipped in hydra channel sync --- .../trustix-nix-reprod/internal/cmd/serve.go | 12 +++++-- packages/trustix-nix-reprod/internal/db/db.go | 4 --- .../internal/db/derivations.sql.go | 4 --- .../internal/db/eval.sql.go | 4 --- .../internal/db/logs.sql.go | 4 --- .../trustix-nix-reprod/internal/db/models.go | 4 --- .../internal/db/reprod.sql.go | 4 --- .../internal/db/suggest.sql.go | 4 --- .../trustix-nix-reprod/internal/dbcache/db.go | 4 --- .../internal/dbcache/diffoscope.sql.go | 4 --- .../internal/dbcache/models.go | 4 --- .../internal/index/channels.go | 33 ++++++++++--------- 12 files changed, 27 insertions(+), 58 deletions(-) diff --git a/packages/trustix-nix-reprod/internal/cmd/serve.go b/packages/trustix-nix-reprod/internal/cmd/serve.go index fd1bbf01..68db7a32 100644 --- a/packages/trustix-nix-reprod/internal/cmd/serve.go +++ b/packages/trustix-nix-reprod/internal/cmd/serve.go @@ -105,6 +105,8 @@ var serveCommand = &cobra.Command{ log.Info("Triggering evaluation index cron job") + indexedEvals := 0 + for channel, channelConfig := range conf.Channels { l := log.WithFields(log.Fields{ "channel": channel, @@ -112,15 +114,19 @@ var serveCommand = &cobra.Command{ l.Info("indexing channel") - err := index.IndexChannel(ctx, db, channel, channelConfig) + n, err := index.IndexChannel(ctx, db, channel, channelConfig) if err != nil { l.WithFields(log.Fields{ - "error": err, + "erroro": err, }).Error("error indexing channel") } + + indexedEvals += n } - log.Info("Done executing evaluation index cron job") + log.WithFields(log.Fields{ + "num_evals": indexedEvals, + }).Info("done executing evaluation index cron job") }) defer evalIndexCron.Stop() } diff --git a/packages/trustix-nix-reprod/internal/db/db.go b/packages/trustix-nix-reprod/internal/db/db.go index 17c2f768..21fc4346 100644 --- a/packages/trustix-nix-reprod/internal/db/db.go +++ b/packages/trustix-nix-reprod/internal/db/db.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/derivations.sql.go b/packages/trustix-nix-reprod/internal/db/derivations.sql.go index e82fc148..64a9e82b 100644 --- a/packages/trustix-nix-reprod/internal/db/derivations.sql.go +++ b/packages/trustix-nix-reprod/internal/db/derivations.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/eval.sql.go b/packages/trustix-nix-reprod/internal/db/eval.sql.go index 59712e08..36b68500 100644 --- a/packages/trustix-nix-reprod/internal/db/eval.sql.go +++ b/packages/trustix-nix-reprod/internal/db/eval.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/logs.sql.go b/packages/trustix-nix-reprod/internal/db/logs.sql.go index e90e851b..2d2e5ebc 100644 --- a/packages/trustix-nix-reprod/internal/db/logs.sql.go +++ b/packages/trustix-nix-reprod/internal/db/logs.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/models.go b/packages/trustix-nix-reprod/internal/db/models.go index d1c3de1e..0637f2f9 100644 --- a/packages/trustix-nix-reprod/internal/db/models.go +++ b/packages/trustix-nix-reprod/internal/db/models.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/reprod.sql.go b/packages/trustix-nix-reprod/internal/db/reprod.sql.go index 31416b19..0fc88c9a 100644 --- a/packages/trustix-nix-reprod/internal/db/reprod.sql.go +++ b/packages/trustix-nix-reprod/internal/db/reprod.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/suggest.sql.go b/packages/trustix-nix-reprod/internal/db/suggest.sql.go index 1bc9059e..47e07b25 100644 --- a/packages/trustix-nix-reprod/internal/db/suggest.sql.go +++ b/packages/trustix-nix-reprod/internal/db/suggest.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/dbcache/db.go b/packages/trustix-nix-reprod/internal/dbcache/db.go index ae0f8847..37971dc7 100644 --- a/packages/trustix-nix-reprod/internal/dbcache/db.go +++ b/packages/trustix-nix-reprod/internal/dbcache/db.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/dbcache/diffoscope.sql.go b/packages/trustix-nix-reprod/internal/dbcache/diffoscope.sql.go index 1f4c23a4..bc6b819c 100644 --- a/packages/trustix-nix-reprod/internal/dbcache/diffoscope.sql.go +++ b/packages/trustix-nix-reprod/internal/dbcache/diffoscope.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/dbcache/models.go b/packages/trustix-nix-reprod/internal/dbcache/models.go index 1e6046d8..02bb3cc0 100644 --- a/packages/trustix-nix-reprod/internal/dbcache/models.go +++ b/packages/trustix-nix-reprod/internal/dbcache/models.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/index/channels.go b/packages/trustix-nix-reprod/internal/index/channels.go index 420cdf2e..b69c1349 100644 --- a/packages/trustix-nix-reprod/internal/index/channels.go +++ b/packages/trustix-nix-reprod/internal/index/channels.go @@ -17,7 +17,7 @@ import ( "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/hydra" ) -func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig *config.Channel) error { +func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig *config.Channel) (int, error) { switch channelConfig.Type { case "hydra": @@ -40,7 +40,7 @@ func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig return qtx.GetLatestHydraEval(ctx, channel) }() if err != nil && !errors.Is(err, sql.ErrNoRows) { - return fmt.Errorf("error retrieving latest hydra eval: %w", err) + return 0, fmt.Errorf("error retrieving latest hydra eval: %w", err) } // are we creating completely from scratch? @@ -48,7 +48,7 @@ func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig evalResp, err := hydra.GetEvaluations(channelConfig.Hydra.BaseURL, channelConfig.Hydra.Project, channelConfig.Hydra.Jobset) if err != nil { - return fmt.Errorf("error getting response from Hydra at '%s': %w", channelConfig.Hydra.BaseURL, err) + return 0, fmt.Errorf("error getting response from Hydra at '%s': %w", channelConfig.Hydra.BaseURL, err) } // Create a list of evaluations to index @@ -58,22 +58,23 @@ func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig } else { idloop: for { + for _, eval := range evalResp.Evals { + if latestEval.HydraEvalID >= eval.ID { + break idloop + } + + evals = append(evals, eval) + } + evalResp, err = evalResp.NextPage() if err != nil { if err == io.EOF { break } - return fmt.Errorf("error getting response from Hydra at '%s': %w", channelConfig.Hydra.BaseURL, err) + return 0, fmt.Errorf("error getting response from Hydra at '%s': %w", channelConfig.Hydra.BaseURL, err) } - for _, eval := range evalResp.Evals { - if latestEval.HydraEvalID >= eval.ID { - break idloop - } - - evals = append(evals, eval) - } } } @@ -87,18 +88,20 @@ func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig nixPath, err := evalMeta.NixPath() if err != nil { - return fmt.Errorf("error getting nix path: %w", err) + return 0, fmt.Errorf("error getting nix path: %w", err) } err = IndexEval(ctx, db, nixPath, channel, timestamp, evalMeta) if err != nil { - return fmt.Errorf("error indexing evaluation as a part of channel '%s': %w", channel, err) + return 0, fmt.Errorf("error indexing evaluation as a part of channel '%s': %w", channel, err) } } + return len(evals), nil + default: - return fmt.Errorf("unhandled channel type: %s", channelConfig.Type) + return 0, fmt.Errorf("unhandled channel type: %s", channelConfig.Type) } - return nil + return 0, nil } From e87afffb9317271c01d134d88b752c8c3d46a2a1 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 7 Oct 2022 14:43:12 +1300 Subject: [PATCH 03/49] trustix-nix-reprod: add more logging related to channel indexing --- .../trustix-nix-reprod/internal/index/channels.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/trustix-nix-reprod/internal/index/channels.go b/packages/trustix-nix-reprod/internal/index/channels.go index b69c1349..c5f4c3c7 100644 --- a/packages/trustix-nix-reprod/internal/index/channels.go +++ b/packages/trustix-nix-reprod/internal/index/channels.go @@ -15,12 +15,24 @@ import ( "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/config" idb "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/db" "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/hydra" + log "github.com/sirupsen/logrus" ) func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig *config.Channel) (int, error) { + + l := log.WithFields(log.Fields{ + "channel": channel, + }) + switch channelConfig.Type { case "hydra": + l = l.WithFields(log.Fields{ + "channelType": "hydra", + }) + + l.Info("getting latest evaluation from database") + latestEval, err := func() (idb.Hydraevaluation, error) { tx, err := db.BeginTx(ctx, nil) if err != nil { @@ -46,6 +58,8 @@ func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig // are we creating completely from scratch? isNew := errors.Is(err, sql.ErrNoRows) + l.Info("getting evaluations from hydra API") + evalResp, err := hydra.GetEvaluations(channelConfig.Hydra.BaseURL, channelConfig.Hydra.Project, channelConfig.Hydra.Jobset) if err != nil { return 0, fmt.Errorf("error getting response from Hydra at '%s': %w", channelConfig.Hydra.BaseURL, err) From f7c11b0c1ba90cbc5d08516eeaf77728770b6ab1 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 7 Oct 2022 17:36:38 +1300 Subject: [PATCH 04/49] trustix-nix-reprod: split database pools into one for read-write and one for read-only this ensures that requests can be served while indexing --- .../internal/cmd/index-eval.go | 4 +- .../internal/cmd/index-logs.go | 4 +- .../internal/cmd/migrate.go | 96 +++++++++++-------- .../trustix-nix-reprod/internal/cmd/serve.go | 20 +--- .../trustix-nix-reprod/internal/index/logs.go | 2 - .../trustix-nix-reprod/internal/server/api.go | 13 ++- .../internal/server/diff.go | 59 ++++++++---- 7 files changed, 109 insertions(+), 89 deletions(-) diff --git a/packages/trustix-nix-reprod/internal/cmd/index-eval.go b/packages/trustix-nix-reprod/internal/cmd/index-eval.go index dab21dc7..b0183fba 100644 --- a/packages/trustix-nix-reprod/internal/cmd/index-eval.go +++ b/packages/trustix-nix-reprod/internal/cmd/index-eval.go @@ -23,7 +23,7 @@ var indexEvalCommand = &cobra.Command{ RunE: func(cmd *cobra.Command, args []string) error { ctx := context.Background() - db, err := setupDB(stateDirectory) + dbs, err := setupDatabases(stateDirectory) if err != nil { return fmt.Errorf("error opening database: %w", err) } @@ -57,7 +57,7 @@ var indexEvalCommand = &cobra.Command{ }, } - err = index.IndexEval(ctx, db, nixpkgs, channel, timestamp, evalMeta) + err = index.IndexEval(ctx, dbs.dbRW, nixpkgs, channel, timestamp, evalMeta) if err != nil { panic(err) } diff --git a/packages/trustix-nix-reprod/internal/cmd/index-logs.go b/packages/trustix-nix-reprod/internal/cmd/index-logs.go index b7bbeb57..83dfe362 100644 --- a/packages/trustix-nix-reprod/internal/cmd/index-logs.go +++ b/packages/trustix-nix-reprod/internal/cmd/index-logs.go @@ -20,7 +20,7 @@ var indexLogsCommand = &cobra.Command{ RunE: func(cmd *cobra.Command, args []string) error { ctx := context.Background() - db, err := setupDB(stateDirectory) + dbs, err := setupDatabases(stateDirectory) if err != nil { return fmt.Errorf("error opening database: %w", err) } @@ -31,7 +31,7 @@ var indexLogsCommand = &cobra.Command{ panic(err) } - err = index.IndexLogs(ctx, db, client) + err = index.IndexLogs(ctx, dbs.dbRW, client) if err != nil { panic(err) } diff --git a/packages/trustix-nix-reprod/internal/cmd/migrate.go b/packages/trustix-nix-reprod/internal/cmd/migrate.go index 049b6f45..5be3a1ae 100644 --- a/packages/trustix-nix-reprod/internal/cmd/migrate.go +++ b/packages/trustix-nix-reprod/internal/cmd/migrate.go @@ -6,7 +6,9 @@ package cmd import ( "database/sql" + "embed" "fmt" + "os" "path/filepath" schema "github.com/nix-community/trustix/packages/trustix-nix-reprod/sql" @@ -16,26 +18,55 @@ import ( ) const sqlDialect = "sqlite3" -const dbConnectionString = "?cache=shared&mode=rwc&_journal_mode=WAL" +const dbConnectionString = "?_journal_mode=WAL" +const dbFilename = "db.sqlite3" +const cacheDBFilename = "cachedb.sqlite3" + +type databases struct { + dbRW *sql.DB + dbRO *sql.DB + cacheDbRW *sql.DB + cacheDbRO *sql.DB +} -func migrateDB(db *sql.DB, dialect string) error { - goose.SetBaseFS(schema.SchemaFS) +func setupDatabases(stateDirectory string) (*databases, error) { + err := os.MkdirAll(stateDirectory, 0755) + if err != nil { + return nil, fmt.Errorf("error creating state directory: %w", err) + } - if err := goose.SetDialect(dialect); err != nil { - return err + db, err := setupDB(stateDirectory, dbFilename, schema.SchemaFS, false) + if err != nil { + return nil, fmt.Errorf("error opening rw database: %w", err) } - if err := goose.Up(db, "schema"); err != nil { - return err + dbRO, err := setupDB(stateDirectory, dbFilename, schema.SchemaFS, true) + if err != nil { + return nil, fmt.Errorf("error opening ro database: %w", err) } - return nil + cacheDB, err := setupDB(stateDirectory, cacheDBFilename, cache_schema.SchemaFS, false) + if err != nil { + return nil, fmt.Errorf("error opening rw cache database: %w", err) + } + + cacheDBRO, err := setupDB(stateDirectory, cacheDBFilename, cache_schema.SchemaFS, true) + if err != nil { + return nil, fmt.Errorf("error opening ro cache database: %w", err) + } + + return &databases{ + dbRW: db, + dbRO: dbRO, + cacheDbRW: cacheDB, + cacheDbRO: cacheDBRO, + }, nil } -func migrateCacheDB(db *sql.DB, dialect string) error { - goose.SetBaseFS(cache_schema.SchemaFS) +func migrateDB(db *sql.DB, fs embed.FS) error { + goose.SetBaseFS(fs) - if err := goose.SetDialect(dialect); err != nil { + if err := goose.SetDialect(sqlDialect); err != nil { return err } @@ -46,35 +77,14 @@ func migrateCacheDB(db *sql.DB, dialect string) error { return nil } -func setupDB(stateDirectory string) (*sql.DB, error) { - dbPath := "file:" + filepath.Join(stateDirectory, "db.sqlite3"+dbConnectionString) - - l := log.WithFields(log.Fields{ - "path": dbPath, - }) - - l.Info("Opening database") - - db, err := sql.Open(sqlDialect, dbPath) - if err != nil { - return nil, fmt.Errorf("error opening database: %w", err) - } - - db.SetMaxOpenConns(1) - - l.Info("Migrating database") - - err = migrateDB(db, sqlDialect) - if err != nil { - return nil, fmt.Errorf("error migrating database: %w", err) +func setupDB(stateDirectory string, filename string, migrationFS embed.FS, readonly bool) (*sql.DB, error) { + dbPath := "file:" + filepath.Join(stateDirectory, filename+dbConnectionString) + if readonly { + dbPath += "&mode=ro" + } else { + dbPath += "&mode=rwc" } - return db, nil -} - -func setupCacheDB(stateDirectory string) (*sql.DB, error) { - dbPath := "file:" + filepath.Join(stateDirectory, "cachedb.sqlite3"+dbConnectionString) - l := log.WithFields(log.Fields{ "path": dbPath, }) @@ -88,11 +98,13 @@ func setupCacheDB(stateDirectory string) (*sql.DB, error) { db.SetMaxOpenConns(1) - l.Info("Migrating database") + if !readonly { + l.Info("Migrating database") - err = migrateCacheDB(db, sqlDialect) - if err != nil { - return nil, fmt.Errorf("error migrating database: %w", err) + err = migrateDB(db, migrationFS) + if err != nil { + return nil, fmt.Errorf("error migrating database: %w", err) + } } return db, nil diff --git a/packages/trustix-nix-reprod/internal/cmd/serve.go b/packages/trustix-nix-reprod/internal/cmd/serve.go index 68db7a32..0acc9bbd 100644 --- a/packages/trustix-nix-reprod/internal/cmd/serve.go +++ b/packages/trustix-nix-reprod/internal/cmd/serve.go @@ -51,19 +51,9 @@ var serveCommand = &cobra.Command{ logIndexCronInterval := time.Second * time.Duration(conf.LogIndexCronInterval) evalIndexCronInterval := time.Second * time.Duration(conf.EvalIndexCronInterval) - err = os.MkdirAll(stateDirectory, 0755) + dbs, err := setupDatabases(stateDirectory) if err != nil { - panic(err) - } - - db, err := setupDB(stateDirectory) - if err != nil { - panic(err) - } - - cacheDB, err := setupCacheDB(stateDirectory) - if err != nil { - panic(err) + panic(fmt.Errorf("error opening database: %w", err)) } client, err := tclient.CreateClient(dialAddress) @@ -84,7 +74,7 @@ var serveCommand = &cobra.Command{ ctx := context.Background() - err = index.IndexLogs(ctx, db, client) + err = index.IndexLogs(ctx, dbs.dbRW, client) if err != nil { panic(err) } @@ -114,7 +104,7 @@ var serveCommand = &cobra.Command{ l.Info("indexing channel") - n, err := index.IndexChannel(ctx, db, channel, channelConfig) + n, err := index.IndexChannel(ctx, dbs.dbRW, channel, channelConfig) if err != nil { l.WithFields(log.Fields{ "erroro": err, @@ -131,7 +121,7 @@ var serveCommand = &cobra.Command{ defer evalIndexCron.Stop() } - apiServer := server.NewAPIServer(db, cacheDB, client) + apiServer := server.NewAPIServer(dbs.dbRO, dbs.cacheDbRW, dbs.cacheDbRO, client) errChan := make(chan error) diff --git a/packages/trustix-nix-reprod/internal/index/logs.go b/packages/trustix-nix-reprod/internal/index/logs.go index 0c103f39..2fb91386 100644 --- a/packages/trustix-nix-reprod/internal/index/logs.go +++ b/packages/trustix-nix-reprod/internal/index/logs.go @@ -214,8 +214,6 @@ func createLogs(ctx context.Context, db *sql.DB, logsResp *api.LogsResponse) (ma logMap[*log.LogID] = dbLog } - logger.Info("finished indexing logs") - return logMap, tx.Commit() } diff --git a/packages/trustix-nix-reprod/internal/server/api.go b/packages/trustix-nix-reprod/internal/server/api.go index 53d711f7..a8976d1b 100644 --- a/packages/trustix-nix-reprod/internal/server/api.go +++ b/packages/trustix-nix-reprod/internal/server/api.go @@ -29,19 +29,22 @@ type respDerivationOutputHash = pb.DerivationReproducibilityResponse_DerivationO type APIServer struct { apiconnect.UnimplementedReproducibilityAPIHandler - client *client.Client - db *sql.DB - cacheDB *sql.DB + client *client.Client + + db *sql.DB + cacheDbRo *sql.DB + cacheDbRw *sql.DB diffExecutor *future.KeyedFutures[*pb.DiffResponse] downloadExecutor *future.KeyedFutures[*refcount.RefCountedValue[*narDownload]] } -func NewAPIServer(db *sql.DB, cacheDB *sql.DB, client *client.Client) *APIServer { +func NewAPIServer(db *sql.DB, cacheDB *sql.DB, cacheDBRO *sql.DB, client *client.Client) *APIServer { return &APIServer{ db: db, client: client, - cacheDB: cacheDB, + cacheDbRw: cacheDB, + cacheDbRo: cacheDBRO, diffExecutor: future.NewKeyedFutures[*pb.DiffResponse](), downloadExecutor: future.NewKeyedFutures[*refcount.RefCountedValue[*narDownload]](), } diff --git a/packages/trustix-nix-reprod/internal/server/diff.go b/packages/trustix-nix-reprod/internal/server/diff.go index ba839145..2aa1252e 100644 --- a/packages/trustix-nix-reprod/internal/server/diff.go +++ b/packages/trustix-nix-reprod/internal/server/diff.go @@ -329,28 +329,31 @@ func (s *APIServer) Diff(ctx context.Context, req *connect.Request[pb.DiffReques requestKey = outputHash2 + "." + outputHash1 } - tx, err := s.cacheDB.BeginTx(ctx, nil) - if err != nil { - return nil, fmt.Errorf("error creating db transaction: %w", err) - } - defer func() { - err := tx.Rollback() - if err != nil && err != sql.ErrTxDone { - panic(err) + // Read from cache + { + tx, err := s.cacheDbRo.BeginTx(ctx, nil) + if err != nil { + return nil, fmt.Errorf("error creating db transaction: %w", err) + } + defer func() { + err := tx.Rollback() + if err != nil && err != sql.ErrTxDone { + panic(err) + } + }() + + queries := dbcache.New(s.cacheDbRo) + qtx := queries.WithTx(tx) + + // attempt to get from cache + html, err := qtx.GetDiffoscopeHTML(ctx, requestKey) + if err != nil && !errors.Is(err, sql.ErrNoRows) { + return nil, fmt.Errorf("error retrieving diffoscope HTML from cache: %w", err) + } else if err == nil { + return connect.NewResponse(&pb.DiffResponse{ + HTMLDiff: string(html), + }), nil } - }() - - queries := dbcache.New(s.cacheDB) - qtx := queries.WithTx(tx) - - // attempt to get from cache - html, err := qtx.GetDiffoscopeHTML(ctx, requestKey) - if err != nil && !errors.Is(err, sql.ErrNoRows) { - return nil, fmt.Errorf("error retrieving diffoscope HTML from cache: %w", err) - } else if err == nil { - return connect.NewResponse(&pb.DiffResponse{ - HTMLDiff: string(html), - }), nil } // if no cache entry was found, download and compare @@ -361,6 +364,20 @@ func (s *APIServer) Diff(ctx context.Context, req *connect.Request[pb.DiffReques return nil, err } + tx, err := s.cacheDbRw.BeginTx(ctx, nil) + if err != nil { + return nil, fmt.Errorf("error creating db transaction: %w", err) + } + defer func() { + err := tx.Rollback() + if err != nil && err != sql.ErrTxDone { + panic(err) + } + }() + + queries := dbcache.New(s.cacheDbRw) + qtx := queries.WithTx(tx) + // add an entry to the cache _, err = qtx.CreateDiffoscope(context.Background(), dbcache.CreateDiffoscopeParams{ Key: requestKey, From b4195579538be1f828658f70d1615991b8898597 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 7 Oct 2022 18:26:30 +1300 Subject: [PATCH 05/49] trustix-nix-reprod: fix percentage calculation when there are no outputs --- packages/trustix-nix-reprod/internal/server/api.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/trustix-nix-reprod/internal/server/api.go b/packages/trustix-nix-reprod/internal/server/api.go index a8976d1b..3e76eaf4 100644 --- a/packages/trustix-nix-reprod/internal/server/api.go +++ b/packages/trustix-nix-reprod/internal/server/api.go @@ -201,7 +201,12 @@ func (s *APIServer) AttrReproducibilityTimeSeries(ctx context.Context, req *conn for i, row := range rows { // out of all built paths, how many were reproduced - pctReproduced := (100 / float32(row.OutputHashCount)) * float32(row.StorePathCount) + var pctReproduced float32 + if row.OutputHashCount > 0 { + pctReproduced = (100 / float32(row.OutputHashCount)) * float32(row.StorePathCount) + } else { + pctReproduced = 0.0 + } // out of the total amount of paths, how many were reproduced pctReproducedCum := 100 / float32(row.OutputCount) * (pctReproduced / 100 * float32(row.StorePathCount)) From b45e9538950370a8921308c6ba25c951d9137798 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Mon, 10 Oct 2022 22:05:00 +1300 Subject: [PATCH 06/49] trustix-nix-reprod: move more config from serve to config package --- .../trustix-nix-reprod/examples/config.toml | 4 + .../trustix-nix-reprod/internal/cmd/serve.go | 18 ++-- .../internal/config/config.go | 16 ++-- .../internal/config/cron.go | 22 +++++ .../trustix-nix-reprod/internal/cron/cron.go | 87 ++++++++++--------- 5 files changed, 86 insertions(+), 61 deletions(-) create mode 100644 packages/trustix-nix-reprod/internal/config/cron.go diff --git a/packages/trustix-nix-reprod/examples/config.toml b/packages/trustix-nix-reprod/examples/config.toml index 42e2f2a0..c248a6ad 100644 --- a/packages/trustix-nix-reprod/examples/config.toml +++ b/packages/trustix-nix-reprod/examples/config.toml @@ -1,3 +1,7 @@ +[cron] +eval_index = 3600 +log_index = 900 + [channels.nixos-unstable] expr = "import { }" type = "hydra" diff --git a/packages/trustix-nix-reprod/internal/cmd/serve.go b/packages/trustix-nix-reprod/internal/cmd/serve.go index 0acc9bbd..3f0848cc 100644 --- a/packages/trustix-nix-reprod/internal/cmd/serve.go +++ b/packages/trustix-nix-reprod/internal/cmd/serve.go @@ -48,8 +48,8 @@ var serveCommand = &cobra.Command{ } // config options - logIndexCronInterval := time.Second * time.Duration(conf.LogIndexCronInterval) - evalIndexCronInterval := time.Second * time.Duration(conf.EvalIndexCronInterval) + logIndexCronInterval := time.Second * time.Duration(conf.Cron.LogInterval) + evalIndexCronInterval := time.Second * time.Duration(conf.Cron.EvalInterval) dbs, err := setupDatabases(stateDirectory) if err != nil { @@ -69,11 +69,9 @@ var serveCommand = &cobra.Command{ "interval": logIndexCronInterval, }).Info("Starting log index cron") - logIndexCron := cron.NewSingletonCronJob(logIndexCronInterval, func() { + logIndexCron := cron.NewSingletonCronJob(logIndexCronInterval, func(ctx context.Context) { log.Info("Triggering log index cron job") - ctx := context.Background() - err = index.IndexLogs(ctx, dbs.dbRW, client) if err != nil { panic(err) @@ -81,18 +79,16 @@ var serveCommand = &cobra.Command{ log.Info("Done executing log index cron job") }) - defer logIndexCron.Stop() + defer logIndexCron.Close() } - // Start indexing logs + // Start indexing evaluations { log.WithFields(log.Fields{ "interval": evalIndexCronInterval, }).Info("Starting evaluation index cron") - evalIndexCron := cron.NewSingletonCronJob(evalIndexCronInterval, func() { - ctx := context.Background() - + evalIndexCron := cron.NewSingletonCronJob(evalIndexCronInterval, func(ctx context.Context) { log.Info("Triggering evaluation index cron job") indexedEvals := 0 @@ -118,7 +114,7 @@ var serveCommand = &cobra.Command{ "num_evals": indexedEvals, }).Info("done executing evaluation index cron job") }) - defer evalIndexCron.Stop() + defer evalIndexCron.Close() } apiServer := server.NewAPIServer(dbs.dbRO, dbs.cacheDbRW, dbs.cacheDbRO, client) diff --git a/packages/trustix-nix-reprod/internal/config/config.go b/packages/trustix-nix-reprod/internal/config/config.go index 439448b8..17185cdb 100644 --- a/packages/trustix-nix-reprod/internal/config/config.go +++ b/packages/trustix-nix-reprod/internal/config/config.go @@ -16,21 +16,15 @@ import ( ) type Config struct { - Channels map[string]*Channel `toml:"channels" json:"channels"` - LogIndexCronInterval int64 `toml:"log_index_cron_interval" json:"log_index_cron_interval"` - EvalIndexCronInterval int64 `toml:"eval_index_cron_interval" json:"eval_index_cron_interval"` + Channels map[string]*Channel `toml:"channels" json:"channels"` + Cron *Cron `toml:"cron" json:"cron"` } func (c *Config) init() { - // Every 5 minutes by default - if c.LogIndexCronInterval == 0 { - c.LogIndexCronInterval = 15 * 60 - } - - // Every hour by default - if c.EvalIndexCronInterval == 0 { - c.EvalIndexCronInterval = 60 * 60 + if c.Cron == nil { + c.Cron = &Cron{} } + c.Cron.init() } func (c *Config) Validate() error { diff --git a/packages/trustix-nix-reprod/internal/config/cron.go b/packages/trustix-nix-reprod/internal/config/cron.go new file mode 100644 index 00000000..97af8c03 --- /dev/null +++ b/packages/trustix-nix-reprod/internal/config/cron.go @@ -0,0 +1,22 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + +package config + +type Cron struct { + LogInterval int64 `toml:"log_index" json:"log_index"` + EvalInterval int64 `toml:"eval_index" json:"eval_index"` +} + +func (c *Cron) init() { + // Every 15 minutes by default + if c.LogInterval == 0 { + c.LogInterval = 15 * 60 + } + + // Every hour by default + if c.EvalInterval == 0 { + c.EvalInterval = 60 * 60 + } +} diff --git a/packages/trustix-nix-reprod/internal/cron/cron.go b/packages/trustix-nix-reprod/internal/cron/cron.go index 1564618b..e4397bc4 100644 --- a/packages/trustix-nix-reprod/internal/cron/cron.go +++ b/packages/trustix-nix-reprod/internal/cron/cron.go @@ -5,31 +5,48 @@ package cron import ( - "sync/atomic" + "context" + "sync" "time" ) type CronJob struct { stopChan chan struct{} - ticker *time.Ticker + wg sync.WaitGroup } +type CronFunc = func(context.Context) + // Run fn at an interval -func NewCronJob(d time.Duration, fn func()) *CronJob { +func NewCronJob(d time.Duration, fn CronFunc) *CronJob { j := &CronJob{ - ticker: time.NewTicker(d), stopChan: make(chan struct{}), + wg: sync.WaitGroup{}, } + ctx, cancel := context.WithCancel(context.Background()) + + run := func() { + j.wg.Add(1) + defer j.wg.Done() + + fn(ctx) + } + + j.wg.Add(1) + go func() { - go fn() + defer j.wg.Done() + + go run() for { select { case <-j.stopChan: + cancel() break - case <-j.ticker.C: - go fn() + case <-time.After(d): + go run() } } }() @@ -37,47 +54,39 @@ func NewCronJob(d time.Duration, fn func()) *CronJob { return j } -// A variant of a cronjob which only ever runs one instance of a function -// if another instance is already running, the tick is dropped. -func NewSingletonCronJob(d time.Duration, fn func()) *CronJob { - j := &CronJob{ - ticker: time.NewTicker(d), - stopChan: make(chan struct{}), - } +func NewSingletonCronJob(d time.Duration, fn CronFunc) *CronJob { + var mux sync.Mutex + running := false - var running atomic.Bool + return NewCronJob(d, func(ctx context.Context) { + // Return if already running + { + mux.Lock() - run := func() { - if running.Load() { - return + if running { + return + } + + running = true + + mux.Unlock() } - running.Store(true) + // Unset running defer func() { - running.Store(false) + mux.Lock() + running = false + mux.Unlock() }() - fn() - } - - go func() { - go run() - - for { - select { - case <-j.stopChan: - break - case <-j.ticker.C: - go run() - } - } - }() - - return j + fn(ctx) + }) } -func (j *CronJob) Stop() { +func (j *CronJob) Close() error { j.stopChan <- struct{}{} - j.ticker.Stop() + j.wg.Wait() + + return nil } From b26a1d41394f74a8649e522b4a3de0e8fb648db9 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Tue, 11 Oct 2022 15:07:56 +1300 Subject: [PATCH 07/49] trustix-nix-reprod: cron: prevent job stampeding by adding a random sleep before the first job trigger --- .../trustix-nix-reprod/internal/cron/cron.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/trustix-nix-reprod/internal/cron/cron.go b/packages/trustix-nix-reprod/internal/cron/cron.go index e4397bc4..02ea8bb5 100644 --- a/packages/trustix-nix-reprod/internal/cron/cron.go +++ b/packages/trustix-nix-reprod/internal/cron/cron.go @@ -6,6 +6,8 @@ package cron import ( "context" + "encoding/binary" + "math/rand" "sync" "time" ) @@ -17,6 +19,10 @@ type CronJob struct { type CronFunc = func(context.Context) +func randInt64(max int64) int64 { + return int64(rand.Intn(int(max))) +} + // Run fn at an interval func NewCronJob(d time.Duration, fn CronFunc) *CronJob { j := &CronJob{ @@ -35,6 +41,10 @@ func NewCronJob(d time.Duration, fn CronFunc) *CronJob { j.wg.Add(1) + // on the initial run of the cron job add a random sleep within the interval + // to prevent all concurrent jobs triggering at the same time + duration := time.Microsecond * time.Duration(randInt64(d.Microseconds())) + go func() { defer j.wg.Done() @@ -45,10 +55,14 @@ func NewCronJob(d time.Duration, fn CronFunc) *CronJob { case <-j.stopChan: cancel() break - case <-time.After(d): + case <-time.After(duration): go run() } } + + if duration != d { + duration = d + } }() return j From 3c42340e9541cd618244ffd9d15034308c2c22d2 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Tue, 11 Oct 2022 15:21:01 +1300 Subject: [PATCH 08/49] trustix-nix-reprod: cron: add logging --- .../trustix-nix-reprod/internal/cmd/serve.go | 6 ++-- .../trustix-nix-reprod/internal/cron/cron.go | 30 ++++++++++++------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/trustix-nix-reprod/internal/cmd/serve.go b/packages/trustix-nix-reprod/internal/cmd/serve.go index 3f0848cc..73876e58 100644 --- a/packages/trustix-nix-reprod/internal/cmd/serve.go +++ b/packages/trustix-nix-reprod/internal/cmd/serve.go @@ -69,7 +69,7 @@ var serveCommand = &cobra.Command{ "interval": logIndexCronInterval, }).Info("Starting log index cron") - logIndexCron := cron.NewSingletonCronJob(logIndexCronInterval, func(ctx context.Context) { + logIndexCron := cron.NewSingletonCronJob("log_index", logIndexCronInterval, func(ctx context.Context) { log.Info("Triggering log index cron job") err = index.IndexLogs(ctx, dbs.dbRW, client) @@ -88,9 +88,7 @@ var serveCommand = &cobra.Command{ "interval": evalIndexCronInterval, }).Info("Starting evaluation index cron") - evalIndexCron := cron.NewSingletonCronJob(evalIndexCronInterval, func(ctx context.Context) { - log.Info("Triggering evaluation index cron job") - + evalIndexCron := cron.NewSingletonCronJob("eval_index", evalIndexCronInterval, func(ctx context.Context) { indexedEvals := 0 for channel, channelConfig := range conf.Channels { diff --git a/packages/trustix-nix-reprod/internal/cron/cron.go b/packages/trustix-nix-reprod/internal/cron/cron.go index 02ea8bb5..2a7aac78 100644 --- a/packages/trustix-nix-reprod/internal/cron/cron.go +++ b/packages/trustix-nix-reprod/internal/cron/cron.go @@ -6,10 +6,11 @@ package cron import ( "context" - "encoding/binary" "math/rand" "sync" "time" + + log "github.com/sirupsen/logrus" ) type CronJob struct { @@ -19,23 +20,27 @@ type CronJob struct { type CronFunc = func(context.Context) -func randInt64(max int64) int64 { - return int64(rand.Intn(int(max))) -} - // Run fn at an interval -func NewCronJob(d time.Duration, fn CronFunc) *CronJob { +func NewCronJob(name string, d time.Duration, fn CronFunc) *CronJob { j := &CronJob{ stopChan: make(chan struct{}), wg: sync.WaitGroup{}, } + l := log.WithFields(log.Fields{ + "job": "cron." + name, + "interval": d, + }) + ctx, cancel := context.WithCancel(context.Background()) run := func() { j.wg.Add(1) defer j.wg.Done() + l.Info("starting job") + defer l.Info("job done") + fn(ctx) } @@ -43,16 +48,19 @@ func NewCronJob(d time.Duration, fn CronFunc) *CronJob { // on the initial run of the cron job add a random sleep within the interval // to prevent all concurrent jobs triggering at the same time - duration := time.Microsecond * time.Duration(randInt64(d.Microseconds())) + duration := time.Microsecond * time.Duration(rand.Int63n(d.Microseconds())) + + l.WithFields(log.Fields{ + "initial": duration, + }).Info("initialized job") go func() { defer j.wg.Done() - go run() - for { select { case <-j.stopChan: + l.Info("stopping") cancel() break case <-time.After(duration): @@ -68,11 +76,11 @@ func NewCronJob(d time.Duration, fn CronFunc) *CronJob { return j } -func NewSingletonCronJob(d time.Duration, fn CronFunc) *CronJob { +func NewSingletonCronJob(name string, d time.Duration, fn CronFunc) *CronJob { var mux sync.Mutex running := false - return NewCronJob(d, func(ctx context.Context) { + return NewCronJob(name, d, func(ctx context.Context) { // Return if already running { mux.Lock() From 3bd6549693137c053079ad486de455046a9e7559 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Tue, 11 Oct 2022 17:18:45 +1300 Subject: [PATCH 09/49] treewide: bump go packages --- packages/go-lib/go.mod | 2 +- packages/go-lib/go.sum | 4 ++-- packages/go-lib/gomod2nix.toml | 4 ++-- packages/trustix-nix-reprod/go.mod | 20 ++++++++++---------- packages/trustix-nix-reprod/go.sum | 20 ++++++++++---------- packages/trustix-nix-reprod/gomod2nix.toml | 20 ++++++++++---------- packages/trustix-nix/go.mod | 8 ++++---- packages/trustix-nix/go.sum | 4 ++-- packages/trustix-nix/gomod2nix.toml | 4 ++-- packages/trustix/go.mod | 10 +++++----- packages/trustix/go.sum | 8 ++++---- packages/trustix/gomod2nix.toml | 8 ++++---- 12 files changed, 56 insertions(+), 56 deletions(-) diff --git a/packages/go-lib/go.mod b/packages/go-lib/go.mod index 40f6d691..fa1137a9 100644 --- a/packages/go-lib/go.mod +++ b/packages/go-lib/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/stretchr/testify v1.8.0 - golang.org/x/exp v0.0.0-20221004215720-b9f4876ce741 + golang.org/x/exp v0.0.0-20221010202428-3a778c567f61 ) require ( diff --git a/packages/go-lib/go.sum b/packages/go-lib/go.sum index c82e6bf1..9ad2c0c3 100644 --- a/packages/go-lib/go.sum +++ b/packages/go-lib/go.sum @@ -8,8 +8,8 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -golang.org/x/exp v0.0.0-20221004215720-b9f4876ce741 h1:fGZugkZk2UgYBxtpKmvub51Yno1LJDeEsRp2xGD+0gY= -golang.org/x/exp v0.0.0-20221004215720-b9f4876ce741/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221010202428-3a778c567f61 h1:9echpU8vWVULSj2oFTtlY8mpPya+ED1L5xlaCaEEc+M= +golang.org/x/exp v0.0.0-20221010202428-3a778c567f61/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/packages/go-lib/gomod2nix.toml b/packages/go-lib/gomod2nix.toml index 444ddd07..bd74adb2 100644 --- a/packages/go-lib/gomod2nix.toml +++ b/packages/go-lib/gomod2nix.toml @@ -11,8 +11,8 @@ schema = 3 version = "v1.8.0" hash = "sha256-LDxBAebK+A06y4vbH7cd1sVBOameIY81Xm8/9OPZh7o=" [mod."golang.org/x/exp"] - version = "v0.0.0-20221004215720-b9f4876ce741" - hash = "sha256-j4A3FnOJBkybLjkkeXg5ptBLzWCepOojr/MV96u/MaI=" + version = "v0.0.0-20221010202428-3a778c567f61" + hash = "sha256-2aATMtazbT3i+X3m0Ju54GKOggcyeX9dAJFxO+H5IxQ=" [mod."gopkg.in/yaml.v3"] version = "v3.0.1" hash = "sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU=" diff --git a/packages/trustix-nix-reprod/go.mod b/packages/trustix-nix-reprod/go.mod index e327966a..40fed441 100644 --- a/packages/trustix-nix-reprod/go.mod +++ b/packages/trustix-nix-reprod/go.mod @@ -21,10 +21,10 @@ require ( github.com/kyleconroy/sqlc v1.15.0 github.com/mattn/go-sqlite3 v1.14.15 github.com/nix-community/go-nix v0.0.0-20220906172053-6b0185c1190b - github.com/nix-community/trustix/packages/go-lib v0.0.0-20221006094532-116e5118302b - github.com/nix-community/trustix/packages/trustix v0.0.0-20221006094532-116e5118302b - github.com/nix-community/trustix/packages/trustix-nix v0.0.0-20221006094532-116e5118302b - github.com/nix-community/trustix/packages/trustix-proto v0.0.0-20221006094532-116e5118302b + github.com/nix-community/trustix/packages/go-lib v0.0.0-20221010024647-1705ebe5aa6d + github.com/nix-community/trustix/packages/trustix v0.0.0-20221010024647-1705ebe5aa6d + github.com/nix-community/trustix/packages/trustix-nix v0.0.0-20221010024647-1705ebe5aa6d + github.com/nix-community/trustix/packages/trustix-proto v0.0.0-20221010024647-1705ebe5aa6d github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 github.com/pressly/goose v2.7.0+incompatible github.com/pressly/goose/v3 v3.7.0 @@ -50,17 +50,17 @@ require ( github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/jinzhu/inflection v1.0.0 // indirect - github.com/klauspost/cpuid/v2 v2.1.1 // indirect + github.com/klauspost/cpuid/v2 v2.1.2 // indirect github.com/lib/pq v1.10.7 // indirect github.com/minio/sha256-simd v1.0.0 // indirect github.com/mr-tron/base58 v1.2.0 // indirect github.com/multiformats/go-multihash v0.2.1 // indirect github.com/multiformats/go-varint v0.0.6 // indirect - github.com/nix-community/trustix/packages/unixtransport v0.0.0-20221006094532-116e5118302b // indirect + github.com/nix-community/trustix/packages/unixtransport v0.0.0-20221010024647-1705ebe5aa6d // indirect github.com/pganalyze/pg_query_go/v2 v2.1.2 // indirect github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 // indirect github.com/pingcap/log v1.1.0 // indirect - github.com/pingcap/tidb/parser v0.0.0-20221002033547-51a6684fb767 // indirect + github.com/pingcap/tidb/parser v0.0.0-20221011024349-6c7a2365cedb // indirect github.com/pkg/errors v0.9.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect @@ -69,9 +69,9 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.23.0 // indirect - golang.org/x/crypto v0.0.0-20221005025214-4161e89ecf1b // indirect - golang.org/x/exp v0.0.0-20221004215720-b9f4876ce741 // indirect - golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect + golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 // indirect + golang.org/x/exp v0.0.0-20221010202428-3a778c567f61 // indirect + golang.org/x/sys v0.0.0-20221010170243-090e33056c14 // indirect golang.org/x/text v0.3.7 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/packages/trustix-nix-reprod/go.sum b/packages/trustix-nix-reprod/go.sum index 8c45fc03..51418c0f 100644 --- a/packages/trustix-nix-reprod/go.sum +++ b/packages/trustix-nix-reprod/go.sum @@ -74,8 +74,8 @@ github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhB github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.1.1 h1:t0wUqjowdm8ezddV5k0tLWVklVuvLJpoHeb4WBdydm0= -github.com/klauspost/cpuid/v2 v2.1.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.1.2 h1:XhdX4fqAJUA0yj+kUwMavO0hHrSPAecYdYf1ZmxHvak= +github.com/klauspost/cpuid/v2 v2.1.2/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -112,8 +112,8 @@ github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 h1:+FZIDR/D97YOP github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg= github.com/pingcap/log v1.1.0 h1:ELiPxACz7vdo1qAvvaWJg1NrYFoY6gqAh/+Uo6aXdD8= github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= -github.com/pingcap/tidb/parser v0.0.0-20221002033547-51a6684fb767 h1:g7oFX7Yn/to+cDslfPfY3/9gk4yX+q2tgXjIFGSooYQ= -github.com/pingcap/tidb/parser v0.0.0-20221002033547-51a6684fb767/go.mod h1:wjvp+T3/T9XYt0nKqGX3Kc1AKuyUcfno6LTc6b2A6ew= +github.com/pingcap/tidb/parser v0.0.0-20221011024349-6c7a2365cedb h1:hXUvGTGbfPm87+MpYz9c59h0CUeZ7hwIEDD6DRuQgvc= +github.com/pingcap/tidb/parser v0.0.0-20221011024349-6c7a2365cedb/go.mod h1:wjvp+T3/T9XYt0nKqGX3Kc1AKuyUcfno6LTc6b2A6ew= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -158,10 +158,10 @@ go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20221005025214-4161e89ecf1b h1:huxqepDufQpLLIRXiVkTvnxrzJlpwmIWAObmcCcUFr0= -golang.org/x/crypto v0.0.0-20221005025214-4161e89ecf1b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/exp v0.0.0-20221004215720-b9f4876ce741 h1:fGZugkZk2UgYBxtpKmvub51Yno1LJDeEsRp2xGD+0gY= -golang.org/x/exp v0.0.0-20221004215720-b9f4876ce741/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2 h1:x8vtB3zMecnlqZIwJNUUpwYKYSqCz5jXbiyv0ZJJZeI= +golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/exp v0.0.0-20221010202428-3a778c567f61 h1:9echpU8vWVULSj2oFTtlY8mpPya+ED1L5xlaCaEEc+M= +golang.org/x/exp v0.0.0-20221010202428-3a778c567f61/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -178,8 +178,8 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14 h1:k5II8e6QD8mITdi+okbbmR/cIyEbeXLBhy5Ha4nevyc= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/packages/trustix-nix-reprod/gomod2nix.toml b/packages/trustix-nix-reprod/gomod2nix.toml index d92b3ea6..b51fe24e 100644 --- a/packages/trustix-nix-reprod/gomod2nix.toml +++ b/packages/trustix-nix-reprod/gomod2nix.toml @@ -68,8 +68,8 @@ schema = 3 version = "v1.0.0" hash = "sha256-3h3pHib5MaCXKyKLIMyQnSptDJ16kPjCOQPoEBoQsZg=" [mod."github.com/klauspost/cpuid/v2"] - version = "v2.1.1" - hash = "sha256-Ru6KSK9N08IxuwinJA1c+1zA04rTY8kcHBcKThMqZkE=" + version = "v2.1.2" + hash = "sha256-Qm5gCgbGcM5Pp6Xy/T+uWqbJbZLnZqLszw1tjuj2aK4=" [mod."github.com/kyleconroy/sqlc"] version = "v1.15.0" hash = "sha256-MzeNP+G9g507G9s0wTZfQLVHGYKilMoBXClANEP+oH0=" @@ -107,8 +107,8 @@ schema = 3 version = "v1.1.0" hash = "sha256-JT33CJMknTXha1ERt4s6vV9fyx99J+Ot8rFrNKXTsTc=" [mod."github.com/pingcap/tidb/parser"] - version = "v0.0.0-20221002033547-51a6684fb767" - hash = "sha256-irbWWJr6edZiMZG/HAVCGzm2R8M6l4STGwruS9CEsoc=" + version = "v0.0.0-20221011024349-6c7a2365cedb" + hash = "sha256-bCIhc8REurAIuROdoAZP+T2/LldP5gR1DqXmFufHgGc=" [mod."github.com/pkg/errors"] version = "v0.9.1" hash = "sha256-mNfQtcrQmu3sNg/7IwiieKWOgFQOVVe2yXgKBpe/wZw=" @@ -146,17 +146,17 @@ schema = 3 version = "v1.23.0" hash = "sha256-A/Wf2F9yc+OTyX86QjTtzemUOaFSd7ptoNFaqr2smig=" [mod."golang.org/x/crypto"] - version = "v0.0.0-20221005025214-4161e89ecf1b" - hash = "sha256-oU/a2iYUHp/bV1weLjkrjrfutQ5poN6PYHZIdHOm6cI=" + version = "v0.0.0-20221010152910-d6f0a8c073c2" + hash = "sha256-jZZeMwr37uKVLfEEWvRqDlrfGy03rf5ghiZXoF/lh2E=" [mod."golang.org/x/exp"] - version = "v0.0.0-20221004215720-b9f4876ce741" - hash = "sha256-j4A3FnOJBkybLjkkeXg5ptBLzWCepOojr/MV96u/MaI=" + version = "v0.0.0-20221010202428-3a778c567f61" + hash = "sha256-2aATMtazbT3i+X3m0Ju54GKOggcyeX9dAJFxO+H5IxQ=" [mod."golang.org/x/net"] version = "v0.0.0-20221004154528-8021a29435af" hash = "sha256-KYvRtL8Ich2Jo4Jji9rj8WL4XrjsoddIwggcMd2e1EE=" [mod."golang.org/x/sys"] - version = "v0.0.0-20220928140112-f11e5e49a4ec" - hash = "sha256-Xu81/C0U3hGOIG2Z0AK/1ahyrQgTbP6oagMIrN25zXU=" + version = "v0.0.0-20221010170243-090e33056c14" + hash = "sha256-0QvEbu4o68ESEiocyqD/kFbDjRdnGbJWGIazHdsaIYQ=" [mod."golang.org/x/text"] version = "v0.3.7" hash = "sha256-XH2pUzzQx95O0rak00grQvfACfL+EmZiV7ZzJBkX+XY=" diff --git a/packages/trustix-nix/go.mod b/packages/trustix-nix/go.mod index 254390a1..41c99e4d 100644 --- a/packages/trustix-nix/go.mod +++ b/packages/trustix-nix/go.mod @@ -6,8 +6,8 @@ require ( github.com/bakins/logrus-middleware v0.0.0-20180426214643-ce4c6f8deb07 github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf github.com/nix-community/go-nix v0.0.0-20220906172053-6b0185c1190b - github.com/nix-community/trustix/packages/trustix v0.0.0-20221006094532-116e5118302b - github.com/nix-community/trustix/packages/trustix-proto v0.0.0-20221006094532-116e5118302b + github.com/nix-community/trustix/packages/trustix v0.0.0-20221010024647-1705ebe5aa6d + github.com/nix-community/trustix/packages/trustix-proto v0.0.0-20221010024647-1705ebe5aa6d github.com/sirupsen/logrus v1.9.0 github.com/spf13/cobra v1.5.0 github.com/stretchr/testify v1.8.0 @@ -21,10 +21,10 @@ require ( github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/kr/pretty v0.1.0 // indirect github.com/kr/text v0.2.0 // indirect - github.com/nix-community/trustix/packages/unixtransport v0.0.0-20221006094532-116e5118302b // indirect + github.com/nix-community/trustix/packages/unixtransport v0.0.0-20221010024647-1705ebe5aa6d // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect + golang.org/x/sys v0.0.0-20221010170243-090e33056c14 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/packages/trustix-nix/go.sum b/packages/trustix-nix/go.sum index c4ef5376..6b43bd18 100644 --- a/packages/trustix-nix/go.sum +++ b/packages/trustix-nix/go.sum @@ -43,8 +43,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14 h1:k5II8e6QD8mITdi+okbbmR/cIyEbeXLBhy5Ha4nevyc= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= diff --git a/packages/trustix-nix/gomod2nix.toml b/packages/trustix-nix/gomod2nix.toml index 44883b23..bc40ef66 100644 --- a/packages/trustix-nix/gomod2nix.toml +++ b/packages/trustix-nix/gomod2nix.toml @@ -47,8 +47,8 @@ schema = 3 version = "v0.5.10" hash = "sha256-bogOwQNmQVS7W+C7wci7XEUeYm9TB7PnxnyBIXKYbm0=" [mod."golang.org/x/sys"] - version = "v0.0.0-20220928140112-f11e5e49a4ec" - hash = "sha256-Xu81/C0U3hGOIG2Z0AK/1ahyrQgTbP6oagMIrN25zXU=" + version = "v0.0.0-20221010170243-090e33056c14" + hash = "sha256-0QvEbu4o68ESEiocyqD/kFbDjRdnGbJWGIazHdsaIYQ=" [mod."google.golang.org/protobuf"] version = "v1.28.1" hash = "sha256-sTJYgvlv5is7vHNxcuigF2lNASp0QonhUgnrguhfHSU=" diff --git a/packages/trustix/go.mod b/packages/trustix/go.mod index 482e464e..9cb4cff0 100644 --- a/packages/trustix/go.mod +++ b/packages/trustix/go.mod @@ -9,9 +9,9 @@ require ( github.com/dop251/goja v0.0.0-20221003171542-5ea1285e6c91 github.com/hashicorp/go-memdb v1.3.3 github.com/lazyledger/smt v0.2.0 - github.com/nix-community/trustix/packages/go-lib v0.0.0-20221006094532-116e5118302b - github.com/nix-community/trustix/packages/trustix-proto v0.0.0-20221006094532-116e5118302b - github.com/nix-community/trustix/packages/unixtransport v0.0.0-20221006094532-116e5118302b + github.com/nix-community/trustix/packages/go-lib v0.0.0-20221010024647-1705ebe5aa6d + github.com/nix-community/trustix/packages/trustix-proto v0.0.0-20221010024647-1705ebe5aa6d + github.com/nix-community/trustix/packages/unixtransport v0.0.0-20221010024647-1705ebe5aa6d github.com/sirupsen/logrus v1.9.0 github.com/spf13/cobra v1.5.0 github.com/stretchr/testify v1.8.0 @@ -34,8 +34,8 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20221004215720-b9f4876ce741 // indirect - golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect + golang.org/x/exp v0.0.0-20221010202428-3a778c567f61 // indirect + golang.org/x/sys v0.0.0-20221010170243-090e33056c14 // indirect golang.org/x/text v0.3.7 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/packages/trustix/go.sum b/packages/trustix/go.sum index 55d8a69e..eae06423 100644 --- a/packages/trustix/go.sum +++ b/packages/trustix/go.sum @@ -73,14 +73,14 @@ go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -golang.org/x/exp v0.0.0-20221004215720-b9f4876ce741 h1:fGZugkZk2UgYBxtpKmvub51Yno1LJDeEsRp2xGD+0gY= -golang.org/x/exp v0.0.0-20221004215720-b9f4876ce741/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221010202428-3a778c567f61 h1:9echpU8vWVULSj2oFTtlY8mpPya+ED1L5xlaCaEEc+M= +golang.org/x/exp v0.0.0-20221010202428-3a778c567f61/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= golang.org/x/net v0.0.0-20221004154528-8021a29435af h1:wv66FM3rLZGPdxpYL+ApnDe2HzHcTFta3z5nsc13wI4= golang.org/x/net v0.0.0-20221004154528-8021a29435af/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI= -golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14 h1:k5II8e6QD8mITdi+okbbmR/cIyEbeXLBhy5Ha4nevyc= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= diff --git a/packages/trustix/gomod2nix.toml b/packages/trustix/gomod2nix.toml index ca7357f4..9c906ba7 100644 --- a/packages/trustix/gomod2nix.toml +++ b/packages/trustix/gomod2nix.toml @@ -71,14 +71,14 @@ schema = 3 version = "v1.8.0" hash = "sha256-WHWgw6hLI4tPKEqJt+WC38yt64OGCXfkUJDem6mM+Mw=" [mod."golang.org/x/exp"] - version = "v0.0.0-20221004215720-b9f4876ce741" - hash = "sha256-j4A3FnOJBkybLjkkeXg5ptBLzWCepOojr/MV96u/MaI=" + version = "v0.0.0-20221010202428-3a778c567f61" + hash = "sha256-2aATMtazbT3i+X3m0Ju54GKOggcyeX9dAJFxO+H5IxQ=" [mod."golang.org/x/net"] version = "v0.0.0-20221004154528-8021a29435af" hash = "sha256-KYvRtL8Ich2Jo4Jji9rj8WL4XrjsoddIwggcMd2e1EE=" [mod."golang.org/x/sys"] - version = "v0.0.0-20220928140112-f11e5e49a4ec" - hash = "sha256-Xu81/C0U3hGOIG2Z0AK/1ahyrQgTbP6oagMIrN25zXU=" + version = "v0.0.0-20221010170243-090e33056c14" + hash = "sha256-0QvEbu4o68ESEiocyqD/kFbDjRdnGbJWGIazHdsaIYQ=" [mod."golang.org/x/text"] version = "v0.3.7" hash = "sha256-XH2pUzzQx95O0rak00grQvfACfL+EmZiV7ZzJBkX+XY=" From 19fcf72a099d33a7602a81b04b4da572ddd0911a Mon Sep 17 00:00:00 2001 From: adisbladis Date: Tue, 11 Oct 2022 17:29:24 +1300 Subject: [PATCH 10/49] trustix-nix-reprod: rename to trustix-nix-r13y the existing reproducibility tracker is called r13y and we aim to replace that one. --- .reuse/dep5 | 10 +++++----- default.nix | 2 +- packages/trustix-doc/src/hacking.md | 2 +- .../{trustix-nix-reprod => trustix-nix-r13y}/.envrc | 0 packages/trustix-nix-r13y/.gitignore | 1 + packages/trustix-nix-r13y/Procfile | 4 ++++ .../default.nix | 2 +- .../examples/config.toml | 0 .../{trustix-nix-reprod => trustix-nix-r13y}/go.mod | 4 ++-- .../{trustix-nix-reprod => trustix-nix-r13y}/go.sum | 4 ++-- .../gomod2nix.toml | 2 +- .../internal/cmd/index-eval.go | 4 ++-- .../internal/cmd/index-logs.go | 2 +- .../internal/cmd/migrate.go | 4 ++-- .../internal/cmd/root.go | 4 ++-- .../internal/cmd/serve.go | 12 ++++++------ .../internal/config/channels.go | 0 .../internal/config/config.go | 0 .../internal/config/cron.go | 0 .../internal/cron/cron.go | 0 .../internal/db/db.go | 4 ++++ .../internal/db/derivations.sql.go | 4 ++++ .../internal/db/eval.sql.go | 4 ++++ .../internal/db/logs.sql.go | 4 ++++ .../internal/db/models.go | 4 ++++ .../internal/db/reprod.sql.go | 4 ++++ .../internal/db/suggest.sql.go | 4 ++++ .../internal/dbcache/db.go | 4 ++++ .../internal/dbcache/diffoscope.sql.go | 4 ++++ .../internal/dbcache/models.go | 4 ++++ .../internal/derivation/derivation.go | 0 .../internal/eval/config.go | 0 .../internal/eval/eval.go | 2 +- .../internal/eval/interface.go | 2 +- .../internal/eval/interface_test.go | 0 .../internal/future/future.go | 0 .../internal/hydra/hydra.go | 0 .../internal/index/channels.go | 6 +++--- .../internal/index/derivations.go | 8 ++++---- .../internal/index/logs.go | 2 +- .../internal/lib/lib.go | 0 .../internal/refcount/refcount.go | 0 .../internal/server/api.go | 10 +++++----- .../internal/server/diff.go | 12 ++++++------ .../{trustix-nix-reprod => trustix-nix-r13y}/main.go | 4 ++-- .../mk-proto | 0 .../reprod-api/api.pb.go | 0 .../reprod-api/api.proto | 2 +- .../reprod-api/reprod_apiconnect/api.connect.go | 2 +- .../shell.nix | 0 .../sql-cache/fs.go | 0 .../sql-cache/queries/diffoscope.sql | 0 .../sql-cache/schema/20221005142925_initial.sql | 0 .../sql/fs.go | 0 .../sql/queries/derivations.sql | 0 .../sql/queries/eval.sql | 0 .../sql/queries/logs.sql | 0 .../sql/queries/reprod.sql | 0 .../sql/queries/suggest.sql | 0 .../sql/schema/20220818142927_initial.sql | 0 .../sql/schema/20220904150640_logs.sql | 0 .../sqlc.yaml | 0 .../tools.go | 0 packages/trustix-nix-reprod/.gitignore | 1 - packages/trustix-nix-reprod/Procfile | 4 ---- tools/fix_licenses | 4 ++-- 66 files changed, 98 insertions(+), 58 deletions(-) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/.envrc (100%) create mode 100644 packages/trustix-nix-r13y/.gitignore create mode 100644 packages/trustix-nix-r13y/Procfile rename packages/{trustix-nix-reprod => trustix-nix-r13y}/default.nix (88%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/examples/config.toml (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/go.mod (96%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/go.sum (98%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/gomod2nix.toml (99%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/cmd/index-eval.go (88%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/cmd/index-logs.go (90%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/cmd/migrate.go (98%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/cmd/root.go (93%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/cmd/serve.go (92%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/config/channels.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/config/config.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/config/cron.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/cron/cron.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/db/db.go (86%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/db/derivations.sql.go (98%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/db/eval.sql.go (96%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/db/logs.sql.go (95%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/db/models.go (91%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/db/reprod.sql.go (97%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/db/suggest.sql.go (89%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/dbcache/db.go (86%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/dbcache/diffoscope.sql.go (91%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/dbcache/models.go (62%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/derivation/derivation.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/eval/config.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/eval/eval.go (98%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/eval/interface.go (76%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/eval/interface_test.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/future/future.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/hydra/hydra.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/index/channels.go (91%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/index/derivations.go (97%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/index/logs.go (98%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/lib/lib.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/refcount/refcount.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/server/api.go (95%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/internal/server/diff.go (96%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/main.go (72%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/mk-proto (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/reprod-api/api.pb.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/reprod-api/api.proto (98%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/reprod-api/reprod_apiconnect/api.connect.go (99%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/shell.nix (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql-cache/fs.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql-cache/queries/diffoscope.sql (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql-cache/schema/20221005142925_initial.sql (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql/fs.go (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql/queries/derivations.sql (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql/queries/eval.sql (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql/queries/logs.sql (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql/queries/reprod.sql (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql/queries/suggest.sql (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql/schema/20220818142927_initial.sql (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sql/schema/20220904150640_logs.sql (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/sqlc.yaml (100%) rename packages/{trustix-nix-reprod => trustix-nix-r13y}/tools.go (100%) delete mode 100644 packages/trustix-nix-reprod/.gitignore delete mode 100644 packages/trustix-nix-reprod/Procfile diff --git a/.reuse/dep5 b/.reuse/dep5 index ce688129..daafa83c 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -3,7 +3,7 @@ Upstream-Name: trustix Upstream-Contact: adisbladis Source: https://github.com/nix-community/trustix -Files: .envrc Makefile Procfile default.nix examples/nixops-deployment.nix examples/nixos-shell.nix flake-fetch.nix flake.nix nixos/default.nix packages/go-lib/.envrc packages/go-lib/go.mod packages/go-lib/shell.nix packages/trustix-doc/Procfile packages/trustix-doc/default.nix packages/trustix-doc/doc_old/Makefile packages/trustix-doc/doc_old/shell.nix packages/trustix-nix-reprod/.envrc packages/trustix-nix-reprod/Procfile packages/trustix-nix-reprod/default.nix packages/trustix-nix-reprod/go.mod packages/trustix-nix-reprod/mk-proto packages/trustix-nix-reprod/shell.nix packages/trustix-nix/.envrc packages/trustix-nix/Procfile packages/trustix-nix/default.nix packages/trustix-nix/go.mod packages/trustix-nix/nixos/binarycache.nix packages/trustix-nix/nixos/default.nix packages/trustix-nix/nixos/post-build-hook.nix packages/trustix-nix/shell.nix packages/trustix-proto/.envrc packages/trustix-proto/Makefile packages/trustix-proto/Procfile packages/trustix-proto/go.mod packages/trustix-proto/shell.nix packages/trustix/.envrc packages/trustix/Procfile packages/trustix/default.nix packages/trustix/go.mod packages/trustix/nixos/default.nix packages/trustix/nixos/test.nix packages/trustix/shell.nix packages/trustix/tests/default.nix packages/unixtransport/.envrc packages/unixtransport/go.mod packages/unixtransport/shell.nix pkgs.nix shell.nix +Files: .envrc Makefile Procfile default.nix examples/nixops-deployment.nix examples/nixos-shell.nix flake-fetch.nix flake.nix nixos/default.nix packages/go-lib/.envrc packages/go-lib/go.mod packages/go-lib/shell.nix packages/trustix-doc/Procfile packages/trustix-doc/default.nix packages/trustix-doc/doc_old/Makefile packages/trustix-doc/doc_old/shell.nix packages/trustix-nix-r13y/.envrc packages/trustix-nix-r13y/Procfile packages/trustix-nix-r13y/default.nix packages/trustix-nix-r13y/go.mod packages/trustix-nix-r13y/mk-proto packages/trustix-nix-r13y/shell.nix packages/trustix-nix/.envrc packages/trustix-nix/Procfile packages/trustix-nix/default.nix packages/trustix-nix/go.mod packages/trustix-nix/nixos/binarycache.nix packages/trustix-nix/nixos/default.nix packages/trustix-nix/nixos/post-build-hook.nix packages/trustix-nix/shell.nix packages/trustix-proto/.envrc packages/trustix-proto/Makefile packages/trustix-proto/Procfile packages/trustix-proto/go.mod packages/trustix-proto/shell.nix packages/trustix/.envrc packages/trustix/Procfile packages/trustix/default.nix packages/trustix/go.mod packages/trustix/nixos/default.nix packages/trustix/nixos/test.nix packages/trustix/shell.nix packages/trustix/tests/default.nix packages/unixtransport/.envrc packages/unixtransport/go.mod packages/unixtransport/shell.nix pkgs.nix shell.nix Copyright: Copyright © 2020-2022 The Trustix Authors License: MIT @@ -11,7 +11,7 @@ Files: .github/workflows/doc.yml .github/workflows/golangci-lint.yml .github/wor Copyright: Copyright © 2020-2022 The Trustix Authors License: CC0-1.0 -Files: .gitignore .reuse/dep5 packages/trustix-doc/.gitignore packages/trustix-doc/doc_old/.gitignore packages/trustix-nix-reprod/.gitignore packages/trustix-nix/.gitignore packages/trustix-proto/.gitignore packages/trustix/.gitignore packages/unixtransport/.gitignore +Files: .gitignore .reuse/dep5 packages/trustix-doc/.gitignore packages/trustix-doc/doc_old/.gitignore packages/trustix-nix-r13y/.gitignore packages/trustix-nix/.gitignore packages/trustix-proto/.gitignore packages/trustix/.gitignore packages/unixtransport/.gitignore Copyright: Copyright © 2020-2022 The Trustix Authors License: CC0-1.0 @@ -27,7 +27,7 @@ Files: assets/tweag.png Copyright: Copyright © 2021 The Tweag IO License: LicenseRef-all-rights-reserved -Files: flake.lock packages/go-lib/go.sum packages/go-lib/gomod2nix.toml packages/trustix-nix-reprod/go.sum packages/trustix-nix-reprod/gomod2nix.toml packages/trustix-nix/go.sum packages/trustix-nix/gomod2nix.toml packages/trustix-proto/go.sum packages/trustix-proto/gomod2nix.toml packages/trustix/go.sum packages/trustix/gomod2nix.toml +Files: flake.lock packages/go-lib/go.sum packages/go-lib/gomod2nix.toml packages/trustix-nix-r13y/go.sum packages/trustix-nix-r13y/gomod2nix.toml packages/trustix-nix/go.sum packages/trustix-nix/gomod2nix.toml packages/trustix-proto/go.sum packages/trustix-proto/gomod2nix.toml packages/trustix/go.sum packages/trustix/gomod2nix.toml Copyright: Copyright © 2020-2022 The Trustix Authors License: CC0-1.0 @@ -35,11 +35,11 @@ Files: packages/trustix-doc/book.toml packages/trustix-doc/doc_old/numeric.csl p Copyright: Copyright © 2020-2022 The Trustix Authors License: CC-BY-SA-4.0 -Files: packages/trustix-nix-reprod/examples/config.toml packages/trustix-nix-reprod/sqlc.yaml packages/trustix-nix/dev/cache-priv-key.pem packages/trustix-nix/dev/cache-pub-key.pem packages/trustix/config.toml treefmt.toml +Files: packages/trustix-nix-r13y/examples/config.toml packages/trustix-nix-r13y/sqlc.yaml packages/trustix-nix/dev/cache-priv-key.pem packages/trustix-nix/dev/cache-pub-key.pem packages/trustix/config.toml treefmt.toml Copyright: Copyright © 2020-2022 The Trustix Authors License: CC0-1.0 -Files: packages/trustix-nix-reprod/reprod-api/api.pb.go packages/trustix-nix-reprod/reprod-api/reprod_apiconnect/api.connect.go packages/trustix-nix-reprod/sql-cache/queries/diffoscope.sql packages/trustix-nix-reprod/sql-cache/schema/20221005142925_initial.sql packages/trustix-nix-reprod/sql/queries/derivations.sql packages/trustix-nix-reprod/sql/queries/eval.sql packages/trustix-nix-reprod/sql/queries/logs.sql packages/trustix-nix-reprod/sql/queries/reprod.sql packages/trustix-nix-reprod/sql/queries/suggest.sql packages/trustix-nix-reprod/sql/schema/20220818142927_initial.sql packages/trustix-nix-reprod/sql/schema/20220904150640_logs.sql +Files: packages/trustix-nix-r13y/reprod-api/api.pb.go packages/trustix-nix-r13y/reprod-api/reprod_apiconnect/api.connect.go packages/trustix-nix-r13y/sql-cache/queries/diffoscope.sql packages/trustix-nix-r13y/sql-cache/schema/20221005142925_initial.sql packages/trustix-nix-r13y/sql/queries/derivations.sql packages/trustix-nix-r13y/sql/queries/eval.sql packages/trustix-nix-r13y/sql/queries/logs.sql packages/trustix-nix-r13y/sql/queries/reprod.sql packages/trustix-nix-r13y/sql/queries/suggest.sql packages/trustix-nix-r13y/sql/schema/20220818142927_initial.sql packages/trustix-nix-r13y/sql/schema/20220904150640_logs.sql Copyright: Copyright © 2020-2022 The Trustix Authors License: GPL-3.0-only diff --git a/default.nix b/default.nix index 33e91849..aa61af3f 100644 --- a/default.nix +++ b/default.nix @@ -1,4 +1,4 @@ { pkgs ? import ./pkgs.nix { } }: { - inherit (pkgs) trustix trustix-doc trustix-nix trustix-nix-reprod; + inherit (pkgs) trustix trustix-doc trustix-nix trustix-nix-r13y; } diff --git a/packages/trustix-doc/src/hacking.md b/packages/trustix-doc/src/hacking.md index 9b0f0f4c..b9ee56d9 100644 --- a/packages/trustix-doc/src/hacking.md +++ b/packages/trustix-doc/src/hacking.md @@ -16,7 +16,7 @@ The main documentation package that aggregates documentation from the various su This is a supplemental daemon to the main Trustix daemon that layers some knowledge about Nix on top of the generic log functionality. It contains a [post-build hook](https://www.tweag.io/blog/2019-11-21-untrusted-ci/) used to submit newly built packages to the logs, a binary cache HTTP interface and a development tool to submit already built closures. -- [trustix-nix-reprod](https://github.com/nix-community/trustix/blob/master/packages/trustix-nix-reprod) +- [trustix-nix-r13y](https://github.com/nix-community/trustix/blob/master/packages/trustix-nix-r13y) This package is an implementation of a reproducibility tracker backed by logs. diff --git a/packages/trustix-nix-reprod/.envrc b/packages/trustix-nix-r13y/.envrc similarity index 100% rename from packages/trustix-nix-reprod/.envrc rename to packages/trustix-nix-r13y/.envrc diff --git a/packages/trustix-nix-r13y/.gitignore b/packages/trustix-nix-r13y/.gitignore new file mode 100644 index 00000000..49cc4533 --- /dev/null +++ b/packages/trustix-nix-r13y/.gitignore @@ -0,0 +1 @@ +/trustix-nix-r13y diff --git a/packages/trustix-nix-r13y/Procfile b/packages/trustix-nix-r13y/Procfile new file mode 100644 index 00000000..6b3987c0 --- /dev/null +++ b/packages/trustix-nix-r13y/Procfile @@ -0,0 +1,4 @@ +build: reflex -r '\.go$' go build +sqlc: reflex -r '\.sql$' sqlc generate +serve: go build && ../../tools/wait_for_file trustix-nix-r13y && echo trustix-nix-r13y | entr -r ./trustix-nix-r13y serve +proto: reflex -r '\.proto$' ./mk-proto diff --git a/packages/trustix-nix-reprod/default.nix b/packages/trustix-nix-r13y/default.nix similarity index 88% rename from packages/trustix-nix-reprod/default.nix rename to packages/trustix-nix-r13y/default.nix index 87d7504c..43547e06 100644 --- a/packages/trustix-nix-reprod/default.nix +++ b/packages/trustix-nix-r13y/default.nix @@ -1,7 +1,7 @@ { buildGoApplication, lib, gitignoreSource }: buildGoApplication { - pname = "trustix-nix-reprod"; + pname = "trustix-nix-r13y"; version = "dev"; pwd = ./.; src = lib.cleanSourceWith { diff --git a/packages/trustix-nix-reprod/examples/config.toml b/packages/trustix-nix-r13y/examples/config.toml similarity index 100% rename from packages/trustix-nix-reprod/examples/config.toml rename to packages/trustix-nix-r13y/examples/config.toml diff --git a/packages/trustix-nix-reprod/go.mod b/packages/trustix-nix-r13y/go.mod similarity index 96% rename from packages/trustix-nix-reprod/go.mod rename to packages/trustix-nix-r13y/go.mod index 40fed441..1b040485 100644 --- a/packages/trustix-nix-reprod/go.mod +++ b/packages/trustix-nix-r13y/go.mod @@ -1,4 +1,4 @@ -module github.com/nix-community/trustix/packages/trustix-nix-reprod +module github.com/nix-community/trustix/packages/trustix-nix-r13y go 1.18 @@ -60,7 +60,7 @@ require ( github.com/pganalyze/pg_query_go/v2 v2.1.2 // indirect github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 // indirect github.com/pingcap/log v1.1.0 // indirect - github.com/pingcap/tidb/parser v0.0.0-20221011024349-6c7a2365cedb // indirect + github.com/pingcap/tidb/parser v0.0.0-20221011040950-accff686216c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect diff --git a/packages/trustix-nix-reprod/go.sum b/packages/trustix-nix-r13y/go.sum similarity index 98% rename from packages/trustix-nix-reprod/go.sum rename to packages/trustix-nix-r13y/go.sum index 51418c0f..d6cbe4c2 100644 --- a/packages/trustix-nix-reprod/go.sum +++ b/packages/trustix-nix-r13y/go.sum @@ -112,8 +112,8 @@ github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 h1:+FZIDR/D97YOP github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg= github.com/pingcap/log v1.1.0 h1:ELiPxACz7vdo1qAvvaWJg1NrYFoY6gqAh/+Uo6aXdD8= github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= -github.com/pingcap/tidb/parser v0.0.0-20221011024349-6c7a2365cedb h1:hXUvGTGbfPm87+MpYz9c59h0CUeZ7hwIEDD6DRuQgvc= -github.com/pingcap/tidb/parser v0.0.0-20221011024349-6c7a2365cedb/go.mod h1:wjvp+T3/T9XYt0nKqGX3Kc1AKuyUcfno6LTc6b2A6ew= +github.com/pingcap/tidb/parser v0.0.0-20221011040950-accff686216c h1:1FEpccc1cL9hIEIRR1nv6ISa01ldB7Ohwkba+mLayDc= +github.com/pingcap/tidb/parser v0.0.0-20221011040950-accff686216c/go.mod h1:wjvp+T3/T9XYt0nKqGX3Kc1AKuyUcfno6LTc6b2A6ew= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/packages/trustix-nix-reprod/gomod2nix.toml b/packages/trustix-nix-r13y/gomod2nix.toml similarity index 99% rename from packages/trustix-nix-reprod/gomod2nix.toml rename to packages/trustix-nix-r13y/gomod2nix.toml index b51fe24e..2fa5727b 100644 --- a/packages/trustix-nix-reprod/gomod2nix.toml +++ b/packages/trustix-nix-r13y/gomod2nix.toml @@ -107,7 +107,7 @@ schema = 3 version = "v1.1.0" hash = "sha256-JT33CJMknTXha1ERt4s6vV9fyx99J+Ot8rFrNKXTsTc=" [mod."github.com/pingcap/tidb/parser"] - version = "v0.0.0-20221011024349-6c7a2365cedb" + version = "v0.0.0-20221011040950-accff686216c" hash = "sha256-bCIhc8REurAIuROdoAZP+T2/LldP5gR1DqXmFufHgGc=" [mod."github.com/pkg/errors"] version = "v0.9.1" diff --git a/packages/trustix-nix-reprod/internal/cmd/index-eval.go b/packages/trustix-nix-r13y/internal/cmd/index-eval.go similarity index 88% rename from packages/trustix-nix-reprod/internal/cmd/index-eval.go rename to packages/trustix-nix-r13y/internal/cmd/index-eval.go index b0183fba..a5e20cd8 100644 --- a/packages/trustix-nix-reprod/internal/cmd/index-eval.go +++ b/packages/trustix-nix-r13y/internal/cmd/index-eval.go @@ -12,8 +12,8 @@ import ( "path" "time" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/hydra" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/index" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/hydra" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/index" "github.com/spf13/cobra" ) diff --git a/packages/trustix-nix-reprod/internal/cmd/index-logs.go b/packages/trustix-nix-r13y/internal/cmd/index-logs.go similarity index 90% rename from packages/trustix-nix-reprod/internal/cmd/index-logs.go rename to packages/trustix-nix-r13y/internal/cmd/index-logs.go index 83dfe362..b1010d02 100644 --- a/packages/trustix-nix-reprod/internal/cmd/index-logs.go +++ b/packages/trustix-nix-r13y/internal/cmd/index-logs.go @@ -9,7 +9,7 @@ import ( "context" "fmt" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/index" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/index" tclient "github.com/nix-community/trustix/packages/trustix/client" "github.com/spf13/cobra" ) diff --git a/packages/trustix-nix-reprod/internal/cmd/migrate.go b/packages/trustix-nix-r13y/internal/cmd/migrate.go similarity index 98% rename from packages/trustix-nix-reprod/internal/cmd/migrate.go rename to packages/trustix-nix-r13y/internal/cmd/migrate.go index 5be3a1ae..a31cef3e 100644 --- a/packages/trustix-nix-reprod/internal/cmd/migrate.go +++ b/packages/trustix-nix-r13y/internal/cmd/migrate.go @@ -11,8 +11,8 @@ import ( "os" "path/filepath" - schema "github.com/nix-community/trustix/packages/trustix-nix-reprod/sql" - cache_schema "github.com/nix-community/trustix/packages/trustix-nix-reprod/sql-cache" + schema "github.com/nix-community/trustix/packages/trustix-nix-r13y/sql" + cache_schema "github.com/nix-community/trustix/packages/trustix-nix-r13y/sql-cache" "github.com/pressly/goose/v3" log "github.com/sirupsen/logrus" ) diff --git a/packages/trustix-nix-reprod/internal/cmd/root.go b/packages/trustix-nix-r13y/internal/cmd/root.go similarity index 93% rename from packages/trustix-nix-reprod/internal/cmd/root.go rename to packages/trustix-nix-r13y/internal/cmd/root.go index 9f34aafd..751a213f 100644 --- a/packages/trustix-nix-reprod/internal/cmd/root.go +++ b/packages/trustix-nix-r13y/internal/cmd/root.go @@ -23,7 +23,7 @@ var dialAddress string var stateDirectory string var rootCmd = &cobra.Command{ - Use: "trustix-nix-reprod", + Use: "trustix-nix-r13y", Short: "Trustix Nix build reproducibility dashboard", Long: `Trustix nix build reproducibility dashboard`, RunE: func(cmd *cobra.Command, args []string) error { @@ -46,7 +46,7 @@ func initCommands() { // State directory { - defaultStateDir := filepath.Join(xdg.DataHome, "trustix-nix-reprod") + defaultStateDir := filepath.Join(xdg.DataHome, "trustix-nix-r13y") rootCmd.PersistentFlags().StringVar(&stateDirectory, "state", defaultStateDir, "State directory") } diff --git a/packages/trustix-nix-reprod/internal/cmd/serve.go b/packages/trustix-nix-r13y/internal/cmd/serve.go similarity index 92% rename from packages/trustix-nix-reprod/internal/cmd/serve.go rename to packages/trustix-nix-r13y/internal/cmd/serve.go index 73876e58..345e355d 100644 --- a/packages/trustix-nix-reprod/internal/cmd/serve.go +++ b/packages/trustix-nix-r13y/internal/cmd/serve.go @@ -19,11 +19,11 @@ import ( "github.com/bakins/logrus-middleware" "github.com/coreos/go-systemd/activation" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/config" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/cron" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/index" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/server" - apiconnect "github.com/nix-community/trustix/packages/trustix-nix-reprod/reprod-api/reprod_apiconnect" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/config" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/cron" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/index" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/server" + apiconnect "github.com/nix-community/trustix/packages/trustix-nix-r13y/reprod-api/reprod_apiconnect" tclient "github.com/nix-community/trustix/packages/trustix/client" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -125,7 +125,7 @@ var serveCommand = &cobra.Command{ mux.Handle(apiconnect.NewReproducibilityAPIHandler(apiServer)) l := logrusmiddleware.Middleware{ - Name: "trustix-nix-reprod", + Name: "trustix-nix-r13y", Logger: log.New(), } diff --git a/packages/trustix-nix-reprod/internal/config/channels.go b/packages/trustix-nix-r13y/internal/config/channels.go similarity index 100% rename from packages/trustix-nix-reprod/internal/config/channels.go rename to packages/trustix-nix-r13y/internal/config/channels.go diff --git a/packages/trustix-nix-reprod/internal/config/config.go b/packages/trustix-nix-r13y/internal/config/config.go similarity index 100% rename from packages/trustix-nix-reprod/internal/config/config.go rename to packages/trustix-nix-r13y/internal/config/config.go diff --git a/packages/trustix-nix-reprod/internal/config/cron.go b/packages/trustix-nix-r13y/internal/config/cron.go similarity index 100% rename from packages/trustix-nix-reprod/internal/config/cron.go rename to packages/trustix-nix-r13y/internal/config/cron.go diff --git a/packages/trustix-nix-reprod/internal/cron/cron.go b/packages/trustix-nix-r13y/internal/cron/cron.go similarity index 100% rename from packages/trustix-nix-reprod/internal/cron/cron.go rename to packages/trustix-nix-r13y/internal/cron/cron.go diff --git a/packages/trustix-nix-reprod/internal/db/db.go b/packages/trustix-nix-r13y/internal/db/db.go similarity index 86% rename from packages/trustix-nix-reprod/internal/db/db.go rename to packages/trustix-nix-r13y/internal/db/db.go index 21fc4346..17c2f768 100644 --- a/packages/trustix-nix-reprod/internal/db/db.go +++ b/packages/trustix-nix-r13y/internal/db/db.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/derivations.sql.go b/packages/trustix-nix-r13y/internal/db/derivations.sql.go similarity index 98% rename from packages/trustix-nix-reprod/internal/db/derivations.sql.go rename to packages/trustix-nix-r13y/internal/db/derivations.sql.go index 64a9e82b..e82fc148 100644 --- a/packages/trustix-nix-reprod/internal/db/derivations.sql.go +++ b/packages/trustix-nix-r13y/internal/db/derivations.sql.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/eval.sql.go b/packages/trustix-nix-r13y/internal/db/eval.sql.go similarity index 96% rename from packages/trustix-nix-reprod/internal/db/eval.sql.go rename to packages/trustix-nix-r13y/internal/db/eval.sql.go index 36b68500..59712e08 100644 --- a/packages/trustix-nix-reprod/internal/db/eval.sql.go +++ b/packages/trustix-nix-r13y/internal/db/eval.sql.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/logs.sql.go b/packages/trustix-nix-r13y/internal/db/logs.sql.go similarity index 95% rename from packages/trustix-nix-reprod/internal/db/logs.sql.go rename to packages/trustix-nix-r13y/internal/db/logs.sql.go index 2d2e5ebc..e90e851b 100644 --- a/packages/trustix-nix-reprod/internal/db/logs.sql.go +++ b/packages/trustix-nix-r13y/internal/db/logs.sql.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/models.go b/packages/trustix-nix-r13y/internal/db/models.go similarity index 91% rename from packages/trustix-nix-reprod/internal/db/models.go rename to packages/trustix-nix-r13y/internal/db/models.go index 0637f2f9..d1c3de1e 100644 --- a/packages/trustix-nix-reprod/internal/db/models.go +++ b/packages/trustix-nix-r13y/internal/db/models.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/reprod.sql.go b/packages/trustix-nix-r13y/internal/db/reprod.sql.go similarity index 97% rename from packages/trustix-nix-reprod/internal/db/reprod.sql.go rename to packages/trustix-nix-r13y/internal/db/reprod.sql.go index 0fc88c9a..31416b19 100644 --- a/packages/trustix-nix-reprod/internal/db/reprod.sql.go +++ b/packages/trustix-nix-r13y/internal/db/reprod.sql.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/db/suggest.sql.go b/packages/trustix-nix-r13y/internal/db/suggest.sql.go similarity index 89% rename from packages/trustix-nix-reprod/internal/db/suggest.sql.go rename to packages/trustix-nix-r13y/internal/db/suggest.sql.go index 47e07b25..1bc9059e 100644 --- a/packages/trustix-nix-reprod/internal/db/suggest.sql.go +++ b/packages/trustix-nix-r13y/internal/db/suggest.sql.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/dbcache/db.go b/packages/trustix-nix-r13y/internal/dbcache/db.go similarity index 86% rename from packages/trustix-nix-reprod/internal/dbcache/db.go rename to packages/trustix-nix-r13y/internal/dbcache/db.go index 37971dc7..ae0f8847 100644 --- a/packages/trustix-nix-reprod/internal/dbcache/db.go +++ b/packages/trustix-nix-r13y/internal/dbcache/db.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/dbcache/diffoscope.sql.go b/packages/trustix-nix-r13y/internal/dbcache/diffoscope.sql.go similarity index 91% rename from packages/trustix-nix-reprod/internal/dbcache/diffoscope.sql.go rename to packages/trustix-nix-r13y/internal/dbcache/diffoscope.sql.go index bc6b819c..1f4c23a4 100644 --- a/packages/trustix-nix-reprod/internal/dbcache/diffoscope.sql.go +++ b/packages/trustix-nix-r13y/internal/dbcache/diffoscope.sql.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/dbcache/models.go b/packages/trustix-nix-r13y/internal/dbcache/models.go similarity index 62% rename from packages/trustix-nix-reprod/internal/dbcache/models.go rename to packages/trustix-nix-r13y/internal/dbcache/models.go index 02bb3cc0..1e6046d8 100644 --- a/packages/trustix-nix-reprod/internal/dbcache/models.go +++ b/packages/trustix-nix-r13y/internal/dbcache/models.go @@ -1,3 +1,7 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-reprod/internal/derivation/derivation.go b/packages/trustix-nix-r13y/internal/derivation/derivation.go similarity index 100% rename from packages/trustix-nix-reprod/internal/derivation/derivation.go rename to packages/trustix-nix-r13y/internal/derivation/derivation.go diff --git a/packages/trustix-nix-reprod/internal/eval/config.go b/packages/trustix-nix-r13y/internal/eval/config.go similarity index 100% rename from packages/trustix-nix-reprod/internal/eval/config.go rename to packages/trustix-nix-r13y/internal/eval/config.go diff --git a/packages/trustix-nix-reprod/internal/eval/eval.go b/packages/trustix-nix-r13y/internal/eval/eval.go similarity index 98% rename from packages/trustix-nix-reprod/internal/eval/eval.go rename to packages/trustix-nix-r13y/internal/eval/eval.go index 4e93f8ed..fa93a2ef 100644 --- a/packages/trustix-nix-reprod/internal/eval/eval.go +++ b/packages/trustix-nix-r13y/internal/eval/eval.go @@ -16,7 +16,7 @@ import ( "syscall" "github.com/buger/jsonparser" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/lib" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/lib" ) type EvalResult struct { diff --git a/packages/trustix-nix-reprod/internal/eval/interface.go b/packages/trustix-nix-r13y/internal/eval/interface.go similarity index 76% rename from packages/trustix-nix-reprod/internal/eval/interface.go rename to packages/trustix-nix-r13y/internal/eval/interface.go index 6288ce47..ce91103e 100644 --- a/packages/trustix-nix-reprod/internal/eval/interface.go +++ b/packages/trustix-nix-r13y/internal/eval/interface.go @@ -7,7 +7,7 @@ package eval import ( "context" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/lib" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/lib" ) type Evaluator func(context.Context, *EvalConfig) (chan *lib.Result[*EvalResult], error) diff --git a/packages/trustix-nix-reprod/internal/eval/interface_test.go b/packages/trustix-nix-r13y/internal/eval/interface_test.go similarity index 100% rename from packages/trustix-nix-reprod/internal/eval/interface_test.go rename to packages/trustix-nix-r13y/internal/eval/interface_test.go diff --git a/packages/trustix-nix-reprod/internal/future/future.go b/packages/trustix-nix-r13y/internal/future/future.go similarity index 100% rename from packages/trustix-nix-reprod/internal/future/future.go rename to packages/trustix-nix-r13y/internal/future/future.go diff --git a/packages/trustix-nix-reprod/internal/hydra/hydra.go b/packages/trustix-nix-r13y/internal/hydra/hydra.go similarity index 100% rename from packages/trustix-nix-reprod/internal/hydra/hydra.go rename to packages/trustix-nix-r13y/internal/hydra/hydra.go diff --git a/packages/trustix-nix-reprod/internal/index/channels.go b/packages/trustix-nix-r13y/internal/index/channels.go similarity index 91% rename from packages/trustix-nix-reprod/internal/index/channels.go rename to packages/trustix-nix-r13y/internal/index/channels.go index c5f4c3c7..b7c5a2bc 100644 --- a/packages/trustix-nix-reprod/internal/index/channels.go +++ b/packages/trustix-nix-r13y/internal/index/channels.go @@ -12,9 +12,9 @@ import ( "io" "time" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/config" - idb "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/db" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/hydra" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/config" + idb "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/db" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/hydra" log "github.com/sirupsen/logrus" ) diff --git a/packages/trustix-nix-reprod/internal/index/derivations.go b/packages/trustix-nix-r13y/internal/index/derivations.go similarity index 97% rename from packages/trustix-nix-reprod/internal/index/derivations.go rename to packages/trustix-nix-r13y/internal/index/derivations.go index 731babac..9d33d742 100644 --- a/packages/trustix-nix-reprod/internal/index/derivations.go +++ b/packages/trustix-nix-r13y/internal/index/derivations.go @@ -15,10 +15,10 @@ import ( "github.com/nix-community/trustix/packages/go-lib/executor" "github.com/nix-community/trustix/packages/go-lib/safemap" "github.com/nix-community/trustix/packages/go-lib/set" - idb "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/db" - drvparse "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/derivation" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/eval" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/hydra" + idb "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/db" + drvparse "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/derivation" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/eval" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/hydra" log "github.com/sirupsen/logrus" ) diff --git a/packages/trustix-nix-reprod/internal/index/logs.go b/packages/trustix-nix-r13y/internal/index/logs.go similarity index 98% rename from packages/trustix-nix-reprod/internal/index/logs.go rename to packages/trustix-nix-r13y/internal/index/logs.go index 2fb91386..fb5bd628 100644 --- a/packages/trustix-nix-reprod/internal/index/logs.go +++ b/packages/trustix-nix-r13y/internal/index/logs.go @@ -13,7 +13,7 @@ import ( "strings" "github.com/nix-community/go-nix/pkg/nixpath" - idb "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/db" + idb "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/db" "github.com/nix-community/trustix/packages/trustix-proto/api" "github.com/nix-community/trustix/packages/trustix-proto/protocols" "github.com/nix-community/trustix/packages/trustix/client" diff --git a/packages/trustix-nix-reprod/internal/lib/lib.go b/packages/trustix-nix-r13y/internal/lib/lib.go similarity index 100% rename from packages/trustix-nix-reprod/internal/lib/lib.go rename to packages/trustix-nix-r13y/internal/lib/lib.go diff --git a/packages/trustix-nix-reprod/internal/refcount/refcount.go b/packages/trustix-nix-r13y/internal/refcount/refcount.go similarity index 100% rename from packages/trustix-nix-reprod/internal/refcount/refcount.go rename to packages/trustix-nix-r13y/internal/refcount/refcount.go diff --git a/packages/trustix-nix-reprod/internal/server/api.go b/packages/trustix-nix-r13y/internal/server/api.go similarity index 95% rename from packages/trustix-nix-reprod/internal/server/api.go rename to packages/trustix-nix-r13y/internal/server/api.go index 3e76eaf4..e9492bda 100644 --- a/packages/trustix-nix-reprod/internal/server/api.go +++ b/packages/trustix-nix-r13y/internal/server/api.go @@ -12,11 +12,11 @@ import ( "time" connect "github.com/bufbuild/connect-go" - idb "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/db" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/future" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/refcount" - pb "github.com/nix-community/trustix/packages/trustix-nix-reprod/reprod-api" - apiconnect "github.com/nix-community/trustix/packages/trustix-nix-reprod/reprod-api/reprod_apiconnect" + idb "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/db" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/future" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/refcount" + pb "github.com/nix-community/trustix/packages/trustix-nix-r13y/reprod-api" + apiconnect "github.com/nix-community/trustix/packages/trustix-nix-r13y/reprod-api/reprod_apiconnect" "github.com/nix-community/trustix/packages/trustix/client" ) diff --git a/packages/trustix-nix-reprod/internal/server/diff.go b/packages/trustix-nix-r13y/internal/server/diff.go similarity index 96% rename from packages/trustix-nix-reprod/internal/server/diff.go rename to packages/trustix-nix-r13y/internal/server/diff.go index 2aa1252e..f2648137 100644 --- a/packages/trustix-nix-reprod/internal/server/diff.go +++ b/packages/trustix-nix-r13y/internal/server/diff.go @@ -26,10 +26,10 @@ import ( "github.com/nix-community/go-nix/pkg/nar" "github.com/nix-community/go-nix/pkg/nixpath" "github.com/nix-community/trustix/packages/go-lib/executor" - dbcache "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/dbcache" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/future" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/refcount" - pb "github.com/nix-community/trustix/packages/trustix-nix-reprod/reprod-api" + dbcache "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/dbcache" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/future" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/refcount" + pb "github.com/nix-community/trustix/packages/trustix-nix-r13y/reprod-api" "github.com/nix-community/trustix/packages/trustix-nix/schema" "github.com/nix-community/trustix/packages/trustix-proto/api" "github.com/nix-community/trustix/packages/trustix/client" @@ -76,7 +76,7 @@ func downloadNAR(ctx context.Context, client *client.Client, outputHash string) u.Path = path.Join("nar", storePrefixHash, url.QueryEscape(narinfo.NarHash)) - out, err := os.CreateTemp("", "trustix-nix-reprod-nar") + out, err := os.CreateTemp("", "trustix-nix-r13y-nar") if err != nil { return nil, err } @@ -242,7 +242,7 @@ func diff(downloadExecutor *future.KeyedFutures[*refcount.RefCountedValue[*narDo outputHashes := []string{outputHash1, outputHash2} sort.Strings(outputHashes) // canonicalise output (same output no matter argument ordering) - tmpDir, err := os.MkdirTemp("", "trustix-nix-reprod-diff") + tmpDir, err := os.MkdirTemp("", "trustix-nix-r13y-diff") if err != nil { return nil, fmt.Errorf("error creating temporary store dir: %w", err) } diff --git a/packages/trustix-nix-reprod/main.go b/packages/trustix-nix-r13y/main.go similarity index 72% rename from packages/trustix-nix-reprod/main.go rename to packages/trustix-nix-r13y/main.go index 5cf28ef0..85bc8ded 100644 --- a/packages/trustix-nix-reprod/main.go +++ b/packages/trustix-nix-r13y/main.go @@ -3,11 +3,11 @@ // // SPDX-License-Identifier: GPL-3.0-only -package main // import "github.com/nix-community/trustix/packages/trustix-nix-reprod" +package main // import "github.com/nix-community/trustix/packages/trustix-nix-r13y" import ( _ "github.com/mattn/go-sqlite3" - "github.com/nix-community/trustix/packages/trustix-nix-reprod/internal/cmd" + "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/cmd" ) func main() { diff --git a/packages/trustix-nix-reprod/mk-proto b/packages/trustix-nix-r13y/mk-proto similarity index 100% rename from packages/trustix-nix-reprod/mk-proto rename to packages/trustix-nix-r13y/mk-proto diff --git a/packages/trustix-nix-reprod/reprod-api/api.pb.go b/packages/trustix-nix-r13y/reprod-api/api.pb.go similarity index 100% rename from packages/trustix-nix-reprod/reprod-api/api.pb.go rename to packages/trustix-nix-r13y/reprod-api/api.pb.go diff --git a/packages/trustix-nix-reprod/reprod-api/api.proto b/packages/trustix-nix-r13y/reprod-api/api.proto similarity index 98% rename from packages/trustix-nix-reprod/reprod-api/api.proto rename to packages/trustix-nix-r13y/reprod-api/api.proto index 0a1841bc..bc2c0b1a 100644 --- a/packages/trustix-nix-reprod/reprod-api/api.proto +++ b/packages/trustix-nix-r13y/reprod-api/api.proto @@ -6,7 +6,7 @@ syntax = "proto3"; package reprod_api.v1; -option go_package = "github.com/nix-community/trustix/packages/trustix-nix-reprod/reprod-api"; +option go_package = "github.com/nix-community/trustix/packages/trustix-nix-r13y/reprod-api"; message DerivationReproducibilityRequest { string DrvPath = 1; } diff --git a/packages/trustix-nix-reprod/reprod-api/reprod_apiconnect/api.connect.go b/packages/trustix-nix-r13y/reprod-api/reprod_apiconnect/api.connect.go similarity index 99% rename from packages/trustix-nix-reprod/reprod-api/reprod_apiconnect/api.connect.go rename to packages/trustix-nix-r13y/reprod-api/reprod_apiconnect/api.connect.go index e1855cea..e88e725f 100644 --- a/packages/trustix-nix-reprod/reprod-api/reprod_apiconnect/api.connect.go +++ b/packages/trustix-nix-r13y/reprod-api/reprod_apiconnect/api.connect.go @@ -8,7 +8,7 @@ import ( context "context" errors "errors" connect_go "github.com/bufbuild/connect-go" - reprod_api "github.com/nix-community/trustix/packages/trustix-nix-reprod/reprod-api" + reprod_api "github.com/nix-community/trustix/packages/trustix-nix-r13y/reprod-api" http "net/http" strings "strings" ) diff --git a/packages/trustix-nix-reprod/shell.nix b/packages/trustix-nix-r13y/shell.nix similarity index 100% rename from packages/trustix-nix-reprod/shell.nix rename to packages/trustix-nix-r13y/shell.nix diff --git a/packages/trustix-nix-reprod/sql-cache/fs.go b/packages/trustix-nix-r13y/sql-cache/fs.go similarity index 100% rename from packages/trustix-nix-reprod/sql-cache/fs.go rename to packages/trustix-nix-r13y/sql-cache/fs.go diff --git a/packages/trustix-nix-reprod/sql-cache/queries/diffoscope.sql b/packages/trustix-nix-r13y/sql-cache/queries/diffoscope.sql similarity index 100% rename from packages/trustix-nix-reprod/sql-cache/queries/diffoscope.sql rename to packages/trustix-nix-r13y/sql-cache/queries/diffoscope.sql diff --git a/packages/trustix-nix-reprod/sql-cache/schema/20221005142925_initial.sql b/packages/trustix-nix-r13y/sql-cache/schema/20221005142925_initial.sql similarity index 100% rename from packages/trustix-nix-reprod/sql-cache/schema/20221005142925_initial.sql rename to packages/trustix-nix-r13y/sql-cache/schema/20221005142925_initial.sql diff --git a/packages/trustix-nix-reprod/sql/fs.go b/packages/trustix-nix-r13y/sql/fs.go similarity index 100% rename from packages/trustix-nix-reprod/sql/fs.go rename to packages/trustix-nix-r13y/sql/fs.go diff --git a/packages/trustix-nix-reprod/sql/queries/derivations.sql b/packages/trustix-nix-r13y/sql/queries/derivations.sql similarity index 100% rename from packages/trustix-nix-reprod/sql/queries/derivations.sql rename to packages/trustix-nix-r13y/sql/queries/derivations.sql diff --git a/packages/trustix-nix-reprod/sql/queries/eval.sql b/packages/trustix-nix-r13y/sql/queries/eval.sql similarity index 100% rename from packages/trustix-nix-reprod/sql/queries/eval.sql rename to packages/trustix-nix-r13y/sql/queries/eval.sql diff --git a/packages/trustix-nix-reprod/sql/queries/logs.sql b/packages/trustix-nix-r13y/sql/queries/logs.sql similarity index 100% rename from packages/trustix-nix-reprod/sql/queries/logs.sql rename to packages/trustix-nix-r13y/sql/queries/logs.sql diff --git a/packages/trustix-nix-reprod/sql/queries/reprod.sql b/packages/trustix-nix-r13y/sql/queries/reprod.sql similarity index 100% rename from packages/trustix-nix-reprod/sql/queries/reprod.sql rename to packages/trustix-nix-r13y/sql/queries/reprod.sql diff --git a/packages/trustix-nix-reprod/sql/queries/suggest.sql b/packages/trustix-nix-r13y/sql/queries/suggest.sql similarity index 100% rename from packages/trustix-nix-reprod/sql/queries/suggest.sql rename to packages/trustix-nix-r13y/sql/queries/suggest.sql diff --git a/packages/trustix-nix-reprod/sql/schema/20220818142927_initial.sql b/packages/trustix-nix-r13y/sql/schema/20220818142927_initial.sql similarity index 100% rename from packages/trustix-nix-reprod/sql/schema/20220818142927_initial.sql rename to packages/trustix-nix-r13y/sql/schema/20220818142927_initial.sql diff --git a/packages/trustix-nix-reprod/sql/schema/20220904150640_logs.sql b/packages/trustix-nix-r13y/sql/schema/20220904150640_logs.sql similarity index 100% rename from packages/trustix-nix-reprod/sql/schema/20220904150640_logs.sql rename to packages/trustix-nix-r13y/sql/schema/20220904150640_logs.sql diff --git a/packages/trustix-nix-reprod/sqlc.yaml b/packages/trustix-nix-r13y/sqlc.yaml similarity index 100% rename from packages/trustix-nix-reprod/sqlc.yaml rename to packages/trustix-nix-r13y/sqlc.yaml diff --git a/packages/trustix-nix-reprod/tools.go b/packages/trustix-nix-r13y/tools.go similarity index 100% rename from packages/trustix-nix-reprod/tools.go rename to packages/trustix-nix-r13y/tools.go diff --git a/packages/trustix-nix-reprod/.gitignore b/packages/trustix-nix-reprod/.gitignore deleted file mode 100644 index 57897735..00000000 --- a/packages/trustix-nix-reprod/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/trustix-nix-reprod diff --git a/packages/trustix-nix-reprod/Procfile b/packages/trustix-nix-reprod/Procfile deleted file mode 100644 index 6c2866a0..00000000 --- a/packages/trustix-nix-reprod/Procfile +++ /dev/null @@ -1,4 +0,0 @@ -build: reflex -r '\.go$' go build -sqlc: reflex -r '\.sql$' sqlc generate -serve: go build && ../../tools/wait_for_file trustix-nix-reprod && echo trustix-nix-reprod | entr -r ./trustix-nix-reprod serve -proto: reflex -r '\.proto$' ./mk-proto diff --git a/tools/fix_licenses b/tools/fix_licenses index bfa44c4f..4151f17c 100755 --- a/tools/fix_licenses +++ b/tools/fix_licenses @@ -192,7 +192,7 @@ RULES: List[Rule] = [ dirs=[ "packages/trustix", "packages/trustix-nix", - "packages/trustix-nix-reprod", + "packages/trustix-nix-r13y", ], license="GPL-3.0-only", add_header=True, @@ -206,7 +206,7 @@ RULES: List[Rule] = [ dirs=[ "packages/trustix", "packages/trustix-nix", - "packages/trustix-nix-reprod", + "packages/trustix-nix-r13y", ], license="GPL-3.0-only", add_header=False, From 86bac1b100993659f6ca4f8993c08f5feb06bf33 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Tue, 11 Oct 2022 17:48:39 +1300 Subject: [PATCH 11/49] trustix-nix-r13y-web: add web frontend boilerplate for the reproducibility tracker --- default.nix | 2 +- packages/trustix-nix-r13y-web/.envrc | 4 + packages/trustix-nix-r13y-web/.gitignore | 2 + packages/trustix-nix-r13y-web/Procfile | 1 + packages/trustix-nix-r13y-web/README.md | 34 + packages/trustix-nix-r13y-web/index.html | 15 + .../trustix-nix-r13y-web/package-lock.json | 3790 +++++++++++++++++ packages/trustix-nix-r13y-web/package.json | 24 + .../trustix-nix-r13y-web/postcss.config.js | 7 + packages/trustix-nix-r13y-web/shell.nix | 11 + packages/trustix-nix-r13y-web/src/App.tsx | 9 + packages/trustix-nix-r13y-web/src/index.css | 3 + packages/trustix-nix-r13y-web/src/index.tsx | 7 + .../trustix-nix-r13y-web/tailwind.config.js | 14 + packages/trustix-nix-r13y-web/tsconfig.json | 14 + packages/trustix-nix-r13y-web/vite.config.ts | 12 + 16 files changed, 3948 insertions(+), 1 deletion(-) create mode 100644 packages/trustix-nix-r13y-web/.envrc create mode 100644 packages/trustix-nix-r13y-web/.gitignore create mode 100644 packages/trustix-nix-r13y-web/Procfile create mode 100644 packages/trustix-nix-r13y-web/README.md create mode 100644 packages/trustix-nix-r13y-web/index.html create mode 100644 packages/trustix-nix-r13y-web/package-lock.json create mode 100644 packages/trustix-nix-r13y-web/package.json create mode 100644 packages/trustix-nix-r13y-web/postcss.config.js create mode 100644 packages/trustix-nix-r13y-web/shell.nix create mode 100644 packages/trustix-nix-r13y-web/src/App.tsx create mode 100644 packages/trustix-nix-r13y-web/src/index.css create mode 100644 packages/trustix-nix-r13y-web/src/index.tsx create mode 100644 packages/trustix-nix-r13y-web/tailwind.config.js create mode 100644 packages/trustix-nix-r13y-web/tsconfig.json create mode 100644 packages/trustix-nix-r13y-web/vite.config.ts diff --git a/default.nix b/default.nix index aa61af3f..6d9cc4c8 100644 --- a/default.nix +++ b/default.nix @@ -1,4 +1,4 @@ { pkgs ? import ./pkgs.nix { } }: { - inherit (pkgs) trustix trustix-doc trustix-nix trustix-nix-r13y; + inherit (pkgs) trustix trustix-doc trustix-nix trustix-nix-r13y trustix-nix-r13y-web; } diff --git a/packages/trustix-nix-r13y-web/.envrc b/packages/trustix-nix-r13y-web/.envrc new file mode 100644 index 00000000..942bf379 --- /dev/null +++ b/packages/trustix-nix-r13y-web/.envrc @@ -0,0 +1,4 @@ +source_up +use nix +watch_file gomod2nix.toml +watch_file go.mod diff --git a/packages/trustix-nix-r13y-web/.gitignore b/packages/trustix-nix-r13y-web/.gitignore new file mode 100644 index 00000000..f06235c4 --- /dev/null +++ b/packages/trustix-nix-r13y-web/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/packages/trustix-nix-r13y-web/Procfile b/packages/trustix-nix-r13y-web/Procfile new file mode 100644 index 00000000..f3c08764 --- /dev/null +++ b/packages/trustix-nix-r13y-web/Procfile @@ -0,0 +1 @@ +serve: npm install && npm run dev diff --git a/packages/trustix-nix-r13y-web/README.md b/packages/trustix-nix-r13y-web/README.md new file mode 100644 index 00000000..434f7bb9 --- /dev/null +++ b/packages/trustix-nix-r13y-web/README.md @@ -0,0 +1,34 @@ +## Usage + +Those templates dependencies are maintained via [pnpm](https://pnpm.io) via `pnpm up -Lri`. + +This is the reason you see a `pnpm-lock.yaml`. That being said, any package manager will work. This file can be safely be removed once you clone a template. + +```bash +$ npm install # or pnpm install or yarn install +``` + +### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs) + +## Available Scripts + +In the project directory, you can run: + +### `npm dev` or `npm start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+ +### `npm run build` + +Builds the app for production to the `dist` folder.
+It correctly bundles Solid in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +## Deployment + +You can deploy the `dist` folder to any static host provider (netlify, surge, now, etc.) diff --git a/packages/trustix-nix-r13y-web/index.html b/packages/trustix-nix-r13y-web/index.html new file mode 100644 index 00000000..1905a042 --- /dev/null +++ b/packages/trustix-nix-r13y-web/index.html @@ -0,0 +1,15 @@ + + + + + + + Solid App + + + +
+ + + + diff --git a/packages/trustix-nix-r13y-web/package-lock.json b/packages/trustix-nix-r13y-web/package-lock.json new file mode 100644 index 00000000..07ca14b4 --- /dev/null +++ b/packages/trustix-nix-r13y-web/package-lock.json @@ -0,0 +1,3790 @@ +{ + "name": "trustix-nix-r13y-web", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "trustix-nix-r13y-web", + "version": "0.0.0", + "license": "GPL-3.0-only", + "dependencies": { + "@solidjs/router": "^0.5.0", + "solid-js": "^1.5.1" + }, + "devDependencies": { + "autoprefixer": "^10.4.8", + "daisyui": "^2.31.0", + "postcss": "^8.4.16", + "tailwindcss": "^3.1.8", + "typescript": "^4.8.2", + "vite": "^3.0.9", + "vite-plugin-solid": "^2.3.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz", + "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz", + "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", + "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@solidjs/router": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@solidjs/router/-/router-0.5.0.tgz", + "integrity": "sha512-rNR07l21tWWDVmCbaapggB89rEX7jlM2XChpTLqEGEnj46LzVZ8zgvjcF6NNKScByAlLpoQUkVIjB2KHpcMi+w==", + "peerDependencies": { + "solid-js": "^1.5.3" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.12", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", + "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001407", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions": { + "version": "0.34.13", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.34.13.tgz", + "integrity": "sha512-rKkJ7a0arzqE180hPeZI/EIB4OTuByVgE5bsHlI/lZGpU+pVtuvIwwePIIFH8ld49a8pvM0fLfrryP/W6ZMx0g==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "7.16.0", + "@babel/plugin-syntax-jsx": "^7.16.5", + "@babel/types": "^7.16.0", + "html-entities": "2.3.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/babel-preset-solid": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.5.7.tgz", + "integrity": "sha512-BUE7SOawUNMcw4QDJHWSRWAzmzZKoYNuduAKx8GfdaUhtW+50LTh2ZkHXEPZiQrSpxmvT0zP7e1cKnTYN6iiqw==", + "dev": true, + "dependencies": { + "babel-plugin-jsx-dom-expressions": "^0.34.11" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001418", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", + "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/daisyui": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.31.0.tgz", + "integrity": "sha512-qepRXgQPLNcJ8ZPZy+dUvsC7mRWvMLRcVMe85/wZA60Tnhm/bkidhOzdllL8aAk2JX+W/xlIsTJ8NZFpPm+eyw==", + "dev": true, + "dependencies": { + "color": "^4.2", + "css-selector-tokenizer": "^0.8.0", + "postcss-js": "^4.0.0", + "tailwindcss": "^3" + }, + "peerDependencies": { + "autoprefixer": "^10.0.2", + "postcss": "^8.1.6" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", + "dev": true + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.276", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.276.tgz", + "integrity": "sha512-EpuHPqu8YhonqLBXHoU6hDJCD98FCe6KDoet3/gY1qsQ6usjJoHqBH2YIVs8FXaAtHwVL8Uqa/fsYao/vq9VWQ==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz", + "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.10", + "@esbuild/linux-loong64": "0.15.10", + "esbuild-android-64": "0.15.10", + "esbuild-android-arm64": "0.15.10", + "esbuild-darwin-64": "0.15.10", + "esbuild-darwin-arm64": "0.15.10", + "esbuild-freebsd-64": "0.15.10", + "esbuild-freebsd-arm64": "0.15.10", + "esbuild-linux-32": "0.15.10", + "esbuild-linux-64": "0.15.10", + "esbuild-linux-arm": "0.15.10", + "esbuild-linux-arm64": "0.15.10", + "esbuild-linux-mips64le": "0.15.10", + "esbuild-linux-ppc64le": "0.15.10", + "esbuild-linux-riscv64": "0.15.10", + "esbuild-linux-s390x": "0.15.10", + "esbuild-netbsd-64": "0.15.10", + "esbuild-openbsd-64": "0.15.10", + "esbuild-sunos-64": "0.15.10", + "esbuild-windows-32": "0.15.10", + "esbuild-windows-64": "0.15.10", + "esbuild-windows-arm64": "0.15.10" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz", + "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz", + "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz", + "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz", + "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz", + "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz", + "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz", + "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz", + "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz", + "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz", + "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz", + "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz", + "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz", + "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz", + "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz", + "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz", + "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz", + "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz", + "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz", + "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz", + "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-what": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.7.tgz", + "integrity": "sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-anything": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.0.4.tgz", + "integrity": "sha512-YFsDeY5A9SLXhL21Qn15wCWewRUW6wMTxQF4SuPe9bNdr1wsjiE44Rp8FQUTCtwO0WLdlKiFzhAVE5tlf857Tg==", + "dev": true, + "dependencies": { + "is-what": "^4.1.7", + "ts-toolbelt": "^9.6.0" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/solid-js": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.5.7.tgz", + "integrity": "sha512-L1UuyMuZZARAwzXo5NZDhE6yxc14aqNbVOUoGzvlcxRZo1Cm4ExhPV0diEfwDyiKG/igqNNLkNurHkXiI5sVEg==", + "dependencies": { + "csstype": "^3.1.0" + } + }, + "node_modules/solid-refresh": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.4.1.tgz", + "integrity": "sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.18.2", + "@babel/helper-module-imports": "^7.16.7", + "@babel/types": "^7.18.4" + }, + "peerDependencies": { + "solid-js": "^1.3" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "dev": true + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.7.tgz", + "integrity": "sha512-5vCAmU4S8lyVdFCInu9M54f/g8qbOMakVw5xJ4pjoaDy5wgy9sLLZkGdSLN52dlsBqh0tBqxjaqqa8LgPqwRAA==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": "~2.78.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-solid": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.3.9.tgz", + "integrity": "sha512-+lprsYgt9DVNp0kbDj2d2HWAPI13L8ff5xslk9SjiPBcsY/YUZ/1Wj0J/Oj5aiVAhwfPm8IcM3bzyHJUPlmc8w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "babel-preset-solid": "^1.4.6", + "merge-anything": "^5.0.2", + "solid-refresh": "^0.4.1" + }, + "peerDependencies": { + "solid-js": "^1.3.17", + "vite": "^3.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "dev": true + }, + "@babel/core": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", + "dev": true, + "requires": { + "@babel/types": "^7.19.4", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.19.3", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "dev": true, + "requires": { + "@babel/types": "^7.19.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", + "dev": true + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" + } + }, + "@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@esbuild/android-arm": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz", + "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz", + "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==", + "dev": true, + "optional": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", + "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@solidjs/router": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@solidjs/router/-/router-0.5.0.tgz", + "integrity": "sha512-rNR07l21tWWDVmCbaapggB89rEX7jlM2XChpTLqEGEnj46LzVZ8zgvjcF6NNKScByAlLpoQUkVIjB2KHpcMi+w==", + "requires": {} + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.12", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", + "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001407", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "babel-plugin-jsx-dom-expressions": { + "version": "0.34.13", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.34.13.tgz", + "integrity": "sha512-rKkJ7a0arzqE180hPeZI/EIB4OTuByVgE5bsHlI/lZGpU+pVtuvIwwePIIFH8ld49a8pvM0fLfrryP/W6ZMx0g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.16.0", + "@babel/plugin-syntax-jsx": "^7.16.5", + "@babel/types": "^7.16.0", + "html-entities": "2.3.2" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + } + } + }, + "babel-preset-solid": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.5.7.tgz", + "integrity": "sha512-BUE7SOawUNMcw4QDJHWSRWAzmzZKoYNuduAKx8GfdaUhtW+50LTh2ZkHXEPZiQrSpxmvT0zP7e1cKnTYN6iiqw==", + "dev": true, + "requires": { + "babel-plugin-jsx-dom-expressions": "^0.34.11" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001418", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", + "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + }, + "dependencies": { + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + } + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "daisyui": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-2.31.0.tgz", + "integrity": "sha512-qepRXgQPLNcJ8ZPZy+dUvsC7mRWvMLRcVMe85/wZA60Tnhm/bkidhOzdllL8aAk2JX+W/xlIsTJ8NZFpPm+eyw==", + "dev": true, + "requires": { + "color": "^4.2", + "css-selector-tokenizer": "^0.8.0", + "postcss-js": "^4.0.0", + "tailwindcss": "^3" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", + "dev": true + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.276", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.276.tgz", + "integrity": "sha512-EpuHPqu8YhonqLBXHoU6hDJCD98FCe6KDoet3/gY1qsQ6usjJoHqBH2YIVs8FXaAtHwVL8Uqa/fsYao/vq9VWQ==", + "dev": true + }, + "esbuild": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz", + "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.10", + "@esbuild/linux-loong64": "0.15.10", + "esbuild-android-64": "0.15.10", + "esbuild-android-arm64": "0.15.10", + "esbuild-darwin-64": "0.15.10", + "esbuild-darwin-arm64": "0.15.10", + "esbuild-freebsd-64": "0.15.10", + "esbuild-freebsd-arm64": "0.15.10", + "esbuild-linux-32": "0.15.10", + "esbuild-linux-64": "0.15.10", + "esbuild-linux-arm": "0.15.10", + "esbuild-linux-arm64": "0.15.10", + "esbuild-linux-mips64le": "0.15.10", + "esbuild-linux-ppc64le": "0.15.10", + "esbuild-linux-riscv64": "0.15.10", + "esbuild-linux-s390x": "0.15.10", + "esbuild-netbsd-64": "0.15.10", + "esbuild-openbsd-64": "0.15.10", + "esbuild-sunos-64": "0.15.10", + "esbuild-windows-32": "0.15.10", + "esbuild-windows-64": "0.15.10", + "esbuild-windows-arm64": "0.15.10" + } + }, + "esbuild-android-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz", + "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz", + "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz", + "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz", + "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz", + "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz", + "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz", + "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz", + "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz", + "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz", + "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz", + "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz", + "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz", + "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz", + "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz", + "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz", + "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz", + "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz", + "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz", + "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.10", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz", + "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-what": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.7.tgz", + "integrity": "sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true + }, + "merge-anything": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.0.4.tgz", + "integrity": "sha512-YFsDeY5A9SLXhL21Qn15wCWewRUW6wMTxQF4SuPe9bNdr1wsjiE44Rp8FQUTCtwO0WLdlKiFzhAVE5tlf857Tg==", + "dev": true, + "requires": { + "is-what": "^4.1.7", + "ts-toolbelt": "^9.6.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "postcss": { + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "solid-js": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.5.7.tgz", + "integrity": "sha512-L1UuyMuZZARAwzXo5NZDhE6yxc14aqNbVOUoGzvlcxRZo1Cm4ExhPV0diEfwDyiKG/igqNNLkNurHkXiI5sVEg==", + "requires": { + "csstype": "^3.1.0" + } + }, + "solid-refresh": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.4.1.tgz", + "integrity": "sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==", + "dev": true, + "requires": { + "@babel/generator": "^7.18.2", + "@babel/helper-module-imports": "^7.16.7", + "@babel/types": "^7.18.4" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tailwindcss": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", + "dev": true, + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "dev": true + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "vite": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.7.tgz", + "integrity": "sha512-5vCAmU4S8lyVdFCInu9M54f/g8qbOMakVw5xJ4pjoaDy5wgy9sLLZkGdSLN52dlsBqh0tBqxjaqqa8LgPqwRAA==", + "dev": true, + "requires": { + "esbuild": "^0.15.9", + "fsevents": "~2.3.2", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": "~2.78.0" + } + }, + "vite-plugin-solid": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.3.9.tgz", + "integrity": "sha512-+lprsYgt9DVNp0kbDj2d2HWAPI13L8ff5xslk9SjiPBcsY/YUZ/1Wj0J/Oj5aiVAhwfPm8IcM3bzyHJUPlmc8w==", + "dev": true, + "requires": { + "@babel/core": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "babel-preset-solid": "^1.4.6", + "merge-anything": "^5.0.2", + "solid-refresh": "^0.4.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } +} diff --git a/packages/trustix-nix-r13y-web/package.json b/packages/trustix-nix-r13y-web/package.json new file mode 100644 index 00000000..72a6d4d5 --- /dev/null +++ b/packages/trustix-nix-r13y-web/package.json @@ -0,0 +1,24 @@ +{ + "name": "trustix-nix-r13y-web", + "version": "0.0.0", + "description": "", + "scripts": { + "dev": "vite --port 3003", + "build": "vite build", + "serve": "vite preview" + }, + "license": "GPL-3.0-only", + "devDependencies": { + "autoprefixer": "^10.4.8", + "daisyui": "^2.31.0", + "postcss": "^8.4.16", + "tailwindcss": "^3.1.8", + "typescript": "^4.8.2", + "vite": "^3.0.9", + "vite-plugin-solid": "^2.3.0" + }, + "dependencies": { + "@solidjs/router": "^0.5.0", + "solid-js": "^1.5.1" + } +} diff --git a/packages/trustix-nix-r13y-web/postcss.config.js b/packages/trustix-nix-r13y-web/postcss.config.js new file mode 100644 index 00000000..4be16405 --- /dev/null +++ b/packages/trustix-nix-r13y-web/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/packages/trustix-nix-r13y-web/shell.nix b/packages/trustix-nix-r13y-web/shell.nix new file mode 100644 index 00000000..85354708 --- /dev/null +++ b/packages/trustix-nix-r13y-web/shell.nix @@ -0,0 +1,11 @@ +{ pkgs ? import ../../pkgs.nix { } }: + +pkgs.mkShell { + buildInputs = [ + pkgs.nodejs + ]; + + shellHook = '' + export PATH=${builtins.toString ./.}/node_modules/.bin:$PATH + ''; +} diff --git a/packages/trustix-nix-r13y-web/src/App.tsx b/packages/trustix-nix-r13y-web/src/App.tsx new file mode 100644 index 00000000..3dc0af34 --- /dev/null +++ b/packages/trustix-nix-r13y-web/src/App.tsx @@ -0,0 +1,9 @@ +import type { Component } from 'solid-js'; + +const App: Component = () => { + return ( +

Hello tailwind!

+ ); +}; + +export default App; diff --git a/packages/trustix-nix-r13y-web/src/index.css b/packages/trustix-nix-r13y-web/src/index.css new file mode 100644 index 00000000..b5c61c95 --- /dev/null +++ b/packages/trustix-nix-r13y-web/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/packages/trustix-nix-r13y-web/src/index.tsx b/packages/trustix-nix-r13y-web/src/index.tsx new file mode 100644 index 00000000..16f53c75 --- /dev/null +++ b/packages/trustix-nix-r13y-web/src/index.tsx @@ -0,0 +1,7 @@ +/* @refresh reload */ +import './index.css'; +import { render } from 'solid-js/web'; + +import App from './App'; + +render(() => , document.getElementById('root') as HTMLElement); diff --git a/packages/trustix-nix-r13y-web/tailwind.config.js b/packages/trustix-nix-r13y-web/tailwind.config.js new file mode 100644 index 00000000..433e7e0d --- /dev/null +++ b/packages/trustix-nix-r13y-web/tailwind.config.js @@ -0,0 +1,14 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './index.html', + './src/**/*.{js,ts,jsx,tsx,css,md,mdx,html,json,scss}', + ], + darkMode: 'class', + theme: { + extend: {}, + }, + plugins: [ + require('daisyui'), + ], +}; diff --git a/packages/trustix-nix-r13y-web/tsconfig.json b/packages/trustix-nix-r13y-web/tsconfig.json new file mode 100644 index 00000000..5d2faf0a --- /dev/null +++ b/packages/trustix-nix-r13y-web/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + "types": ["vite/client"], + "noEmit": true, + "isolatedModules": true + } +} diff --git a/packages/trustix-nix-r13y-web/vite.config.ts b/packages/trustix-nix-r13y-web/vite.config.ts new file mode 100644 index 00000000..9ff59a17 --- /dev/null +++ b/packages/trustix-nix-r13y-web/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite'; +import solidPlugin from 'vite-plugin-solid'; + +export default defineConfig({ + plugins: [solidPlugin()], + server: { + port: 3000, + }, + build: { + target: 'esnext', + }, +}); From bfdea84234928da172ef29f39e20f3d8fc453aa8 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Tue, 11 Oct 2022 18:21:15 +1300 Subject: [PATCH 12/49] trustix-nix-r13y: add API generation boilerplate --- packages/trustix-nix-r13y-web/Procfile | 1 + .../trustix-nix-r13y-web/package-lock.json | 114 ++++ packages/trustix-nix-r13y-web/package.json | 4 + .../src/api/api_connectweb.ts | 57 ++ .../trustix-nix-r13y-web/src/api/api_pb.ts | 542 ++++++++++++++++++ packages/trustix-nix-r13y-web/vite.config.ts | 1 + 6 files changed, 719 insertions(+) create mode 100644 packages/trustix-nix-r13y-web/src/api/api_connectweb.ts create mode 100644 packages/trustix-nix-r13y-web/src/api/api_pb.ts diff --git a/packages/trustix-nix-r13y-web/Procfile b/packages/trustix-nix-r13y-web/Procfile index f3c08764..438ddb3b 100644 --- a/packages/trustix-nix-r13y-web/Procfile +++ b/packages/trustix-nix-r13y-web/Procfile @@ -1 +1,2 @@ serve: npm install && npm run dev +proto: (proto_script=$(readlink -f ./mk-proto); cd ../trustix-nix-r13y/reprod-api && reflex -r '\.proto$' "$proto_script") diff --git a/packages/trustix-nix-r13y-web/package-lock.json b/packages/trustix-nix-r13y-web/package-lock.json index 07ca14b4..50bf8fd7 100644 --- a/packages/trustix-nix-r13y-web/package-lock.json +++ b/packages/trustix-nix-r13y-web/package-lock.json @@ -9,10 +9,14 @@ "version": "0.0.0", "license": "GPL-3.0-only", "dependencies": { + "@bufbuild/connect-web": "^0.2.1", + "@bufbuild/protobuf": "^0.1.1", "@solidjs/router": "^0.5.0", "solid-js": "^1.5.1" }, "devDependencies": { + "@bufbuild/protoc-gen-connect-web": "^0.2.1", + "@bufbuild/protoc-gen-es": "^0.1.1", "autoprefixer": "^10.4.8", "daisyui": "^2.31.0", "postcss": "^8.4.16", @@ -483,6 +487,78 @@ "node": ">=6.9.0" } }, + "node_modules/@bufbuild/connect-web": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@bufbuild/connect-web/-/connect-web-0.2.1.tgz", + "integrity": "sha512-L580cL9VZCXcjwXMCvIvdFBqdQofVBQcL+jmSis7m8ZxPj5NQ4p7fUhQRTsZMWHkyWINdlZnr7WsHQL0BT7wPQ==", + "peerDependencies": { + "@bufbuild/protobuf": "0.1.1" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-0.1.1.tgz", + "integrity": "sha512-HAs82bdlN5aUsoTaJNsPd8driezDenOtAh7dVpO5xKEmyB6ibmRIV08MTlIVudnMYbFc1qw7RxhFHoQy0rSvgg==" + }, + "node_modules/@bufbuild/protoc-gen-connect-web": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-connect-web/-/protoc-gen-connect-web-0.2.1.tgz", + "integrity": "sha512-A/M/tXRe5LsdD8xeUBEBxhe8TCqzD6eqKbld9j0KNgsRbrRlYQEMtIBarXXb+dADg+dwcTGS9W/DcfdO9R+Icg==", + "dev": true, + "dependencies": { + "@bufbuild/protoplugin": "0.1.1" + }, + "bin": { + "protoc-gen-connect-web": "bin/protoc-gen-connect-web" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@bufbuild/connect-web": "0.2.1", + "@bufbuild/protoc-gen-es": "0.1.1" + }, + "peerDependenciesMeta": { + "@bufbuild/connect-web": { + "optional": true + }, + "@bufbuild/protoc-gen-es": { + "optional": true + } + } + }, + "node_modules/@bufbuild/protoc-gen-es": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-es/-/protoc-gen-es-0.1.1.tgz", + "integrity": "sha512-FFY8GfbMgcgN/nt4DtB+IiLvLmfGjQ7dKYVb6ciKCMymXx5MsRxs4xnJXHtpEv2rDVpDYCOhPkjri8o4AYeSPQ==", + "dev": true, + "dependencies": { + "@bufbuild/protoplugin": "0.1.1" + }, + "bin": { + "protoc-gen-es": "bin/protoc-gen-es" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@bufbuild/protobuf": "0.1.1" + }, + "peerDependenciesMeta": { + "@bufbuild/protobuf": { + "optional": true + } + } + }, + "node_modules/@bufbuild/protoplugin": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-0.1.1.tgz", + "integrity": "sha512-+zCwqiq6xbeM6OG02+eNCd4Rinu1Mtn+HsjMF8U8h5FazOj1fEP9SnXEabOfImOR83vHfk2jocqzrB4IkSZV2Q==", + "dev": true, + "dependencies": { + "@bufbuild/protobuf": "0.1.1" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz", @@ -2639,6 +2715,44 @@ "to-fast-properties": "^2.0.0" } }, + "@bufbuild/connect-web": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@bufbuild/connect-web/-/connect-web-0.2.1.tgz", + "integrity": "sha512-L580cL9VZCXcjwXMCvIvdFBqdQofVBQcL+jmSis7m8ZxPj5NQ4p7fUhQRTsZMWHkyWINdlZnr7WsHQL0BT7wPQ==", + "requires": {} + }, + "@bufbuild/protobuf": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-0.1.1.tgz", + "integrity": "sha512-HAs82bdlN5aUsoTaJNsPd8driezDenOtAh7dVpO5xKEmyB6ibmRIV08MTlIVudnMYbFc1qw7RxhFHoQy0rSvgg==" + }, + "@bufbuild/protoc-gen-connect-web": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-connect-web/-/protoc-gen-connect-web-0.2.1.tgz", + "integrity": "sha512-A/M/tXRe5LsdD8xeUBEBxhe8TCqzD6eqKbld9j0KNgsRbrRlYQEMtIBarXXb+dADg+dwcTGS9W/DcfdO9R+Icg==", + "dev": true, + "requires": { + "@bufbuild/protoplugin": "0.1.1" + } + }, + "@bufbuild/protoc-gen-es": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoc-gen-es/-/protoc-gen-es-0.1.1.tgz", + "integrity": "sha512-FFY8GfbMgcgN/nt4DtB+IiLvLmfGjQ7dKYVb6ciKCMymXx5MsRxs4xnJXHtpEv2rDVpDYCOhPkjri8o4AYeSPQ==", + "dev": true, + "requires": { + "@bufbuild/protoplugin": "0.1.1" + } + }, + "@bufbuild/protoplugin": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@bufbuild/protoplugin/-/protoplugin-0.1.1.tgz", + "integrity": "sha512-+zCwqiq6xbeM6OG02+eNCd4Rinu1Mtn+HsjMF8U8h5FazOj1fEP9SnXEabOfImOR83vHfk2jocqzrB4IkSZV2Q==", + "dev": true, + "requires": { + "@bufbuild/protobuf": "0.1.1" + } + }, "@esbuild/android-arm": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz", diff --git a/packages/trustix-nix-r13y-web/package.json b/packages/trustix-nix-r13y-web/package.json index 72a6d4d5..1ee1fbb4 100644 --- a/packages/trustix-nix-r13y-web/package.json +++ b/packages/trustix-nix-r13y-web/package.json @@ -9,6 +9,8 @@ }, "license": "GPL-3.0-only", "devDependencies": { + "@bufbuild/protoc-gen-connect-web": "^0.2.1", + "@bufbuild/protoc-gen-es": "^0.1.1", "autoprefixer": "^10.4.8", "daisyui": "^2.31.0", "postcss": "^8.4.16", @@ -18,6 +20,8 @@ "vite-plugin-solid": "^2.3.0" }, "dependencies": { + "@bufbuild/connect-web": "^0.2.1", + "@bufbuild/protobuf": "^0.1.1", "@solidjs/router": "^0.5.0", "solid-js": "^1.5.1" } diff --git a/packages/trustix-nix-r13y-web/src/api/api_connectweb.ts b/packages/trustix-nix-r13y-web/src/api/api_connectweb.ts new file mode 100644 index 00000000..d3c94564 --- /dev/null +++ b/packages/trustix-nix-r13y-web/src/api/api_connectweb.ts @@ -0,0 +1,57 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + +// @generated by protoc-gen-connect-web v0.2.1 with parameter "target=ts" +// @generated from file api.proto (package reprod_api.v1, syntax proto3) +/* eslint-disable */ +/* @ts-nocheck */ + +import {AttrReproducibilityTimeSeriesRequest, AttrReproducibilityTimeSeriesResponse, DerivationReproducibilityRequest, DerivationReproducibilityResponse, DiffRequest, DiffResponse, SuggestAttributeResponse, SuggestsAttributeRequest} from "./api_pb.js"; +import {MethodKind} from "@bufbuild/protobuf"; + +/** + * @generated from service reprod_api.v1.ReproducibilityAPI + */ +export const ReproducibilityAPI = { + typeName: "reprod_api.v1.ReproducibilityAPI", + methods: { + /** + * @generated from rpc reprod_api.v1.ReproducibilityAPI.DerivationReproducibility + */ + derivationReproducibility: { + name: "DerivationReproducibility", + I: DerivationReproducibilityRequest, + O: DerivationReproducibilityResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries + */ + attrReproducibilityTimeSeries: { + name: "AttrReproducibilityTimeSeries", + I: AttrReproducibilityTimeSeriesRequest, + O: AttrReproducibilityTimeSeriesResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc reprod_api.v1.ReproducibilityAPI.SuggestAttribute + */ + suggestAttribute: { + name: "SuggestAttribute", + I: SuggestsAttributeRequest, + O: SuggestAttributeResponse, + kind: MethodKind.Unary, + }, + /** + * @generated from rpc reprod_api.v1.ReproducibilityAPI.Diff + */ + diff: { + name: "Diff", + I: DiffRequest, + O: DiffResponse, + kind: MethodKind.Unary, + }, + } +} as const; + diff --git a/packages/trustix-nix-r13y-web/src/api/api_pb.ts b/packages/trustix-nix-r13y-web/src/api/api_pb.ts new file mode 100644 index 00000000..b0fbcbc7 --- /dev/null +++ b/packages/trustix-nix-r13y-web/src/api/api_pb.ts @@ -0,0 +1,542 @@ +// Copyright © 2020-2022 The Trustix Authors +// +// SPDX-License-Identifier: GPL-3.0-only + +// @generated by protoc-gen-es v0.1.1 with parameter "target=ts" +// @generated from file api.proto (package reprod_api.v1, syntax proto3) +/* eslint-disable */ +/* @ts-nocheck */ + +import type {BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage} from "@bufbuild/protobuf"; +import {Message, proto3, protoInt64} from "@bufbuild/protobuf"; + +/** + * @generated from message reprod_api.v1.DerivationReproducibilityRequest + */ +export class DerivationReproducibilityRequest extends Message { + /** + * @generated from field: string DrvPath = 1; + */ + DrvPath = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.DerivationReproducibilityRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "DrvPath", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DerivationReproducibilityRequest { + return new DerivationReproducibilityRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DerivationReproducibilityRequest { + return new DerivationReproducibilityRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DerivationReproducibilityRequest { + return new DerivationReproducibilityRequest().fromJsonString(jsonString, options); + } + + static equals(a: DerivationReproducibilityRequest | PlainMessage | undefined, b: DerivationReproducibilityRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(DerivationReproducibilityRequest, a, b); + } +} + +/** + * @generated from message reprod_api.v1.DerivationReproducibilityResponse + */ +export class DerivationReproducibilityResponse extends Message { + /** + * @generated from field: string DrvPath = 1; + */ + DrvPath = ""; + + /** + * @generated from field: map UnreproducedPaths = 2; + */ + UnreproducedPaths: { [key: string]: DerivationReproducibilityResponse_Derivation } = {}; + + /** + * @generated from field: map ReproducedPaths = 3; + */ + ReproducedPaths: { [key: string]: DerivationReproducibilityResponse_Derivation } = {}; + + /** + * @generated from field: map UnknownPaths = 4; + */ + UnknownPaths: { [key: string]: DerivationReproducibilityResponse_Derivation } = {}; + + /** + * @generated from field: map MissingPaths = 5; + */ + MissingPaths: { [key: string]: DerivationReproducibilityResponse_Derivation } = {}; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.DerivationReproducibilityResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "DrvPath", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "UnreproducedPaths", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: DerivationReproducibilityResponse_Derivation} }, + { no: 3, name: "ReproducedPaths", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: DerivationReproducibilityResponse_Derivation} }, + { no: 4, name: "UnknownPaths", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: DerivationReproducibilityResponse_Derivation} }, + { no: 5, name: "MissingPaths", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: DerivationReproducibilityResponse_Derivation} }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DerivationReproducibilityResponse { + return new DerivationReproducibilityResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DerivationReproducibilityResponse { + return new DerivationReproducibilityResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DerivationReproducibilityResponse { + return new DerivationReproducibilityResponse().fromJsonString(jsonString, options); + } + + static equals(a: DerivationReproducibilityResponse | PlainMessage | undefined, b: DerivationReproducibilityResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(DerivationReproducibilityResponse, a, b); + } +} + +/** + * @generated from message reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash + */ +export class DerivationReproducibilityResponse_DerivationOutputHash extends Message { + /** + * @generated from field: repeated int64 LogIDs = 1; + */ + LogIDs: bigint[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "LogIDs", kind: "scalar", T: 3 /* ScalarType.INT64 */, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DerivationReproducibilityResponse_DerivationOutputHash { + return new DerivationReproducibilityResponse_DerivationOutputHash().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DerivationReproducibilityResponse_DerivationOutputHash { + return new DerivationReproducibilityResponse_DerivationOutputHash().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DerivationReproducibilityResponse_DerivationOutputHash { + return new DerivationReproducibilityResponse_DerivationOutputHash().fromJsonString(jsonString, options); + } + + static equals(a: DerivationReproducibilityResponse_DerivationOutputHash | PlainMessage | undefined, b: DerivationReproducibilityResponse_DerivationOutputHash | PlainMessage | undefined): boolean { + return proto3.util.equals(DerivationReproducibilityResponse_DerivationOutputHash, a, b); + } +} + +/** + * @generated from message reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput + */ +export class DerivationReproducibilityResponse_DerivationOutput extends Message { + /** + * @generated from field: string Output = 1; + */ + Output = ""; + + /** + * @generated from field: string StorePath = 2; + */ + StorePath = ""; + + /** + * Map output hash to log id + * + * @generated from field: map OutputHashes = 3; + */ + OutputHashes: { [key: string]: DerivationReproducibilityResponse_DerivationOutputHash } = {}; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "Output", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "StorePath", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "OutputHashes", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: DerivationReproducibilityResponse_DerivationOutputHash} }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DerivationReproducibilityResponse_DerivationOutput { + return new DerivationReproducibilityResponse_DerivationOutput().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DerivationReproducibilityResponse_DerivationOutput { + return new DerivationReproducibilityResponse_DerivationOutput().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DerivationReproducibilityResponse_DerivationOutput { + return new DerivationReproducibilityResponse_DerivationOutput().fromJsonString(jsonString, options); + } + + static equals(a: DerivationReproducibilityResponse_DerivationOutput | PlainMessage | undefined, b: DerivationReproducibilityResponse_DerivationOutput | PlainMessage | undefined): boolean { + return proto3.util.equals(DerivationReproducibilityResponse_DerivationOutput, a, b); + } +} + +/** + * @generated from message reprod_api.v1.DerivationReproducibilityResponse.Derivation + */ +export class DerivationReproducibilityResponse_Derivation extends Message { + /** + * @generated from field: map Outputs = 2; + */ + Outputs: { [key: string]: DerivationReproducibilityResponse_DerivationOutput } = {}; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.DerivationReproducibilityResponse.Derivation"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 2, name: "Outputs", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: DerivationReproducibilityResponse_DerivationOutput} }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DerivationReproducibilityResponse_Derivation { + return new DerivationReproducibilityResponse_Derivation().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DerivationReproducibilityResponse_Derivation { + return new DerivationReproducibilityResponse_Derivation().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DerivationReproducibilityResponse_Derivation { + return new DerivationReproducibilityResponse_Derivation().fromJsonString(jsonString, options); + } + + static equals(a: DerivationReproducibilityResponse_Derivation | PlainMessage | undefined, b: DerivationReproducibilityResponse_Derivation | PlainMessage | undefined): boolean { + return proto3.util.equals(DerivationReproducibilityResponse_Derivation, a, b); + } +} + +/** + * @generated from message reprod_api.v1.AttrReproducibilityTimeSeriesPoint + */ +export class AttrReproducibilityTimeSeriesPoint extends Message { + /** + * @generated from field: int64 EvalID = 1; + */ + EvalID = protoInt64.zero; + + /** + * @generated from field: int64 EvalTimestamp = 2; + */ + EvalTimestamp = protoInt64.zero; + + /** + * @generated from field: string DrvPath = 3; + */ + DrvPath = ""; + + /** + * @generated from field: float PctReproduced = 4; + */ + PctReproduced = 0; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.AttrReproducibilityTimeSeriesPoint"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "EvalID", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 2, name: "EvalTimestamp", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 3, name: "DrvPath", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "PctReproduced", kind: "scalar", T: 2 /* ScalarType.FLOAT */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AttrReproducibilityTimeSeriesPoint { + return new AttrReproducibilityTimeSeriesPoint().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AttrReproducibilityTimeSeriesPoint { + return new AttrReproducibilityTimeSeriesPoint().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AttrReproducibilityTimeSeriesPoint { + return new AttrReproducibilityTimeSeriesPoint().fromJsonString(jsonString, options); + } + + static equals(a: AttrReproducibilityTimeSeriesPoint | PlainMessage | undefined, b: AttrReproducibilityTimeSeriesPoint | PlainMessage | undefined): boolean { + return proto3.util.equals(AttrReproducibilityTimeSeriesPoint, a, b); + } +} + +/** + * @generated from message reprod_api.v1.AttrReproducibilityTimeSeriesResponse + */ +export class AttrReproducibilityTimeSeriesResponse extends Message { + /** + * @generated from field: repeated reprod_api.v1.AttrReproducibilityTimeSeriesPoint Points = 1; + */ + Points: AttrReproducibilityTimeSeriesPoint[] = []; + + /** + * @generated from field: float PctReproduced = 2; + */ + PctReproduced = 0; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.AttrReproducibilityTimeSeriesResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "Points", kind: "message", T: AttrReproducibilityTimeSeriesPoint, repeated: true }, + { no: 2, name: "PctReproduced", kind: "scalar", T: 2 /* ScalarType.FLOAT */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AttrReproducibilityTimeSeriesResponse { + return new AttrReproducibilityTimeSeriesResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AttrReproducibilityTimeSeriesResponse { + return new AttrReproducibilityTimeSeriesResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AttrReproducibilityTimeSeriesResponse { + return new AttrReproducibilityTimeSeriesResponse().fromJsonString(jsonString, options); + } + + static equals(a: AttrReproducibilityTimeSeriesResponse | PlainMessage | undefined, b: AttrReproducibilityTimeSeriesResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(AttrReproducibilityTimeSeriesResponse, a, b); + } +} + +/** + * @generated from message reprod_api.v1.AttrReproducibilityTimeSeriesRequest + */ +export class AttrReproducibilityTimeSeriesRequest extends Message { + /** + * @generated from field: string Attr = 1; + */ + Attr = ""; + + /** + * @generated from field: int64 Start = 2; + */ + Start = protoInt64.zero; + + /** + * @generated from field: int64 Stop = 3; + */ + Stop = protoInt64.zero; + + /** + * @generated from field: string Channel = 4; + */ + Channel = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.AttrReproducibilityTimeSeriesRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "Attr", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "Start", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 3, name: "Stop", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 4, name: "Channel", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AttrReproducibilityTimeSeriesRequest { + return new AttrReproducibilityTimeSeriesRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AttrReproducibilityTimeSeriesRequest { + return new AttrReproducibilityTimeSeriesRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AttrReproducibilityTimeSeriesRequest { + return new AttrReproducibilityTimeSeriesRequest().fromJsonString(jsonString, options); + } + + static equals(a: AttrReproducibilityTimeSeriesRequest | PlainMessage | undefined, b: AttrReproducibilityTimeSeriesRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(AttrReproducibilityTimeSeriesRequest, a, b); + } +} + +/** + * @generated from message reprod_api.v1.SuggestsAttributeRequest + */ +export class SuggestsAttributeRequest extends Message { + /** + * @generated from field: string AttrPrefix = 1; + */ + AttrPrefix = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.SuggestsAttributeRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "AttrPrefix", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SuggestsAttributeRequest { + return new SuggestsAttributeRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SuggestsAttributeRequest { + return new SuggestsAttributeRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SuggestsAttributeRequest { + return new SuggestsAttributeRequest().fromJsonString(jsonString, options); + } + + static equals(a: SuggestsAttributeRequest | PlainMessage | undefined, b: SuggestsAttributeRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(SuggestsAttributeRequest, a, b); + } +} + +/** + * @generated from message reprod_api.v1.SuggestAttributeResponse + */ +export class SuggestAttributeResponse extends Message { + /** + * @generated from field: repeated string Attrs = 1; + */ + Attrs: string[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.SuggestAttributeResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "Attrs", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SuggestAttributeResponse { + return new SuggestAttributeResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SuggestAttributeResponse { + return new SuggestAttributeResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SuggestAttributeResponse { + return new SuggestAttributeResponse().fromJsonString(jsonString, options); + } + + static equals(a: SuggestAttributeResponse | PlainMessage | undefined, b: SuggestAttributeResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(SuggestAttributeResponse, a, b); + } +} + +/** + * @generated from message reprod_api.v1.DiffRequest + */ +export class DiffRequest extends Message { + /** + * @generated from field: string OutputHash1 = 1; + */ + OutputHash1 = ""; + + /** + * @generated from field: string OutputHash2 = 2; + */ + OutputHash2 = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.DiffRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "OutputHash1", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "OutputHash2", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DiffRequest { + return new DiffRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DiffRequest { + return new DiffRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DiffRequest { + return new DiffRequest().fromJsonString(jsonString, options); + } + + static equals(a: DiffRequest | PlainMessage | undefined, b: DiffRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(DiffRequest, a, b); + } +} + +/** + * @generated from message reprod_api.v1.DiffResponse + */ +export class DiffResponse extends Message { + /** + * @generated from field: string HTMLDiff = 1; + */ + HTMLDiff = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.DiffResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "HTMLDiff", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DiffResponse { + return new DiffResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DiffResponse { + return new DiffResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DiffResponse { + return new DiffResponse().fromJsonString(jsonString, options); + } + + static equals(a: DiffResponse | PlainMessage | undefined, b: DiffResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(DiffResponse, a, b); + } +} + diff --git a/packages/trustix-nix-r13y-web/vite.config.ts b/packages/trustix-nix-r13y-web/vite.config.ts index 9ff59a17..1bb01e46 100644 --- a/packages/trustix-nix-r13y-web/vite.config.ts +++ b/packages/trustix-nix-r13y-web/vite.config.ts @@ -9,4 +9,5 @@ export default defineConfig({ build: { target: 'esnext', }, + clearScreen: false, }); From d0b32851d9bf8bc3aa4a3c745651cdade9fbfbec Mon Sep 17 00:00:00 2001 From: adisbladis Date: Wed, 12 Oct 2022 14:24:47 +1300 Subject: [PATCH 13/49] go-lib: fix some thread safety issues & performance gains in set --- packages/go-lib/set/set.go | 47 ++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/packages/go-lib/set/set.go b/packages/go-lib/set/set.go index 23be2967..760085db 100644 --- a/packages/go-lib/set/set.go +++ b/packages/go-lib/set/set.go @@ -51,6 +51,12 @@ func (s *Set[T]) Values() []T { return values } +// Check if a set has member of value. +func (s *Set[T]) has(value T) bool { + _, ok := s.values[value] + return ok +} + // Check if a set has member of value. func (s *Set[T]) Has(value T) bool { if s.mux != nil { @@ -58,18 +64,27 @@ func (s *Set[T]) Has(value T) bool { defer s.mux.RUnlock() } - _, ok := s.values[value] - return ok + return s.has(value) +} + +func (s *Set[T]) add(value T) { + s.values[value] = struct{}{} } // Add a member. -func (s *Set[T]) Add(value T) { +func (s *Set[T]) Add(value T) (added bool) { if s.mux != nil { s.mux.Lock() defer s.mux.Unlock() } - s.values[value] = struct{}{} + if s.has(value) { + return false + } + + s.add(value) + + return true } // Remove a member. @@ -88,6 +103,10 @@ func (s *Set[T]) Union(set *Set[T]) *Set[T] { s.mux.RLock() defer s.mux.RUnlock() } + if set.mux != nil { + set.mux.RLock() + defer set.mux.RUnlock() + } us := &Set[T]{ // Note: Size is the minimum possible size of the new set @@ -95,11 +114,11 @@ func (s *Set[T]) Union(set *Set[T]) *Set[T] { } for v := range s.values { - us.Add(v) + us.add(v) } for v := range set.values { - us.Add(v) + us.add(v) } return us @@ -117,7 +136,7 @@ func (s *Set[T]) Copy() *Set[T] { } for v := range s.values { - copy.Add(v) + copy.add(v) } return copy @@ -129,14 +148,18 @@ func (s *Set[T]) Diff(set *Set[T]) *Set[T] { s.mux.RLock() defer s.mux.RUnlock() } + if set.mux != nil { + set.mux.RLock() + defer set.mux.RUnlock() + } diff := &Set[T]{ values: make(map[T]struct{}), } for v := range s.values { - if !set.Has(v) { - diff.Add(v) + if !set.has(v) { + diff.add(v) } } @@ -149,8 +172,12 @@ func (s *Set[T]) Update(set *Set[T]) { s.mux.Lock() defer s.mux.Unlock() } + if set.mux != nil { + set.mux.RLock() + defer set.mux.RUnlock() + } for v := range set.values { - s.Add(v) + s.add(v) } } From 8b2c9eb5a43fdfe6307e02cf00b0b1cb06cccb56 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Wed, 12 Oct 2022 22:12:22 +1300 Subject: [PATCH 14/49] trustix-nix-r13y-web: web interface has basic functionality --- packages/trustix-nix-r13y-web/default.nix | 7 ++ packages/trustix-nix-r13y-web/mk-proto | 9 ++ .../trustix-nix-r13y-web/package-lock.json | 40 +++++++++ packages/trustix-nix-r13y-web/package.json | 2 +- packages/trustix-nix-r13y-web/src/App.tsx | 19 +++- .../trustix-nix-r13y-web/src/api/api_pb.ts | 1 - packages/trustix-nix-r13y-web/src/index.tsx | 10 ++- .../trustix-nix-r13y-web/src/pages/drv.tsx | 86 +++++++++++++++++++ packages/trustix-nix-r13y-web/vite.config.ts | 13 ++- packages/trustix-nix-r13y/Procfile | 2 +- .../internal/index/derivations.go | 5 +- .../trustix-nix-r13y/internal/server/api.go | 1 + 12 files changed, 184 insertions(+), 11 deletions(-) create mode 100644 packages/trustix-nix-r13y-web/default.nix create mode 100755 packages/trustix-nix-r13y-web/mk-proto create mode 100644 packages/trustix-nix-r13y-web/src/pages/drv.tsx diff --git a/packages/trustix-nix-r13y-web/default.nix b/packages/trustix-nix-r13y-web/default.nix new file mode 100644 index 00000000..ab88feaf --- /dev/null +++ b/packages/trustix-nix-r13y-web/default.nix @@ -0,0 +1,7 @@ +{ npmlock2nix, lib, gitignoreSource }: + +npmlock2nix.build { + src = gitignoreSource ./.; + installPhase = "cp -r dist $out"; + buildCommands = [ "npm run build" ]; +} diff --git a/packages/trustix-nix-r13y-web/mk-proto b/packages/trustix-nix-r13y-web/mk-proto new file mode 100755 index 00000000..307ac705 --- /dev/null +++ b/packages/trustix-nix-r13y-web/mk-proto @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "$0")" +exec protoc -I ../trustix-nix-r13y/reprod-api \ + --es_out src/api \ + --es_opt target=ts \ + --connect-web_out src/api \ + --connect-web_opt target=ts \ + ../trustix-nix-r13y/reprod-api/*.proto diff --git a/packages/trustix-nix-r13y-web/package-lock.json b/packages/trustix-nix-r13y-web/package-lock.json index 50bf8fd7..9822548a 100644 --- a/packages/trustix-nix-r13y-web/package-lock.json +++ b/packages/trustix-nix-r13y-web/package-lock.json @@ -23,6 +23,7 @@ "tailwindcss": "^3.1.8", "typescript": "^4.8.2", "vite": "^3.0.9", + "vite-plugin-rewrite-all": "^1.0.0", "vite-plugin-solid": "^2.3.0" } }, @@ -999,6 +1000,15 @@ "node": ">=7.0.0" } }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -2339,6 +2349,21 @@ } } }, + "node_modules/vite-plugin-rewrite-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-rewrite-all/-/vite-plugin-rewrite-all-1.0.0.tgz", + "integrity": "sha512-XScNU1F73ImgsNQUuDTBd09r8nSz8Umr5PVhfmGJ8FTrFvfcci+P1pD7lT5BIdua75ZoNZGfHgdNYwnZB4cszQ==", + "dev": true, + "dependencies": { + "connect-history-api-fallback": "^1.6.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "vite": "^2.0.0 || ^3.0.0" + } + }, "node_modules/vite-plugin-solid": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.3.9.tgz", @@ -3062,6 +3087,12 @@ "simple-swizzle": "^0.2.2" } }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -3875,6 +3906,15 @@ "rollup": "~2.78.0" } }, + "vite-plugin-rewrite-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vite-plugin-rewrite-all/-/vite-plugin-rewrite-all-1.0.0.tgz", + "integrity": "sha512-XScNU1F73ImgsNQUuDTBd09r8nSz8Umr5PVhfmGJ8FTrFvfcci+P1pD7lT5BIdua75ZoNZGfHgdNYwnZB4cszQ==", + "dev": true, + "requires": { + "connect-history-api-fallback": "^1.6.0" + } + }, "vite-plugin-solid": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.3.9.tgz", diff --git a/packages/trustix-nix-r13y-web/package.json b/packages/trustix-nix-r13y-web/package.json index 1ee1fbb4..ef75ac3a 100644 --- a/packages/trustix-nix-r13y-web/package.json +++ b/packages/trustix-nix-r13y-web/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "description": "", "scripts": { - "dev": "vite --port 3003", + "dev": "vite", "build": "vite build", "serve": "vite preview" }, diff --git a/packages/trustix-nix-r13y-web/src/App.tsx b/packages/trustix-nix-r13y-web/src/App.tsx index 3dc0af34..537815a6 100644 --- a/packages/trustix-nix-r13y-web/src/App.tsx +++ b/packages/trustix-nix-r13y-web/src/App.tsx @@ -1,8 +1,25 @@ import type { Component } from 'solid-js'; +import { lazy } from 'solid-js'; +import { Routes, Route, A } from "@solidjs/router" + +const Derivation = lazy(() => import("./pages/drv")) const App: Component = () => { return ( -

Hello tailwind!

+ <> +

Trustix r13y

+ + + + + + + + ); }; diff --git a/packages/trustix-nix-r13y-web/src/api/api_pb.ts b/packages/trustix-nix-r13y-web/src/api/api_pb.ts index b0fbcbc7..e4a821e1 100644 --- a/packages/trustix-nix-r13y-web/src/api/api_pb.ts +++ b/packages/trustix-nix-r13y-web/src/api/api_pb.ts @@ -539,4 +539,3 @@ export class DiffResponse extends Message { return proto3.util.equals(DiffResponse, a, b); } } - diff --git a/packages/trustix-nix-r13y-web/src/index.tsx b/packages/trustix-nix-r13y-web/src/index.tsx index 16f53c75..1e1e04e3 100644 --- a/packages/trustix-nix-r13y-web/src/index.tsx +++ b/packages/trustix-nix-r13y-web/src/index.tsx @@ -1,7 +1,15 @@ /* @refresh reload */ import './index.css'; import { render } from 'solid-js/web'; +import { Router } from "@solidjs/router"; import App from './App'; -render(() => , document.getElementById('root') as HTMLElement); +render( + () => ( + + + + ), + document.getElementById('root') as HTMLElement +) diff --git a/packages/trustix-nix-r13y-web/src/pages/drv.tsx b/packages/trustix-nix-r13y-web/src/pages/drv.tsx new file mode 100644 index 00000000..fd624d1d --- /dev/null +++ b/packages/trustix-nix-r13y-web/src/pages/drv.tsx @@ -0,0 +1,86 @@ +import { + lazy, + Component, + createSignal, + createResource, + For, + Show, +} from "solid-js"; +import { + Routes, + Route, + useParams, + useSearchParams, +} from "@solidjs/router"; + +import { + createConnectTransport, + createPromiseClient, +} from '@bufbuild/connect-web' + + +import { ReproducibilityAPI } from '../api/api_connectweb' +import { + DerivationReproducibilityRequest, + DerivationReproducibilityResponse, + DerivationReproducibilityResponse_Derivation, +} from '../api/api_pb' + + +type DerivationReproducibilityPaths = { [key: string]: DerivationReproducibilityResponse_Derivation } + + +const fetchDerivationReproducibility = async (drvPath): DerivationReproducibilityResponse => { + const client = createPromiseClient( + ReproducibilityAPI, + createConnectTransport({ + baseUrl: '/api', + }) + ) + + const req = new DerivationReproducibilityRequest({ + DrvPath: drvPath, + }) + + return await client.derivationReproducibility(req) +} + +const renderPaths = (paths: DerivationReproducibilityPaths): Component => { + console.log(paths) + return ( + <> +

hello

+
    + {(k, i) => <> +

    Hellolo

    + }
    +
+ + ) +} + +const Derivation: Component = () => { + const [searchParams, setSearchParams] = useSearchParams() + const [drvReprod] = createResource(() => searchParams.storePath, fetchDerivationReproducibility); + + return ( + <> + {drvReprod.loading && "Loading..."} + +
+

{searchParams.storePath}

+
+ + +

Missing paths (not built by any known log)

+ {renderPaths(drvReprod()?.MissingPaths)} +
+ +
+
{JSON.stringify(drvReprod(), null, 2)}
+
+ + ); +}; + +export default Derivation; diff --git a/packages/trustix-nix-r13y-web/vite.config.ts b/packages/trustix-nix-r13y-web/vite.config.ts index 1bb01e46..af1daee3 100644 --- a/packages/trustix-nix-r13y-web/vite.config.ts +++ b/packages/trustix-nix-r13y-web/vite.config.ts @@ -2,9 +2,18 @@ import { defineConfig } from 'vite'; import solidPlugin from 'vite-plugin-solid'; export default defineConfig({ - plugins: [solidPlugin()], + plugins: [ + solidPlugin(), + ], server: { - port: 3000, + port: 8091, + proxy: { + '/api': { + target: 'http://127.0.0.1:8090', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, '') + }, + }, }, build: { target: 'esnext', diff --git a/packages/trustix-nix-r13y/Procfile b/packages/trustix-nix-r13y/Procfile index 6b3987c0..af950e89 100644 --- a/packages/trustix-nix-r13y/Procfile +++ b/packages/trustix-nix-r13y/Procfile @@ -1,4 +1,4 @@ build: reflex -r '\.go$' go build sqlc: reflex -r '\.sql$' sqlc generate -serve: go build && ../../tools/wait_for_file trustix-nix-r13y && echo trustix-nix-r13y | entr -r ./trustix-nix-r13y serve +serve: go build && ../../tools/wait_for_file trustix-nix-r13y && echo trustix-nix-r13y | entr -r ./trustix-nix-r13y --config examples/config.toml serve --listen http://localhost:8090 proto: reflex -r '\.proto$' ./mk-proto diff --git a/packages/trustix-nix-r13y/internal/index/derivations.go b/packages/trustix-nix-r13y/internal/index/derivations.go index 9d33d742..29e63198 100644 --- a/packages/trustix-nix-r13y/internal/index/derivations.go +++ b/packages/trustix-nix-r13y/internal/index/derivations.go @@ -172,16 +172,13 @@ func IndexEval[T EvalMetaDataTypes](ctx context.Context, db *sql.DB, nixPath str // Index a derivation including it's dependencies var indexDrv func(string) (int64, error) indexDrv = func(drvPath string) (int64, error) { - // No-op if already indexed, populate map early to act as a lock per drvPath - if alreadyIndexed.Has(drvPath) { + if !alreadyIndexed.Add(drvPath) { dbID, err := getDrvID(drvPath) if err != nil { return errorID, fmt.Errorf("error getting derivation id: %w", err) } return dbID, nil - } else { - alreadyIndexed.Add(drvPath) } drv, err := drvParser.ReadPath(drvPath) diff --git a/packages/trustix-nix-r13y/internal/server/api.go b/packages/trustix-nix-r13y/internal/server/api.go index e9492bda..a4ec4a33 100644 --- a/packages/trustix-nix-r13y/internal/server/api.go +++ b/packages/trustix-nix-r13y/internal/server/api.go @@ -92,6 +92,7 @@ func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect. } resp := &pb.DerivationReproducibilityResponse{ + DrvPath: drvPath, MissingPaths: make(map[string]*respDerivation), ReproducedPaths: make(map[string]*respDerivation), UnknownPaths: make(map[string]*respDerivation), From e5007550ae927ce19f3291430feb0d2bec122468 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Wed, 12 Oct 2022 22:13:28 +1300 Subject: [PATCH 15/49] trustix-nix-r13y-web: Procfile: add trustix-nix-r13y to root level procfile --- Procfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Procfile b/Procfile index b575cb31..fd7ea2c3 100644 --- a/Procfile +++ b/Procfile @@ -1,4 +1,5 @@ trustix: bash -c "cd packages/trustix && nix-shell --run hivemind" trustix-nix: bash -c "./tools/wait_for_file $TRUSTIX_RPC && cd packages/trustix-nix && nix-shell --run hivemind" +trustix-nix-r13y: bash -c "cd packages/trustix-nix-r13y && nix-shell --run hivemind" trustix-proto: bash -c "cd packages/trustix-proto && nix-shell --run hivemind" trustix-doc: bash -c "cd packages/trustix-doc && nix-shell --run hivemind" From ce9d27819fe57e00aa81eb5722c1a0b30b85e7fa Mon Sep 17 00:00:00 2001 From: adisbladis Date: Thu, 13 Oct 2022 12:36:54 +1300 Subject: [PATCH 16/49] trustix-nix-r13y: rework configuration so channels are grouped per type this is better suited for the nixos module system schema --- .../trustix-nix-r13y/examples/config.toml | 6 +--- .../trustix-nix-r13y/internal/cmd/serve.go | 4 +-- .../internal/config/channels.go | 32 ++++++++----------- .../internal/config/config.go | 17 ++++++---- .../internal/index/channels.go | 16 ++++------ .../trustix-nix-r13y/internal/server/api.go | 6 ++-- 6 files changed, 36 insertions(+), 45 deletions(-) diff --git a/packages/trustix-nix-r13y/examples/config.toml b/packages/trustix-nix-r13y/examples/config.toml index c248a6ad..184cc19f 100644 --- a/packages/trustix-nix-r13y/examples/config.toml +++ b/packages/trustix-nix-r13y/examples/config.toml @@ -2,11 +2,7 @@ eval_index = 3600 log_index = 900 -[channels.nixos-unstable] -expr = "import { }" -type = "hydra" - -[channels.nixos-unstable.hydra] +[channels.hydra.nixos-unstable] base_url = "https://hydra.nixos.org" jobset = "trunk-combined" project = "nixos" diff --git a/packages/trustix-nix-r13y/internal/cmd/serve.go b/packages/trustix-nix-r13y/internal/cmd/serve.go index 345e355d..a259aefd 100644 --- a/packages/trustix-nix-r13y/internal/cmd/serve.go +++ b/packages/trustix-nix-r13y/internal/cmd/serve.go @@ -91,14 +91,14 @@ var serveCommand = &cobra.Command{ evalIndexCron := cron.NewSingletonCronJob("eval_index", evalIndexCronInterval, func(ctx context.Context) { indexedEvals := 0 - for channel, channelConfig := range conf.Channels { + for channel, channelConfig := range conf.Channels.Hydra { l := log.WithFields(log.Fields{ "channel": channel, }) l.Info("indexing channel") - n, err := index.IndexChannel(ctx, dbs.dbRW, channel, channelConfig) + n, err := index.IndexHydraJobset(ctx, dbs.dbRW, channel, channelConfig) if err != nil { l.WithFields(log.Fields{ "erroro": err, diff --git a/packages/trustix-nix-r13y/internal/config/channels.go b/packages/trustix-nix-r13y/internal/config/channels.go index 5709f8e8..2c78ded2 100644 --- a/packages/trustix-nix-r13y/internal/config/channels.go +++ b/packages/trustix-nix-r13y/internal/config/channels.go @@ -6,13 +6,13 @@ package config import "fmt" -type HydraChannel struct { +type HydraJobset struct { BaseURL string `toml:"base_url" json:"base_url"` Project string `toml:"project" json:"project"` Jobset string `toml:"jobset" json:"jobset"` } -func (c *HydraChannel) Validate() error { +func (c *HydraJobset) Validate() error { if c.BaseURL == "" { return fmt.Errorf("missing baseURL") } @@ -28,26 +28,22 @@ func (c *HydraChannel) Validate() error { return nil } -type Channel struct { - Type string - Expr string - Hydra *HydraChannel `toml:"hydra" json:"hydra"` +type Channels struct { + Hydra map[string]*HydraJobset `toml:"hydra" json:"hydra"` } -func (c *Channel) Validate() error { - switch c.Type { - case "hydra": - err := c.Hydra.Validate() - if err != nil { - return fmt.Errorf("error validating hydra channel config: %w", err) - } - - default: - return fmt.Errorf("error validating channel config: invalid type '%s'", c.Type) +func (c *Channels) init() { + if c.Hydra == nil { + c.Hydra = make(map[string]*HydraJobset) } +} - if c.Expr == "" { - return fmt.Errorf("missing expr") +func (c *Channels) Validate() error { + for name, jobset := range c.Hydra { + err := jobset.Validate() + if err != nil { + return fmt.Errorf("error validating jobset '%s': %w", name, err) + } } return nil diff --git a/packages/trustix-nix-r13y/internal/config/config.go b/packages/trustix-nix-r13y/internal/config/config.go index 17185cdb..60d87176 100644 --- a/packages/trustix-nix-r13y/internal/config/config.go +++ b/packages/trustix-nix-r13y/internal/config/config.go @@ -16,8 +16,8 @@ import ( ) type Config struct { - Channels map[string]*Channel `toml:"channels" json:"channels"` - Cron *Cron `toml:"cron" json:"cron"` + Channels *Channels `toml:"channels" json:"channels"` + Cron *Cron `toml:"cron" json:"cron"` } func (c *Config) init() { @@ -25,14 +25,17 @@ func (c *Config) init() { c.Cron = &Cron{} } c.Cron.init() + + if c.Channels == nil { + c.Channels = &Channels{} + } + c.Channels.init() } func (c *Config) Validate() error { - for channel, channelConf := range c.Channels { - err := channelConf.Validate() - if err != nil { - return fmt.Errorf("error validating channel config for '%s': %w", channel, err) - } + err := c.Channels.Validate() + if err != nil { + return fmt.Errorf("error validating channels: %w", err) } return nil diff --git a/packages/trustix-nix-r13y/internal/index/channels.go b/packages/trustix-nix-r13y/internal/index/channels.go index b7c5a2bc..bf49b7b2 100644 --- a/packages/trustix-nix-r13y/internal/index/channels.go +++ b/packages/trustix-nix-r13y/internal/index/channels.go @@ -18,15 +18,14 @@ import ( log "github.com/sirupsen/logrus" ) -func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig *config.Channel) (int, error) { - +func IndexHydraJobset(ctx context.Context, db *sql.DB, channel string, jobsetConfig *config.HydraJobset) (int, error) { l := log.WithFields(log.Fields{ "channel": channel, }) - switch channelConfig.Type { + // Hydra + { - case "hydra": l = l.WithFields(log.Fields{ "channelType": "hydra", }) @@ -60,9 +59,9 @@ func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig l.Info("getting evaluations from hydra API") - evalResp, err := hydra.GetEvaluations(channelConfig.Hydra.BaseURL, channelConfig.Hydra.Project, channelConfig.Hydra.Jobset) + evalResp, err := hydra.GetEvaluations(jobsetConfig.BaseURL, jobsetConfig.Project, jobsetConfig.Jobset) if err != nil { - return 0, fmt.Errorf("error getting response from Hydra at '%s': %w", channelConfig.Hydra.BaseURL, err) + return 0, fmt.Errorf("error getting response from Hydra at '%s': %w", jobsetConfig.BaseURL, err) } // Create a list of evaluations to index @@ -86,7 +85,7 @@ func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig break } - return 0, fmt.Errorf("error getting response from Hydra at '%s': %w", channelConfig.Hydra.BaseURL, err) + return 0, fmt.Errorf("error getting response from Hydra at '%s': %w", jobsetConfig.BaseURL, err) } } @@ -112,9 +111,6 @@ func IndexChannel(ctx context.Context, db *sql.DB, channel string, channelConfig } return len(evals), nil - - default: - return 0, fmt.Errorf("unhandled channel type: %s", channelConfig.Type) } return 0, nil diff --git a/packages/trustix-nix-r13y/internal/server/api.go b/packages/trustix-nix-r13y/internal/server/api.go index a4ec4a33..df13530c 100644 --- a/packages/trustix-nix-r13y/internal/server/api.go +++ b/packages/trustix-nix-r13y/internal/server/api.go @@ -92,7 +92,7 @@ func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect. } resp := &pb.DerivationReproducibilityResponse{ - DrvPath: drvPath, + DrvPath: drvPath, MissingPaths: make(map[string]*respDerivation), ReproducedPaths: make(map[string]*respDerivation), UnknownPaths: make(map[string]*respDerivation), @@ -109,7 +109,7 @@ func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect. drvs[row.Drv] = drv } - _, ok = drv.Outputs[row.Drv] + _, ok = drv.Outputs[row.Output] if !ok { drvOutput := &respDerivationOutput{ Output: row.Output, @@ -125,7 +125,7 @@ func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect. drvOutput.OutputHashes[outputHash] = out } - drv.Outputs[row.Drv] = drvOutput + drv.Outputs[row.Output] = drvOutput } } From 8d72aa8fb01afacc0a017abdfc3f6901f53ff645 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Thu, 13 Oct 2022 16:39:32 +1300 Subject: [PATCH 17/49] trustix-nix-r13y: cron: simplify further by using the cancellation context cancel channel for the timeout loop --- .../trustix-nix-r13y/internal/cron/cron.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/trustix-nix-r13y/internal/cron/cron.go b/packages/trustix-nix-r13y/internal/cron/cron.go index 2a7aac78..80232d04 100644 --- a/packages/trustix-nix-r13y/internal/cron/cron.go +++ b/packages/trustix-nix-r13y/internal/cron/cron.go @@ -14,17 +14,19 @@ import ( ) type CronJob struct { - stopChan chan struct{} - wg sync.WaitGroup + cancel context.CancelFunc + wg sync.WaitGroup } type CronFunc = func(context.Context) // Run fn at an interval func NewCronJob(name string, d time.Duration, fn CronFunc) *CronJob { + ctx, cancel := context.WithCancel(context.Background()) + j := &CronJob{ - stopChan: make(chan struct{}), - wg: sync.WaitGroup{}, + wg: sync.WaitGroup{}, + cancel: cancel, } l := log.WithFields(log.Fields{ @@ -32,8 +34,6 @@ func NewCronJob(name string, d time.Duration, fn CronFunc) *CronJob { "interval": d, }) - ctx, cancel := context.WithCancel(context.Background()) - run := func() { j.wg.Add(1) defer j.wg.Done() @@ -57,9 +57,11 @@ func NewCronJob(name string, d time.Duration, fn CronFunc) *CronJob { go func() { defer j.wg.Done() + stopChan := ctx.Done() + for { select { - case <-j.stopChan: + case <-stopChan: l.Info("stopping") cancel() break @@ -106,8 +108,7 @@ func NewSingletonCronJob(name string, d time.Duration, fn CronFunc) *CronJob { } func (j *CronJob) Close() error { - j.stopChan <- struct{}{} - + j.cancel() j.wg.Wait() return nil From 96746afee2a049d2d0905e1850a1245e3a62e996 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Thu, 13 Oct 2022 16:40:46 +1300 Subject: [PATCH 18/49] trustix-nix-r13y-web: add all path headers to derivation page --- .../trustix-nix-r13y-web/src/pages/drv.tsx | 89 ++++++++++++++----- 1 file changed, 66 insertions(+), 23 deletions(-) diff --git a/packages/trustix-nix-r13y-web/src/pages/drv.tsx b/packages/trustix-nix-r13y-web/src/pages/drv.tsx index fd624d1d..38eb703a 100644 --- a/packages/trustix-nix-r13y-web/src/pages/drv.tsx +++ b/packages/trustix-nix-r13y-web/src/pages/drv.tsx @@ -5,6 +5,7 @@ import { createResource, For, Show, + Suspense, } from "solid-js"; import { Routes, @@ -25,10 +26,16 @@ import { DerivationReproducibilityResponse, DerivationReproducibilityResponse_Derivation, } from '../api/api_pb' +import { + NameValuePair, +} from '../lib' type DerivationReproducibilityPaths = { [key: string]: DerivationReproducibilityResponse_Derivation } +const loading = ( +

Loading...

+) const fetchDerivationReproducibility = async (drvPath): DerivationReproducibilityResponse => { const client = createPromiseClient( @@ -46,16 +53,37 @@ const fetchDerivationReproducibility = async (drvPath): DerivationReproducibilit } const renderPaths = (paths: DerivationReproducibilityPaths): Component => { - console.log(paths) + const derivations = NameValuePair.fromMap(paths) + return ( - <> -

hello

-
    - {(k, i) => <> -

    Hellolo

    - }
    -
- +
    + {({name, value}) => { + const drvPath = name + const drvOutputs = NameValuePair.fromMap(value.Outputs) + + return ( +
    +

    {drvPath}

    +
      + {({name, value}) => { + const output = name + const storePath = value.StorePath + + const outputHashes = NameValuePair.fromMap(value.OutputHashes) + + console.log(outputHashes) + + return ( +
    • +

      {output}

      +
    • + ) + }}
      +
    +
    + ) + }}
    +
) } @@ -65,20 +93,35 @@ const Derivation: Component = () => { return ( <> - {drvReprod.loading && "Loading..."} - -
-

{searchParams.storePath}

-
- - -

Missing paths (not built by any known log)

- {renderPaths(drvReprod()?.MissingPaths)} -
- -
-
{JSON.stringify(drvReprod(), null, 2)}
-
+ +
+

{searchParams.storePath}

+
+ + +

Unreproduced paths

+ {renderPaths(drvReprod()?.UnreproducedPaths)} +
+ + +

Reproduced paths

+ {renderPaths(drvReprod()?.ReproducedPaths)} +
+ + +

Unknown paths (only built by one log)

+ {renderPaths(drvReprod()?.UnknownPaths)} +
+ + +

Missing paths (not built by any known log)

+ {renderPaths(drvReprod()?.MissingPaths)} +
+ +
+
{JSON.stringify(drvReprod(), null, 2)}
+
+
); }; From cfd27184740921daa705c9c029e1b5c941c72891 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Thu, 13 Oct 2022 16:40:53 +1300 Subject: [PATCH 19/49] trustix-nix-r13y-web: remove vite-plugin-rewrite-all it was a misguided attempt at fixing some development annoyances --- Procfile | 2 +- packages/trustix-nix-r13y-web/.prettierignore | 5 + .../trustix-nix-r13y-web/.prettierrc.json | 1 + .../trustix-nix-r13y-web/package-lock.json | 75 +++--- packages/trustix-nix-r13y-web/package.json | 4 +- .../trustix-nix-r13y-web/postcss.config.js | 2 +- packages/trustix-nix-r13y-web/src/App.tsx | 34 +-- packages/trustix-nix-r13y-web/src/index.css | 4 + packages/trustix-nix-r13y-web/src/index.tsx | 10 +- packages/trustix-nix-r13y-web/src/lib.tsx | 21 ++ .../trustix-nix-r13y-web/src/pages/drv.tsx | 247 ++++++++++++------ .../trustix-nix-r13y-web/tailwind.config.js | 10 +- packages/trustix-nix-r13y-web/vite.config.ts | 16 +- 13 files changed, 265 insertions(+), 166 deletions(-) create mode 100644 packages/trustix-nix-r13y-web/.prettierignore create mode 100644 packages/trustix-nix-r13y-web/.prettierrc.json create mode 100644 packages/trustix-nix-r13y-web/src/lib.tsx diff --git a/Procfile b/Procfile index fd7ea2c3..5b5d0685 100644 --- a/Procfile +++ b/Procfile @@ -1,5 +1,5 @@ trustix: bash -c "cd packages/trustix && nix-shell --run hivemind" trustix-nix: bash -c "./tools/wait_for_file $TRUSTIX_RPC && cd packages/trustix-nix && nix-shell --run hivemind" -trustix-nix-r13y: bash -c "cd packages/trustix-nix-r13y && nix-shell --run hivemind" +# trustix-nix-r13y: bash -c "cd packages/trustix-nix-r13y && nix-shell --run hivemind" trustix-proto: bash -c "cd packages/trustix-proto && nix-shell --run hivemind" trustix-doc: bash -c "cd packages/trustix-doc && nix-shell --run hivemind" diff --git a/packages/trustix-nix-r13y-web/.prettierignore b/packages/trustix-nix-r13y-web/.prettierignore new file mode 100644 index 00000000..8a729c79 --- /dev/null +++ b/packages/trustix-nix-r13y-web/.prettierignore @@ -0,0 +1,5 @@ +build +coverage +dist +result +src/api/*.ts diff --git a/packages/trustix-nix-r13y-web/.prettierrc.json b/packages/trustix-nix-r13y-web/.prettierrc.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/packages/trustix-nix-r13y-web/.prettierrc.json @@ -0,0 +1 @@ +{} diff --git a/packages/trustix-nix-r13y-web/package-lock.json b/packages/trustix-nix-r13y-web/package-lock.json index 9822548a..8073c8fd 100644 --- a/packages/trustix-nix-r13y-web/package-lock.json +++ b/packages/trustix-nix-r13y-web/package-lock.json @@ -12,7 +12,8 @@ "@bufbuild/connect-web": "^0.2.1", "@bufbuild/protobuf": "^0.1.1", "@solidjs/router": "^0.5.0", - "solid-js": "^1.5.1" + "solid-js": "^1.5.1", + "theme-change": "^2.2.0" }, "devDependencies": { "@bufbuild/protoc-gen-connect-web": "^0.2.1", @@ -20,10 +21,10 @@ "autoprefixer": "^10.4.8", "daisyui": "^2.31.0", "postcss": "^8.4.16", + "prettier": "2.7.1", "tailwindcss": "^3.1.8", "typescript": "^4.8.2", "vite": "^3.0.9", - "vite-plugin-rewrite-all": "^1.0.0", "vite-plugin-solid": "^2.3.0" } }, @@ -1000,15 +1001,6 @@ "node": ">=7.0.0" } }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -2005,6 +1997,21 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -2236,6 +2243,11 @@ "postcss": "^8.0.9" } }, + "node_modules/theme-change": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/theme-change/-/theme-change-2.2.0.tgz", + "integrity": "sha512-vvgZEEfmH3yZGq2bWHyzs2AOG1SRfNnCvWbEnPzGpdvvCmAWtOsEdg4H6k/OMapegG+LEQvQ76tQoN9B+FT7rg==" + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -2349,21 +2361,6 @@ } } }, - "node_modules/vite-plugin-rewrite-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vite-plugin-rewrite-all/-/vite-plugin-rewrite-all-1.0.0.tgz", - "integrity": "sha512-XScNU1F73ImgsNQUuDTBd09r8nSz8Umr5PVhfmGJ8FTrFvfcci+P1pD7lT5BIdua75ZoNZGfHgdNYwnZB4cszQ==", - "dev": true, - "dependencies": { - "connect-history-api-fallback": "^1.6.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "vite": "^2.0.0 || ^3.0.0" - } - }, "node_modules/vite-plugin-solid": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.3.9.tgz", @@ -3087,12 +3084,6 @@ "simple-swizzle": "^0.2.2" } }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", @@ -3700,6 +3691,12 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3850,6 +3847,11 @@ "resolve": "^1.22.1" } }, + "theme-change": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/theme-change/-/theme-change-2.2.0.tgz", + "integrity": "sha512-vvgZEEfmH3yZGq2bWHyzs2AOG1SRfNnCvWbEnPzGpdvvCmAWtOsEdg4H6k/OMapegG+LEQvQ76tQoN9B+FT7rg==" + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3906,15 +3908,6 @@ "rollup": "~2.78.0" } }, - "vite-plugin-rewrite-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vite-plugin-rewrite-all/-/vite-plugin-rewrite-all-1.0.0.tgz", - "integrity": "sha512-XScNU1F73ImgsNQUuDTBd09r8nSz8Umr5PVhfmGJ8FTrFvfcci+P1pD7lT5BIdua75ZoNZGfHgdNYwnZB4cszQ==", - "dev": true, - "requires": { - "connect-history-api-fallback": "^1.6.0" - } - }, "vite-plugin-solid": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.3.9.tgz", diff --git a/packages/trustix-nix-r13y-web/package.json b/packages/trustix-nix-r13y-web/package.json index ef75ac3a..436acf62 100644 --- a/packages/trustix-nix-r13y-web/package.json +++ b/packages/trustix-nix-r13y-web/package.json @@ -14,6 +14,7 @@ "autoprefixer": "^10.4.8", "daisyui": "^2.31.0", "postcss": "^8.4.16", + "prettier": "2.7.1", "tailwindcss": "^3.1.8", "typescript": "^4.8.2", "vite": "^3.0.9", @@ -23,6 +24,7 @@ "@bufbuild/connect-web": "^0.2.1", "@bufbuild/protobuf": "^0.1.1", "@solidjs/router": "^0.5.0", - "solid-js": "^1.5.1" + "solid-js": "^1.5.1", + "theme-change": "^2.2.0" } } diff --git a/packages/trustix-nix-r13y-web/postcss.config.js b/packages/trustix-nix-r13y-web/postcss.config.js index 4be16405..87233a42 100644 --- a/packages/trustix-nix-r13y-web/postcss.config.js +++ b/packages/trustix-nix-r13y-web/postcss.config.js @@ -1,5 +1,5 @@ module.exports = { - purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], + purge: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"], plugins: { tailwindcss: {}, autoprefixer: {}, diff --git a/packages/trustix-nix-r13y-web/src/App.tsx b/packages/trustix-nix-r13y-web/src/App.tsx index 537815a6..fcbb7122 100644 --- a/packages/trustix-nix-r13y-web/src/App.tsx +++ b/packages/trustix-nix-r13y-web/src/App.tsx @@ -1,24 +1,28 @@ -import type { Component } from 'solid-js'; -import { lazy } from 'solid-js'; -import { Routes, Route, A } from "@solidjs/router" +import type { Component } from "solid-js"; +import { lazy, onMount } from "solid-js"; +import { Routes, Route, A } from "@solidjs/router"; +import { themeChange } from "theme-change"; -const Derivation = lazy(() => import("./pages/drv")) +const Derivation = lazy(() => import("./pages/drv")); const App: Component = () => { + onMount(async () => { + themeChange(); + }); + return ( <> -

Trustix r13y

- - - - - - +
+ + + + +
); }; diff --git a/packages/trustix-nix-r13y-web/src/index.css b/packages/trustix-nix-r13y-web/src/index.css index b5c61c95..bee5a828 100644 --- a/packages/trustix-nix-r13y-web/src/index.css +++ b/packages/trustix-nix-r13y-web/src/index.css @@ -1,3 +1,7 @@ @tailwind base; @tailwind components; @tailwind utilities; + +.drv-card { + width: 52rem; +} diff --git a/packages/trustix-nix-r13y-web/src/index.tsx b/packages/trustix-nix-r13y-web/src/index.tsx index 1e1e04e3..9b63ef0a 100644 --- a/packages/trustix-nix-r13y-web/src/index.tsx +++ b/packages/trustix-nix-r13y-web/src/index.tsx @@ -1,9 +1,9 @@ /* @refresh reload */ -import './index.css'; -import { render } from 'solid-js/web'; +import "./index.css"; +import { render } from "solid-js/web"; import { Router } from "@solidjs/router"; -import App from './App'; +import App from "./App"; render( () => ( @@ -11,5 +11,5 @@ render( ), - document.getElementById('root') as HTMLElement -) + document.getElementById("root") as HTMLElement +); diff --git a/packages/trustix-nix-r13y-web/src/lib.tsx b/packages/trustix-nix-r13y-web/src/lib.tsx new file mode 100644 index 00000000..a4c0ee7a --- /dev/null +++ b/packages/trustix-nix-r13y-web/src/lib.tsx @@ -0,0 +1,21 @@ +export class NameValuePair { + public name: string; + public value: T; + + constructor(name: string, value: T) { + this.name = name; + this.value = value; + } + + // Turn a map of objects into an array of name value pairs + public static fromMap(values: { [key: string]: T }): NameValuePair[] { + let arr: Array = []; + + Object.keys(values).forEach((key) => { + const value = values[key]; + arr.push(new NameValuePair(key, value)); + }); + + return arr; + } +} diff --git a/packages/trustix-nix-r13y-web/src/pages/drv.tsx b/packages/trustix-nix-r13y-web/src/pages/drv.tsx index 38eb703a..c8fd06c6 100644 --- a/packages/trustix-nix-r13y-web/src/pages/drv.tsx +++ b/packages/trustix-nix-r13y-web/src/pages/drv.tsx @@ -7,121 +7,194 @@ import { Show, Suspense, } from "solid-js"; -import { - Routes, - Route, - useParams, - useSearchParams, -} from "@solidjs/router"; +import { Routes, Route, useParams, useSearchParams, A } from "@solidjs/router"; import { createConnectTransport, createPromiseClient, -} from '@bufbuild/connect-web' - +} from "@bufbuild/connect-web"; -import { ReproducibilityAPI } from '../api/api_connectweb' +import { ReproducibilityAPI } from "../api/api_connectweb"; import { DerivationReproducibilityRequest, DerivationReproducibilityResponse, DerivationReproducibilityResponse_Derivation, -} from '../api/api_pb' -import { - NameValuePair, -} from '../lib' - +} from "../api/api_pb"; +import { NameValuePair } from "../lib"; -type DerivationReproducibilityPaths = { [key: string]: DerivationReproducibilityResponse_Derivation } +type DerivationReproducibilityPaths = { + [key: string]: DerivationReproducibilityResponse_Derivation; +}; -const loading = ( -

Loading...

-) +const loading =

Loading...

; -const fetchDerivationReproducibility = async (drvPath): DerivationReproducibilityResponse => { +const fetchDerivationReproducibility = async ( + drvPath +): DerivationReproducibilityResponse => { const client = createPromiseClient( ReproducibilityAPI, createConnectTransport({ - baseUrl: '/api', + baseUrl: "/api", }) - ) + ); const req = new DerivationReproducibilityRequest({ DrvPath: drvPath, - }) + }); - return await client.derivationReproducibility(req) -} + return await client.derivationReproducibility(req); +}; -const renderPaths = (paths: DerivationReproducibilityPaths): Component => { - const derivations = NameValuePair.fromMap(paths) +const renderPaths = ( + title: string, + paths: DerivationReproducibilityPaths +): Component => { + if (Object.keys(paths).length == 0) { + return <>; + } + + const derivations = NameValuePair.fromMap(paths); return ( -
    - {({name, value}) => { - const drvPath = name - const drvOutputs = NameValuePair.fromMap(value.Outputs) - - return ( -
    -

    {drvPath}

    -
      - {({name, value}) => { - const output = name - const storePath = value.StorePath - - const outputHashes = NameValuePair.fromMap(value.OutputHashes) - - console.log(outputHashes) - - return ( -
    • -

      {output}

      -
    • - ) - }}
      -
    -
    - ) - }}
    -
- ) -} + <> +
+ +
+

{title}

+ +
    + + {({ name, value }) => { + const drvPath = name; + const drvOutputs = NameValuePair.fromMap(value.Outputs); + + return ( +
  • +
    +
    + +

    + {drvPath} +

    +
    + +
      + + {({ name, value }) => { + const output = name; + const storePath = value.StorePath; + + // Sort output hashes according to popularity + const outputHashes = NameValuePair.fromMap( + value.OutputHashes + ).sort( + (a, b) => + a.value.LogIDs.length > b.value.LogIDs.length + ); + + return ( +
    • + + + {output} + +   + + ({storePath}) + + + +
        + + {({ name, value }) => { + const outputNarinfoHash = name; + const logIDs: Array = + value.LogIDs.map(Number); + + return ( +
      • +

        + {outputNarinfoHash}: {logIDs} +

        +
      • + ); + }} +
        +
      +
    • + ); + }} +
      +
    +
    +
    +
  • + ); + }} +
    +
+
+ + ); +}; const Derivation: Component = () => { - const [searchParams, setSearchParams] = useSearchParams() - const [drvReprod] = createResource(() => searchParams.storePath, fetchDerivationReproducibility); + const [searchParams, setSearchParams] = useSearchParams(); + const [drvReprod] = createResource( + () => searchParams.storePath, + fetchDerivationReproducibility + ); return ( <> - -
-

{searchParams.storePath}

-
- - -

Unreproduced paths

- {renderPaths(drvReprod()?.UnreproducedPaths)} -
- - -

Reproduced paths

- {renderPaths(drvReprod()?.ReproducedPaths)} -
- - -

Unknown paths (only built by one log)

- {renderPaths(drvReprod()?.UnknownPaths)} -
- - -

Missing paths (not built by any known log)

- {renderPaths(drvReprod()?.MissingPaths)} -
- -
-
{JSON.stringify(drvReprod(), null, 2)}
-
-
+
+

+ {searchParams.storePath} +

+ + + + {renderPaths("Unreproduced paths", drvReprod()?.UnreproducedPaths)} + + + + {renderPaths("Reproduced paths", drvReprod()?.ReproducedPaths)} + + + + {renderPaths( + "Unknown paths (only built by one log)", + drvReprod()?.UnknownPaths + )} + + + + {renderPaths( + "Missing paths (not built by any known log)", + drvReprod()?.MissingPaths + )} + + +
); }; diff --git a/packages/trustix-nix-r13y-web/tailwind.config.js b/packages/trustix-nix-r13y-web/tailwind.config.js index 433e7e0d..76cbbcf0 100644 --- a/packages/trustix-nix-r13y-web/tailwind.config.js +++ b/packages/trustix-nix-r13y-web/tailwind.config.js @@ -1,14 +1,12 @@ /** @type {import('tailwindcss').Config} */ module.exports = { content: [ - './index.html', - './src/**/*.{js,ts,jsx,tsx,css,md,mdx,html,json,scss}', + "./index.html", + "./src/**/*.{js,ts,jsx,tsx,css,md,mdx,html,json,scss}", ], - darkMode: 'class', + darkMode: "class", theme: { extend: {}, }, - plugins: [ - require('daisyui'), - ], + plugins: [require("daisyui")], }; diff --git a/packages/trustix-nix-r13y-web/vite.config.ts b/packages/trustix-nix-r13y-web/vite.config.ts index af1daee3..f6a0a325 100644 --- a/packages/trustix-nix-r13y-web/vite.config.ts +++ b/packages/trustix-nix-r13y-web/vite.config.ts @@ -1,22 +1,20 @@ -import { defineConfig } from 'vite'; -import solidPlugin from 'vite-plugin-solid'; +import { defineConfig } from "vite"; +import solidPlugin from "vite-plugin-solid"; export default defineConfig({ - plugins: [ - solidPlugin(), - ], + plugins: [solidPlugin()], server: { port: 8091, proxy: { - '/api': { - target: 'http://127.0.0.1:8090', + "/api": { + target: "http://127.0.0.1:8090", changeOrigin: true, - rewrite: (path) => path.replace(/^\/api/, '') + rewrite: (path) => path.replace(/^\/api/, ""), }, }, }, build: { - target: 'esnext', + target: "esnext", }, clearScreen: false, }); From 6c2f3f5f61581018a4259f67671b448278c1f527 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Thu, 13 Oct 2022 23:08:58 +1300 Subject: [PATCH 20/49] trustix-nix-r13y-web: factor out subparts of the page into separate functions --- .../trustix-nix-r13y-web/src/pages/drv.tsx | 167 +++++++++--------- 1 file changed, 80 insertions(+), 87 deletions(-) diff --git a/packages/trustix-nix-r13y-web/src/pages/drv.tsx b/packages/trustix-nix-r13y-web/src/pages/drv.tsx index c8fd06c6..b91f7f96 100644 --- a/packages/trustix-nix-r13y-web/src/pages/drv.tsx +++ b/packages/trustix-nix-r13y-web/src/pages/drv.tsx @@ -19,6 +19,8 @@ import { DerivationReproducibilityRequest, DerivationReproducibilityResponse, DerivationReproducibilityResponse_Derivation, + DerivationReproducibilityResponse_DerivationOutput, + DerivationReproducibilityResponse_DerivationOutputHash, } from "../api/api_pb"; import { NameValuePair } from "../lib"; @@ -45,6 +47,79 @@ const fetchDerivationReproducibility = async ( return await client.derivationReproducibility(req); }; +const renderDerivationOutput = ( + output: string, + storePath: string, + outputHashes: NameValuePair[] +): Component => { + return ( + <> +
+
+

+ {output} +

+

{storePath}

+
+
+ +
    + + {({ name, value }) => { + const outputNarinfoHash = name; + const logIDs: Array = value.LogIDs.map(Number); + + return ( +
  • +

    + {outputNarinfoHash}: {logIDs} +

    +
  • + ); + }} +
    +
+ + ); +}; + +const renderDerivationOutputs = ( + drvPath: string, + drvOutputs: NameValuePair +): Component => { + return ( + <> +
+
+ +

+ {drvPath} +

+
+ +
+ + {({ name, value }) => + renderDerivationOutput( + name, + value.StorePath, + NameValuePair.fromMap(value.OutputHashes).sort( + (a, b) => a.value.LogIDs.length > b.value.LogIDs.length + ) + ) + } + +
+
+
+ + ); +}; + const renderPaths = ( title: string, paths: DerivationReproducibilityPaths @@ -62,93 +137,11 @@ const renderPaths = (

{title}

-
    - - {({ name, value }) => { - const drvPath = name; - const drvOutputs = NameValuePair.fromMap(value.Outputs); - - return ( -
  • -
    -
    - -

    - {drvPath} -

    -
    - -
      - - {({ name, value }) => { - const output = name; - const storePath = value.StorePath; - - // Sort output hashes according to popularity - const outputHashes = NameValuePair.fromMap( - value.OutputHashes - ).sort( - (a, b) => - a.value.LogIDs.length > b.value.LogIDs.length - ); - - return ( -
    • - - - {output} - -   - - ({storePath}) - - - -
        - - {({ name, value }) => { - const outputNarinfoHash = name; - const logIDs: Array = - value.LogIDs.map(Number); - - return ( -
      • -

        - {outputNarinfoHash}: {logIDs} -

        -
      • - ); - }} -
        -
      -
    • - ); - }} -
      -
    -
    -
    -
  • - ); - }} -
    -
+ + {({ name, value }) => + renderDerivationOutputs(name, NameValuePair.fromMap(value.Outputs)) + } +
); From 5dd51dba3d09b096d262c970becbde213cc2eb77 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 14 Oct 2022 03:17:44 +1300 Subject: [PATCH 21/49] trustix-nix-r13y-web: add table with output hashes --- .../trustix-nix-r13y-web/src/pages/drv.tsx | 154 +++++++++++++++--- 1 file changed, 131 insertions(+), 23 deletions(-) diff --git a/packages/trustix-nix-r13y-web/src/pages/drv.tsx b/packages/trustix-nix-r13y-web/src/pages/drv.tsx index b91f7f96..d5d6e796 100644 --- a/packages/trustix-nix-r13y-web/src/pages/drv.tsx +++ b/packages/trustix-nix-r13y-web/src/pages/drv.tsx @@ -52,44 +52,137 @@ const renderDerivationOutput = ( storePath: string, outputHashes: NameValuePair[] ): Component => { + // Keeps track of which checkboxes (ie active diffs) are checked + const checkedNarinfoHashes = new Set(); + + const renderOutputHash = ( + outputNarinfoHash: string, + logIDs: Array + ): Component => { + // Args passed to the input checkbox + const checkboxArgs = {}; + + // Hide the compare checkbox if there is one or less output hash,(nohing to compare) + if (logIDs.length < 2) { + checkboxArgs["disabled"] = "disabled"; + } + + const onChecked = (e) => { + if (e.target.checked) { + checkedNarinfoHashes.add(outputNarinfoHash); + } else { + checkedNarinfoHashes.delete(outputNarinfoHash); + } + } + + return ( + <> + + + + + +
+
+
{outputNarinfoHash}
+
+
+ + + + {(logID) => ( + <> + {logID} +
+ + )} +
+ + + + ); + }; + + const onNarinfoClicked = (e) => { + const checked = checkedNarinfoHashes; + + if (checked.size == 0) { + alert("No Narinfo hashes selected"); + return; + } else if (checked.size == 1 || checked.size > 2) { + alert( + "Invalid number of Narinfo hashes selected, we can only compare 2 at a time" + ); + return; + } + + const [a, b] = checked; + + alert("TODO: Redirect to diff view") + } + return ( <> -
+

{output}

{storePath}

+ + {outputHashes.length > 0 && ( + <> +
+ + + + + + + + + + + {({ name, value }) => + renderOutputHash(name, value.LogIDs.map(Number)) + } + + +
Narinfo hashLogs
+ + {/* show the compare button if there are more than one output hash for the same output */} + {outputHashes.length > 1 && ( + + )} +
+ + )}
- -
    - - {({ name, value }) => { - const outputNarinfoHash = name; - const logIDs: Array = value.LogIDs.map(Number); - - return ( -
  • -

    - {outputNarinfoHash}: {logIDs} -

    -
  • - ); - }} -
    -
); }; const renderDerivationOutputs = ( drvPath: string, - drvOutputs: NameValuePair + cardBackground: string, + drvOutputs: NameValuePair[] ): Component => { return ( <> -
+
@@ -166,16 +264,25 @@ const Derivation: Component = () => { - {renderPaths("Unreproduced paths", drvReprod()?.UnreproducedPaths)} + {renderPaths( + "Unreproduced paths", + "bg-error", + drvReprod()?.UnreproducedPaths + )} - {renderPaths("Reproduced paths", drvReprod()?.ReproducedPaths)} + {renderPaths( + "Reproduced paths", + "bg-success", + drvReprod()?.ReproducedPaths + )} {renderPaths( "Unknown paths (only built by one log)", + "bg-warning", drvReprod()?.UnknownPaths )} @@ -183,6 +290,7 @@ const Derivation: Component = () => { {renderPaths( "Missing paths (not built by any known log)", + "bg-base-100", drvReprod()?.MissingPaths )} From 74a9e85bdd53e8d72b1ac52f028653ac2a12878a Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 14 Oct 2022 14:28:10 +1300 Subject: [PATCH 22/49] trustix-nix-r13y(-web): Add human friendly log names to log list --- .../trustix-nix-r13y-web/.prettierrc.json | 4 +- .../trustix-nix-r13y-web/src/api/api_pb.ts | 55 ++- packages/trustix-nix-r13y-web/src/index.tsx | 2 +- .../trustix-nix-r13y-web/src/pages/drv.tsx | 54 ++- .../trustix-nix-r13y/examples/config.toml | 3 + .../trustix-nix-r13y/internal/cmd/serve.go | 2 +- .../internal/config/config.go | 9 +- packages/trustix-nix-r13y/internal/db/db.go | 4 - .../internal/db/derivations.sql.go | 4 - .../trustix-nix-r13y/internal/db/eval.sql.go | 4 - .../trustix-nix-r13y/internal/db/logs.sql.go | 4 - .../trustix-nix-r13y/internal/db/models.go | 4 - .../internal/db/reprod.sql.go | 7 +- .../internal/db/suggest.sql.go | 4 - .../trustix-nix-r13y/internal/dbcache/db.go | 4 - .../internal/dbcache/diffoscope.sql.go | 4 - .../internal/dbcache/models.go | 4 - .../trustix-nix-r13y/internal/server/api.go | 48 +- .../trustix-nix-r13y/reprod-api/api.pb.go | 420 +++++++++++------- .../trustix-nix-r13y/reprod-api/api.proto | 9 +- .../trustix-nix-r13y/sql/queries/reprod.sql | 3 +- 21 files changed, 400 insertions(+), 252 deletions(-) diff --git a/packages/trustix-nix-r13y-web/.prettierrc.json b/packages/trustix-nix-r13y-web/.prettierrc.json index 0967ef42..bf357fbb 100644 --- a/packages/trustix-nix-r13y-web/.prettierrc.json +++ b/packages/trustix-nix-r13y-web/.prettierrc.json @@ -1 +1,3 @@ -{} +{ + "trailingComma": "all" +} diff --git a/packages/trustix-nix-r13y-web/src/api/api_pb.ts b/packages/trustix-nix-r13y-web/src/api/api_pb.ts index e4a821e1..f6f5165b 100644 --- a/packages/trustix-nix-r13y-web/src/api/api_pb.ts +++ b/packages/trustix-nix-r13y-web/src/api/api_pb.ts @@ -76,6 +76,11 @@ export class DerivationReproducibilityResponse extends Message Logs = 6; + */ + Logs: { [key: string]: Log } = {}; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -89,6 +94,7 @@ export class DerivationReproducibilityResponse extends Message): DerivationReproducibilityResponse { @@ -113,9 +119,9 @@ export class DerivationReproducibilityResponse extends Message { /** - * @generated from field: repeated int64 LogIDs = 1; + * @generated from field: repeated string LogIDs = 1; */ - LogIDs: bigint[] = []; + LogIDs: string[] = []; constructor(data?: PartialMessage) { super(); @@ -125,7 +131,7 @@ export class DerivationReproducibilityResponse_DerivationOutputHash extends Mess static readonly runtime = proto3; static readonly typeName = "reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "LogIDs", kind: "scalar", T: 3 /* ScalarType.INT64 */, repeated: true }, + { no: 1, name: "LogIDs", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): DerivationReproducibilityResponse_DerivationOutputHash { @@ -233,6 +239,49 @@ export class DerivationReproducibilityResponse_Derivation extends Message { + /** + * @generated from field: string LogID = 1; + */ + LogID = ""; + + /** + * @generated from field: string Name = 2; + */ + Name = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.Log"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "LogID", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "Name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Log { + return new Log().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Log { + return new Log().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Log { + return new Log().fromJsonString(jsonString, options); + } + + static equals(a: Log | PlainMessage | undefined, b: Log | PlainMessage | undefined): boolean { + return proto3.util.equals(Log, a, b); + } +} + /** * @generated from message reprod_api.v1.AttrReproducibilityTimeSeriesPoint */ diff --git a/packages/trustix-nix-r13y-web/src/index.tsx b/packages/trustix-nix-r13y-web/src/index.tsx index 9b63ef0a..2883ab2e 100644 --- a/packages/trustix-nix-r13y-web/src/index.tsx +++ b/packages/trustix-nix-r13y-web/src/index.tsx @@ -11,5 +11,5 @@ render( ), - document.getElementById("root") as HTMLElement + document.getElementById("root") as HTMLElement, ); diff --git a/packages/trustix-nix-r13y-web/src/pages/drv.tsx b/packages/trustix-nix-r13y-web/src/pages/drv.tsx index d5d6e796..37448b1d 100644 --- a/packages/trustix-nix-r13y-web/src/pages/drv.tsx +++ b/packages/trustix-nix-r13y-web/src/pages/drv.tsx @@ -27,17 +27,18 @@ import { NameValuePair } from "../lib"; type DerivationReproducibilityPaths = { [key: string]: DerivationReproducibilityResponse_Derivation; }; +type Logs = { [key: string]: Log }; const loading =

Loading...

; const fetchDerivationReproducibility = async ( - drvPath + drvPath, ): DerivationReproducibilityResponse => { const client = createPromiseClient( ReproducibilityAPI, createConnectTransport({ baseUrl: "/api", - }) + }), ); const req = new DerivationReproducibilityRequest({ @@ -50,14 +51,15 @@ const fetchDerivationReproducibility = async ( const renderDerivationOutput = ( output: string, storePath: string, - outputHashes: NameValuePair[] + outputHashes: NameValuePair[], + logs: Logs, ): Component => { // Keeps track of which checkboxes (ie active diffs) are checked const checkedNarinfoHashes = new Set(); const renderOutputHash = ( outputNarinfoHash: string, - logIDs: Array + logIDs: Array, ): Component => { // Args passed to the input checkbox const checkboxArgs = {}; @@ -73,7 +75,7 @@ const renderDerivationOutput = ( } else { checkedNarinfoHashes.delete(outputNarinfoHash); } - } + }; return ( <> @@ -99,7 +101,9 @@ const renderDerivationOutput = ( {(logID) => ( <> - {logID} + + {logs[logID].Name} +
)} @@ -118,15 +122,15 @@ const renderDerivationOutput = ( return; } else if (checked.size == 1 || checked.size > 2) { alert( - "Invalid number of Narinfo hashes selected, we can only compare 2 at a time" + "Invalid number of Narinfo hashes selected, we can only compare 2 at a time", ); return; } const [a, b] = checked; - alert("TODO: Redirect to diff view") - } + alert("TODO: Redirect to diff view"); + }; return ( <> @@ -151,7 +155,7 @@ const renderDerivationOutput = ( {({ name, value }) => - renderOutputHash(name, value.LogIDs.map(Number)) + renderOutputHash(name, value.LogIDs) } @@ -178,7 +182,8 @@ const renderDerivationOutput = ( const renderDerivationOutputs = ( drvPath: string, cardBackground: string, - drvOutputs: NameValuePair[] + drvOutputs: NameValuePair[], + logs: Logs, ): Component => { return ( <> @@ -186,7 +191,7 @@ const renderDerivationOutputs = (

@@ -201,8 +206,9 @@ const renderDerivationOutputs = ( name, value.StorePath, NameValuePair.fromMap(value.OutputHashes).sort( - (a, b) => a.value.LogIDs.length > b.value.LogIDs.length - ) + (a, b) => a.value.LogIDs.length > b.value.LogIDs.length, + ), + logs, ) } @@ -216,7 +222,8 @@ const renderDerivationOutputs = ( const renderPaths = ( title: string, cardBackground: string, - paths: DerivationReproducibilityPaths + paths: DerivationReproducibilityPaths, + logs: Logs, ): Component => { if (Object.keys(paths).length == 0) { return <>; @@ -236,7 +243,8 @@ const renderPaths = ( renderDerivationOutputs( name, cardBackground, - NameValuePair.fromMap(value.Outputs) + NameValuePair.fromMap(value.Outputs), + logs, ) } @@ -249,7 +257,7 @@ const Derivation: Component = () => { const [searchParams, setSearchParams] = useSearchParams(); const [drvReprod] = createResource( () => searchParams.storePath, - fetchDerivationReproducibility + fetchDerivationReproducibility, ); return ( @@ -267,7 +275,8 @@ const Derivation: Component = () => { {renderPaths( "Unreproduced paths", "bg-error", - drvReprod()?.UnreproducedPaths + drvReprod()?.UnreproducedPaths, + drvReprod()?.Logs, )} @@ -275,7 +284,8 @@ const Derivation: Component = () => { {renderPaths( "Reproduced paths", "bg-success", - drvReprod()?.ReproducedPaths + drvReprod()?.ReproducedPaths, + drvReprod()?.Logs, )} @@ -283,7 +293,8 @@ const Derivation: Component = () => { {renderPaths( "Unknown paths (only built by one log)", "bg-warning", - drvReprod()?.UnknownPaths + drvReprod()?.UnknownPaths, + drvReprod()?.Logs, )} @@ -291,7 +302,8 @@ const Derivation: Component = () => { {renderPaths( "Missing paths (not built by any known log)", "bg-base-100", - drvReprod()?.MissingPaths + drvReprod()?.MissingPaths, + drvReprod()?.Logs, )} diff --git a/packages/trustix-nix-r13y/examples/config.toml b/packages/trustix-nix-r13y/examples/config.toml index 184cc19f..26f95cd3 100644 --- a/packages/trustix-nix-r13y/examples/config.toml +++ b/packages/trustix-nix-r13y/examples/config.toml @@ -2,6 +2,9 @@ eval_index = 3600 log_index = 900 +[lognames] +e0f263745e4e3ab07ab5275b00b44f594e0b6d2bd35892a8ebd10a7f86322eb7 = "cache.nixos.org" + [channels.hydra.nixos-unstable] base_url = "https://hydra.nixos.org" jobset = "trunk-combined" diff --git a/packages/trustix-nix-r13y/internal/cmd/serve.go b/packages/trustix-nix-r13y/internal/cmd/serve.go index a259aefd..2c10055d 100644 --- a/packages/trustix-nix-r13y/internal/cmd/serve.go +++ b/packages/trustix-nix-r13y/internal/cmd/serve.go @@ -115,7 +115,7 @@ var serveCommand = &cobra.Command{ defer evalIndexCron.Close() } - apiServer := server.NewAPIServer(dbs.dbRO, dbs.cacheDbRW, dbs.cacheDbRO, client) + apiServer := server.NewAPIServer(dbs.dbRO, dbs.cacheDbRW, dbs.cacheDbRO, client, conf.Lognames) errChan := make(chan error) diff --git a/packages/trustix-nix-r13y/internal/config/config.go b/packages/trustix-nix-r13y/internal/config/config.go index 60d87176..3d9fa485 100644 --- a/packages/trustix-nix-r13y/internal/config/config.go +++ b/packages/trustix-nix-r13y/internal/config/config.go @@ -16,8 +16,9 @@ import ( ) type Config struct { - Channels *Channels `toml:"channels" json:"channels"` - Cron *Cron `toml:"cron" json:"cron"` + Channels *Channels `toml:"channels" json:"channels"` + Cron *Cron `toml:"cron" json:"cron"` + Lognames map[string]string `toml:"lognames" json:"lognames"` } func (c *Config) init() { @@ -30,6 +31,10 @@ func (c *Config) init() { c.Channels = &Channels{} } c.Channels.init() + + if c.Lognames == nil { + c.Lognames = make(map[string]string) + } } func (c *Config) Validate() error { diff --git a/packages/trustix-nix-r13y/internal/db/db.go b/packages/trustix-nix-r13y/internal/db/db.go index 17c2f768..21fc4346 100644 --- a/packages/trustix-nix-r13y/internal/db/db.go +++ b/packages/trustix-nix-r13y/internal/db/db.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-r13y/internal/db/derivations.sql.go b/packages/trustix-nix-r13y/internal/db/derivations.sql.go index e82fc148..64a9e82b 100644 --- a/packages/trustix-nix-r13y/internal/db/derivations.sql.go +++ b/packages/trustix-nix-r13y/internal/db/derivations.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-r13y/internal/db/eval.sql.go b/packages/trustix-nix-r13y/internal/db/eval.sql.go index 59712e08..36b68500 100644 --- a/packages/trustix-nix-r13y/internal/db/eval.sql.go +++ b/packages/trustix-nix-r13y/internal/db/eval.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-r13y/internal/db/logs.sql.go b/packages/trustix-nix-r13y/internal/db/logs.sql.go index e90e851b..2d2e5ebc 100644 --- a/packages/trustix-nix-r13y/internal/db/logs.sql.go +++ b/packages/trustix-nix-r13y/internal/db/logs.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-r13y/internal/db/models.go b/packages/trustix-nix-r13y/internal/db/models.go index d1c3de1e..0637f2f9 100644 --- a/packages/trustix-nix-r13y/internal/db/models.go +++ b/packages/trustix-nix-r13y/internal/db/models.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-r13y/internal/db/reprod.sql.go b/packages/trustix-nix-r13y/internal/db/reprod.sql.go index 31416b19..aa699d6d 100644 --- a/packages/trustix-nix-r13y/internal/db/reprod.sql.go +++ b/packages/trustix-nix-r13y/internal/db/reprod.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 @@ -20,13 +16,14 @@ SELECT drvoutput.output, drvoutput.store_path, json_group_object( - drvoutputresult.log_id, + log.log_id, drvoutputresult.output_hash ) AS output_results FROM derivationoutput AS drvoutput JOIN derivation drv ON drv.id = drvoutput.derivation_id LEFT JOIN derivationoutputresult drvoutputresult ON drvoutputresult.store_path = drvoutput.store_path + LEFT JOIN log log ON log.id = drvoutputresult.log_id JOIN derivationrefrecursive refs_recurse ON refs_recurse.drv_id = drvoutput.derivation_id JOIN derivation referrer_drv ON referrer_drv.id = refs_recurse.referrer_id WHERE diff --git a/packages/trustix-nix-r13y/internal/db/suggest.sql.go b/packages/trustix-nix-r13y/internal/db/suggest.sql.go index 1bc9059e..47e07b25 100644 --- a/packages/trustix-nix-r13y/internal/db/suggest.sql.go +++ b/packages/trustix-nix-r13y/internal/db/suggest.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-r13y/internal/dbcache/db.go b/packages/trustix-nix-r13y/internal/dbcache/db.go index ae0f8847..37971dc7 100644 --- a/packages/trustix-nix-r13y/internal/dbcache/db.go +++ b/packages/trustix-nix-r13y/internal/dbcache/db.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-r13y/internal/dbcache/diffoscope.sql.go b/packages/trustix-nix-r13y/internal/dbcache/diffoscope.sql.go index 1f4c23a4..bc6b819c 100644 --- a/packages/trustix-nix-r13y/internal/dbcache/diffoscope.sql.go +++ b/packages/trustix-nix-r13y/internal/dbcache/diffoscope.sql.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-r13y/internal/dbcache/models.go b/packages/trustix-nix-r13y/internal/dbcache/models.go index 1e6046d8..02bb3cc0 100644 --- a/packages/trustix-nix-r13y/internal/dbcache/models.go +++ b/packages/trustix-nix-r13y/internal/dbcache/models.go @@ -1,7 +1,3 @@ -// Copyright © 2020-2022 The Trustix Authors -// -// SPDX-License-Identifier: GPL-3.0-only - // Code generated by sqlc. DO NOT EDIT. // versions: // sqlc v1.15.0 diff --git a/packages/trustix-nix-r13y/internal/server/api.go b/packages/trustix-nix-r13y/internal/server/api.go index df13530c..4bf437c2 100644 --- a/packages/trustix-nix-r13y/internal/server/api.go +++ b/packages/trustix-nix-r13y/internal/server/api.go @@ -12,6 +12,7 @@ import ( "time" connect "github.com/bufbuild/connect-go" + "github.com/nix-community/trustix/packages/go-lib/set" idb "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/db" "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/future" "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/refcount" @@ -35,22 +36,25 @@ type APIServer struct { cacheDbRo *sql.DB cacheDbRw *sql.DB + logNames map[string]string + diffExecutor *future.KeyedFutures[*pb.DiffResponse] downloadExecutor *future.KeyedFutures[*refcount.RefCountedValue[*narDownload]] } -func NewAPIServer(db *sql.DB, cacheDB *sql.DB, cacheDBRO *sql.DB, client *client.Client) *APIServer { +func NewAPIServer(db *sql.DB, cacheDB *sql.DB, cacheDBRO *sql.DB, client *client.Client, logNames map[string]string) *APIServer { return &APIServer{ db: db, client: client, cacheDbRw: cacheDB, cacheDbRo: cacheDBRO, + logNames: logNames, diffExecutor: future.NewKeyedFutures[*pb.DiffResponse](), downloadExecutor: future.NewKeyedFutures[*refcount.RefCountedValue[*narDownload]](), } } -func getFirstMapKey(m map[string][]int) string { +func getFirstMapKey(m map[string][]string) string { for k := range m { return k } @@ -58,16 +62,6 @@ func getFirstMapKey(m map[string][]int) string { panic("No key found") } -func toInt64(s []int) []int64 { - x := make([]int64, len(s)) - - for i, v := range s { - x[i] = int64(v) - } - - return x -} - func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect.Request[pb.DerivationReproducibilityRequest]) (*connect.Response[pb.DerivationReproducibilityResponse], error) { msg := req.Msg drvPath := msg.DrvPath @@ -97,9 +91,12 @@ func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect. ReproducedPaths: make(map[string]*respDerivation), UnknownPaths: make(map[string]*respDerivation), UnreproducedPaths: make(map[string]*respDerivation), + Logs: make(map[string]*pb.Log), } - appendOutput := func(drvs map[string]*respDerivation, row idb.GetDerivationReproducibilityRow, outputHashes map[string][]int) { + logIDSet := set.NewSet[string]() + + appendOutput := func(drvs map[string]*respDerivation, row idb.GetDerivationReproducibilityRow, outputHashes map[string][]string) { drv, ok := drvs[row.Drv] if !ok { drv = &respDerivation{ @@ -119,10 +116,15 @@ func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect. for outputHash, logIDs := range outputHashes { out := &respDerivationOutputHash{ - LogIDs: toInt64(logIDs), + LogIDs: logIDs, } drvOutput.OutputHashes[outputHash] = out + + // Collect all log ids used in response so we can aggregate it on the response object later + for _, logID := range logIDs { + logIDSet.Add(logID) + } } drv.Outputs[row.Output] = drvOutput @@ -131,12 +133,12 @@ func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect. for _, row := range rows { // Decode output hashes from aggregate JSON object from SQLite - outputHashes := make(map[string][]int) + outputHashes := make(map[string][]string) { outputHashesString := row.OutputResults.(string) if outputHashesString != nullJSONGroupObjectString { - outputHashesObj := make(map[int]string) + outputHashesObj := make(map[string]string) err = json.Unmarshal([]byte(outputHashesString), &outputHashesObj) if err != nil { @@ -162,6 +164,20 @@ func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect. } } + for _, logID := range logIDSet.Values() { + // Is there a human friendly name configured? + // If there is set that as the name otherwise fall back to the raw ID + name, ok := s.logNames[logID] + if !ok { + name = logID + } + + resp.Logs[logID] = &pb.Log{ + LogID: logID, + Name: name, + } + } + return connect.NewResponse(resp), nil } diff --git a/packages/trustix-nix-r13y/reprod-api/api.pb.go b/packages/trustix-nix-r13y/reprod-api/api.pb.go index 6f832104..ec1015e3 100644 --- a/packages/trustix-nix-r13y/reprod-api/api.pb.go +++ b/packages/trustix-nix-r13y/reprod-api/api.pb.go @@ -81,6 +81,7 @@ type DerivationReproducibilityResponse struct { ReproducedPaths map[string]*DerivationReproducibilityResponse_Derivation `protobuf:"bytes,3,rep,name=ReproducedPaths,proto3" json:"ReproducedPaths,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` UnknownPaths map[string]*DerivationReproducibilityResponse_Derivation `protobuf:"bytes,4,rep,name=UnknownPaths,proto3" json:"UnknownPaths,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` MissingPaths map[string]*DerivationReproducibilityResponse_Derivation `protobuf:"bytes,5,rep,name=MissingPaths,proto3" json:"MissingPaths,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Logs map[string]*Log `protobuf:"bytes,6,rep,name=Logs,proto3" json:"Logs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *DerivationReproducibilityResponse) Reset() { @@ -150,6 +151,68 @@ func (x *DerivationReproducibilityResponse) GetMissingPaths() map[string]*Deriva return nil } +func (x *DerivationReproducibilityResponse) GetLogs() map[string]*Log { + if x != nil { + return x.Logs + } + return nil +} + +type Log struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LogID string `protobuf:"bytes,1,opt,name=LogID,proto3" json:"LogID,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` +} + +func (x *Log) Reset() { + *x = Log{} + if protoimpl.UnsafeEnabled { + mi := &file_reprod_api_api_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Log) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Log) ProtoMessage() {} + +func (x *Log) ProtoReflect() protoreflect.Message { + mi := &file_reprod_api_api_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Log.ProtoReflect.Descriptor instead. +func (*Log) Descriptor() ([]byte, []int) { + return file_reprod_api_api_proto_rawDescGZIP(), []int{2} +} + +func (x *Log) GetLogID() string { + if x != nil { + return x.LogID + } + return "" +} + +func (x *Log) GetName() string { + if x != nil { + return x.Name + } + return "" +} + type AttrReproducibilityTimeSeriesPoint struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -164,7 +227,7 @@ type AttrReproducibilityTimeSeriesPoint struct { func (x *AttrReproducibilityTimeSeriesPoint) Reset() { *x = AttrReproducibilityTimeSeriesPoint{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[2] + mi := &file_reprod_api_api_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -177,7 +240,7 @@ func (x *AttrReproducibilityTimeSeriesPoint) String() string { func (*AttrReproducibilityTimeSeriesPoint) ProtoMessage() {} func (x *AttrReproducibilityTimeSeriesPoint) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[2] + mi := &file_reprod_api_api_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -190,7 +253,7 @@ func (x *AttrReproducibilityTimeSeriesPoint) ProtoReflect() protoreflect.Message // Deprecated: Use AttrReproducibilityTimeSeriesPoint.ProtoReflect.Descriptor instead. func (*AttrReproducibilityTimeSeriesPoint) Descriptor() ([]byte, []int) { - return file_reprod_api_api_proto_rawDescGZIP(), []int{2} + return file_reprod_api_api_proto_rawDescGZIP(), []int{3} } func (x *AttrReproducibilityTimeSeriesPoint) GetEvalID() int64 { @@ -233,7 +296,7 @@ type AttrReproducibilityTimeSeriesResponse struct { func (x *AttrReproducibilityTimeSeriesResponse) Reset() { *x = AttrReproducibilityTimeSeriesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[3] + mi := &file_reprod_api_api_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -246,7 +309,7 @@ func (x *AttrReproducibilityTimeSeriesResponse) String() string { func (*AttrReproducibilityTimeSeriesResponse) ProtoMessage() {} func (x *AttrReproducibilityTimeSeriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[3] + mi := &file_reprod_api_api_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -259,7 +322,7 @@ func (x *AttrReproducibilityTimeSeriesResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use AttrReproducibilityTimeSeriesResponse.ProtoReflect.Descriptor instead. func (*AttrReproducibilityTimeSeriesResponse) Descriptor() ([]byte, []int) { - return file_reprod_api_api_proto_rawDescGZIP(), []int{3} + return file_reprod_api_api_proto_rawDescGZIP(), []int{4} } func (x *AttrReproducibilityTimeSeriesResponse) GetPoints() []*AttrReproducibilityTimeSeriesPoint { @@ -290,7 +353,7 @@ type AttrReproducibilityTimeSeriesRequest struct { func (x *AttrReproducibilityTimeSeriesRequest) Reset() { *x = AttrReproducibilityTimeSeriesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[4] + mi := &file_reprod_api_api_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -303,7 +366,7 @@ func (x *AttrReproducibilityTimeSeriesRequest) String() string { func (*AttrReproducibilityTimeSeriesRequest) ProtoMessage() {} func (x *AttrReproducibilityTimeSeriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[4] + mi := &file_reprod_api_api_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -316,7 +379,7 @@ func (x *AttrReproducibilityTimeSeriesRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use AttrReproducibilityTimeSeriesRequest.ProtoReflect.Descriptor instead. func (*AttrReproducibilityTimeSeriesRequest) Descriptor() ([]byte, []int) { - return file_reprod_api_api_proto_rawDescGZIP(), []int{4} + return file_reprod_api_api_proto_rawDescGZIP(), []int{5} } func (x *AttrReproducibilityTimeSeriesRequest) GetAttr() string { @@ -358,7 +421,7 @@ type SuggestsAttributeRequest struct { func (x *SuggestsAttributeRequest) Reset() { *x = SuggestsAttributeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[5] + mi := &file_reprod_api_api_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -371,7 +434,7 @@ func (x *SuggestsAttributeRequest) String() string { func (*SuggestsAttributeRequest) ProtoMessage() {} func (x *SuggestsAttributeRequest) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[5] + mi := &file_reprod_api_api_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -384,7 +447,7 @@ func (x *SuggestsAttributeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SuggestsAttributeRequest.ProtoReflect.Descriptor instead. func (*SuggestsAttributeRequest) Descriptor() ([]byte, []int) { - return file_reprod_api_api_proto_rawDescGZIP(), []int{5} + return file_reprod_api_api_proto_rawDescGZIP(), []int{6} } func (x *SuggestsAttributeRequest) GetAttrPrefix() string { @@ -405,7 +468,7 @@ type SuggestAttributeResponse struct { func (x *SuggestAttributeResponse) Reset() { *x = SuggestAttributeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[6] + mi := &file_reprod_api_api_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -418,7 +481,7 @@ func (x *SuggestAttributeResponse) String() string { func (*SuggestAttributeResponse) ProtoMessage() {} func (x *SuggestAttributeResponse) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[6] + mi := &file_reprod_api_api_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -431,7 +494,7 @@ func (x *SuggestAttributeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SuggestAttributeResponse.ProtoReflect.Descriptor instead. func (*SuggestAttributeResponse) Descriptor() ([]byte, []int) { - return file_reprod_api_api_proto_rawDescGZIP(), []int{6} + return file_reprod_api_api_proto_rawDescGZIP(), []int{7} } func (x *SuggestAttributeResponse) GetAttrs() []string { @@ -453,7 +516,7 @@ type DiffRequest struct { func (x *DiffRequest) Reset() { *x = DiffRequest{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[7] + mi := &file_reprod_api_api_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -466,7 +529,7 @@ func (x *DiffRequest) String() string { func (*DiffRequest) ProtoMessage() {} func (x *DiffRequest) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[7] + mi := &file_reprod_api_api_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -479,7 +542,7 @@ func (x *DiffRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DiffRequest.ProtoReflect.Descriptor instead. func (*DiffRequest) Descriptor() ([]byte, []int) { - return file_reprod_api_api_proto_rawDescGZIP(), []int{7} + return file_reprod_api_api_proto_rawDescGZIP(), []int{8} } func (x *DiffRequest) GetOutputHash1() string { @@ -507,7 +570,7 @@ type DiffResponse struct { func (x *DiffResponse) Reset() { *x = DiffResponse{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[8] + mi := &file_reprod_api_api_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -520,7 +583,7 @@ func (x *DiffResponse) String() string { func (*DiffResponse) ProtoMessage() {} func (x *DiffResponse) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[8] + mi := &file_reprod_api_api_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -533,7 +596,7 @@ func (x *DiffResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DiffResponse.ProtoReflect.Descriptor instead. func (*DiffResponse) Descriptor() ([]byte, []int) { - return file_reprod_api_api_proto_rawDescGZIP(), []int{8} + return file_reprod_api_api_proto_rawDescGZIP(), []int{9} } func (x *DiffResponse) GetHTMLDiff() string { @@ -548,13 +611,13 @@ type DerivationReproducibilityResponse_DerivationOutputHash struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - LogIDs []int64 `protobuf:"varint,1,rep,packed,name=LogIDs,proto3" json:"LogIDs,omitempty"` + LogIDs []string `protobuf:"bytes,1,rep,name=LogIDs,proto3" json:"LogIDs,omitempty"` } func (x *DerivationReproducibilityResponse_DerivationOutputHash) Reset() { *x = DerivationReproducibilityResponse_DerivationOutputHash{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[9] + mi := &file_reprod_api_api_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -567,7 +630,7 @@ func (x *DerivationReproducibilityResponse_DerivationOutputHash) String() string func (*DerivationReproducibilityResponse_DerivationOutputHash) ProtoMessage() {} func (x *DerivationReproducibilityResponse_DerivationOutputHash) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[9] + mi := &file_reprod_api_api_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -583,7 +646,7 @@ func (*DerivationReproducibilityResponse_DerivationOutputHash) Descriptor() ([]b return file_reprod_api_api_proto_rawDescGZIP(), []int{1, 0} } -func (x *DerivationReproducibilityResponse_DerivationOutputHash) GetLogIDs() []int64 { +func (x *DerivationReproducibilityResponse_DerivationOutputHash) GetLogIDs() []string { if x != nil { return x.LogIDs } @@ -604,7 +667,7 @@ type DerivationReproducibilityResponse_DerivationOutput struct { func (x *DerivationReproducibilityResponse_DerivationOutput) Reset() { *x = DerivationReproducibilityResponse_DerivationOutput{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[10] + mi := &file_reprod_api_api_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -617,7 +680,7 @@ func (x *DerivationReproducibilityResponse_DerivationOutput) String() string { func (*DerivationReproducibilityResponse_DerivationOutput) ProtoMessage() {} func (x *DerivationReproducibilityResponse_DerivationOutput) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[10] + mi := &file_reprod_api_api_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -665,7 +728,7 @@ type DerivationReproducibilityResponse_Derivation struct { func (x *DerivationReproducibilityResponse_Derivation) Reset() { *x = DerivationReproducibilityResponse_Derivation{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[11] + mi := &file_reprod_api_api_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -678,7 +741,7 @@ func (x *DerivationReproducibilityResponse_Derivation) String() string { func (*DerivationReproducibilityResponse_Derivation) ProtoMessage() {} func (x *DerivationReproducibilityResponse_Derivation) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[11] + mi := &file_reprod_api_api_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -710,7 +773,7 @@ var file_reprod_api_api_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x72, 0x76, 0x50, - 0x61, 0x74, 0x68, 0x22, 0xe5, 0x0c, 0x0a, 0x21, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x61, 0x74, 0x68, 0x22, 0x82, 0x0e, 0x0a, 0x21, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x44, 0x72, 0x76, 0x50, @@ -741,10 +804,15 @@ var file_reprod_api_api_proto_rawDesc = []byte{ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x74, 0x68, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x4d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x74, 0x68, 0x73, 0x1a, 0x2e, 0x0a, 0x14, 0x44, + 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x4e, 0x0a, 0x04, 0x4c, + 0x6f, 0x67, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x72, 0x65, 0x70, 0x72, + 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x1a, 0x2e, 0x0a, 0x14, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x03, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x1a, 0xca, 0x02, 0x0a, 0x10, + 0x03, 0x28, 0x09, 0x52, 0x06, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x1a, 0xca, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, @@ -812,84 +880,92 @@ var file_reprod_api_api_proto_rawDesc = []byte{ 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, 0x01, 0x0a, 0x22, - 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x45, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x45, 0x76, - 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x45, 0x76, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x18, 0x0a, 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x63, - 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, - 0x22, 0x98, 0x01, 0x0a, 0x25, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x72, 0x65, 0x70, - 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, - 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, - 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x50, 0x63, - 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x22, 0x7e, 0x0a, 0x24, 0x41, - 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x74, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x41, 0x74, 0x74, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x53, 0x74, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x74, 0x6f, - 0x70, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x3a, 0x0a, 0x18, 0x53, - 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x41, 0x74, 0x74, - 0x72, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x30, 0x0a, 0x18, 0x53, 0x75, 0x67, 0x67, 0x65, - 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x74, 0x74, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x41, 0x74, 0x74, 0x72, 0x73, 0x22, 0x51, 0x0a, 0x0b, 0x44, 0x69, 0x66, - 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x31, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x32, 0x22, 0x2a, 0x0a, 0x0c, - 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x48, 0x54, 0x4d, 0x4c, 0x44, 0x69, 0x66, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x48, 0x54, 0x4d, 0x4c, 0x44, 0x69, 0x66, 0x66, 0x32, 0xd1, 0x03, 0x0a, 0x12, 0x52, 0x65, 0x70, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x50, 0x49, 0x12, - 0x80, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2f, 0x2e, - 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, - 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, - 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x8c, 0x01, 0x0a, 0x1d, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4b, 0x0a, 0x09, 0x4c, + 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x72, 0x65, 0x70, 0x72, + 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2f, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, + 0x14, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x4c, 0x6f, 0x67, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa2, 0x01, 0x0a, 0x22, 0x41, 0x74, + 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x45, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x45, 0x76, 0x61, 0x6c, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x45, 0x76, 0x61, 0x6c, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0d, 0x45, 0x76, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, + 0x0a, 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x44, 0x72, 0x76, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x63, 0x74, 0x52, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x22, 0x98, + 0x01, 0x0a, 0x25, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, + 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x50, 0x63, 0x74, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x50, 0x63, 0x74, 0x52, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x22, 0x7e, 0x0a, 0x24, 0x41, 0x74, 0x74, + 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x41, 0x74, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x41, 0x74, 0x74, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x53, + 0x74, 0x6f, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, + 0x18, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x3a, 0x0a, 0x18, 0x53, 0x75, 0x67, + 0x67, 0x65, 0x73, 0x74, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x50, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x50, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x30, 0x0a, 0x18, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x74, 0x74, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x41, 0x74, 0x74, 0x72, 0x73, 0x22, 0x51, 0x0a, 0x0b, 0x44, 0x69, 0x66, 0x66, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x31, 0x12, 0x20, 0x0a, 0x0b, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x32, 0x22, 0x2a, 0x0a, 0x0c, 0x44, 0x69, + 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x48, 0x54, + 0x4d, 0x4c, 0x44, 0x69, 0x66, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x48, 0x54, + 0x4d, 0x4c, 0x44, 0x69, 0x66, 0x66, 0x32, 0xd1, 0x03, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x50, 0x49, 0x12, 0x80, 0x01, + 0x0a, 0x19, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2f, 0x2e, 0x72, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x72, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x8c, 0x01, 0x0a, 0x1d, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x70, 0x72, - 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, - 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, - 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x66, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x04, 0x44, 0x69, 0x66, - 0x66, 0x12, 0x1a, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, - 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, - 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x49, 0x5a, 0x47, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, - 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, - 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, - 0x78, 0x2d, 0x6e, 0x69, 0x78, 0x2d, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x2f, 0x72, 0x65, 0x70, - 0x72, 0x6f, 0x64, 0x2d, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x12, 0x33, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, + 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x66, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x72, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, + 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, 0x12, + 0x1a, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x72, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, + 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, + 0x6e, 0x69, 0x78, 0x2d, 0x72, 0x31, 0x33, 0x79, 0x2f, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x2d, + 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -904,54 +980,58 @@ func file_reprod_api_api_proto_rawDescGZIP() []byte { return file_reprod_api_api_proto_rawDescData } -var file_reprod_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_reprod_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_reprod_api_api_proto_goTypes = []interface{}{ - (*DerivationReproducibilityRequest)(nil), // 0: reprod_api.v1.DerivationReproducibilityRequest - (*DerivationReproducibilityResponse)(nil), // 1: reprod_api.v1.DerivationReproducibilityResponse - (*AttrReproducibilityTimeSeriesPoint)(nil), // 2: reprod_api.v1.AttrReproducibilityTimeSeriesPoint - (*AttrReproducibilityTimeSeriesResponse)(nil), // 3: reprod_api.v1.AttrReproducibilityTimeSeriesResponse - (*AttrReproducibilityTimeSeriesRequest)(nil), // 4: reprod_api.v1.AttrReproducibilityTimeSeriesRequest - (*SuggestsAttributeRequest)(nil), // 5: reprod_api.v1.SuggestsAttributeRequest - (*SuggestAttributeResponse)(nil), // 6: reprod_api.v1.SuggestAttributeResponse - (*DiffRequest)(nil), // 7: reprod_api.v1.DiffRequest - (*DiffResponse)(nil), // 8: reprod_api.v1.DiffResponse - (*DerivationReproducibilityResponse_DerivationOutputHash)(nil), // 9: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash - (*DerivationReproducibilityResponse_DerivationOutput)(nil), // 10: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput - (*DerivationReproducibilityResponse_Derivation)(nil), // 11: reprod_api.v1.DerivationReproducibilityResponse.Derivation - nil, // 12: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry - nil, // 13: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry - nil, // 14: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry - nil, // 15: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry - nil, // 16: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry - nil, // 17: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry + (*DerivationReproducibilityRequest)(nil), // 0: reprod_api.v1.DerivationReproducibilityRequest + (*DerivationReproducibilityResponse)(nil), // 1: reprod_api.v1.DerivationReproducibilityResponse + (*Log)(nil), // 2: reprod_api.v1.Log + (*AttrReproducibilityTimeSeriesPoint)(nil), // 3: reprod_api.v1.AttrReproducibilityTimeSeriesPoint + (*AttrReproducibilityTimeSeriesResponse)(nil), // 4: reprod_api.v1.AttrReproducibilityTimeSeriesResponse + (*AttrReproducibilityTimeSeriesRequest)(nil), // 5: reprod_api.v1.AttrReproducibilityTimeSeriesRequest + (*SuggestsAttributeRequest)(nil), // 6: reprod_api.v1.SuggestsAttributeRequest + (*SuggestAttributeResponse)(nil), // 7: reprod_api.v1.SuggestAttributeResponse + (*DiffRequest)(nil), // 8: reprod_api.v1.DiffRequest + (*DiffResponse)(nil), // 9: reprod_api.v1.DiffResponse + (*DerivationReproducibilityResponse_DerivationOutputHash)(nil), // 10: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash + (*DerivationReproducibilityResponse_DerivationOutput)(nil), // 11: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput + (*DerivationReproducibilityResponse_Derivation)(nil), // 12: reprod_api.v1.DerivationReproducibilityResponse.Derivation + nil, // 13: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry + nil, // 14: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry + nil, // 15: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry + nil, // 16: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry + nil, // 17: reprod_api.v1.DerivationReproducibilityResponse.LogsEntry + nil, // 18: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry + nil, // 19: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry } var file_reprod_api_api_proto_depIdxs = []int32{ - 12, // 0: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry - 13, // 1: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry - 14, // 2: reprod_api.v1.DerivationReproducibilityResponse.UnknownPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry - 15, // 3: reprod_api.v1.DerivationReproducibilityResponse.MissingPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry - 2, // 4: reprod_api.v1.AttrReproducibilityTimeSeriesResponse.Points:type_name -> reprod_api.v1.AttrReproducibilityTimeSeriesPoint - 16, // 5: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashes:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry - 17, // 6: reprod_api.v1.DerivationReproducibilityResponse.Derivation.Outputs:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry - 11, // 7: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation - 11, // 8: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation - 11, // 9: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation - 11, // 10: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation - 9, // 11: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash - 10, // 12: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput - 0, // 13: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:input_type -> reprod_api.v1.DerivationReproducibilityRequest - 4, // 14: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:input_type -> reprod_api.v1.AttrReproducibilityTimeSeriesRequest - 5, // 15: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:input_type -> reprod_api.v1.SuggestsAttributeRequest - 7, // 16: reprod_api.v1.ReproducibilityAPI.Diff:input_type -> reprod_api.v1.DiffRequest - 1, // 17: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:output_type -> reprod_api.v1.DerivationReproducibilityResponse - 3, // 18: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:output_type -> reprod_api.v1.AttrReproducibilityTimeSeriesResponse - 6, // 19: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:output_type -> reprod_api.v1.SuggestAttributeResponse - 8, // 20: reprod_api.v1.ReproducibilityAPI.Diff:output_type -> reprod_api.v1.DiffResponse - 17, // [17:21] is the sub-list for method output_type - 13, // [13:17] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 13, // 0: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry + 14, // 1: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry + 15, // 2: reprod_api.v1.DerivationReproducibilityResponse.UnknownPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry + 16, // 3: reprod_api.v1.DerivationReproducibilityResponse.MissingPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry + 17, // 4: reprod_api.v1.DerivationReproducibilityResponse.Logs:type_name -> reprod_api.v1.DerivationReproducibilityResponse.LogsEntry + 3, // 5: reprod_api.v1.AttrReproducibilityTimeSeriesResponse.Points:type_name -> reprod_api.v1.AttrReproducibilityTimeSeriesPoint + 18, // 6: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashes:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry + 19, // 7: reprod_api.v1.DerivationReproducibilityResponse.Derivation.Outputs:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry + 12, // 8: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 12, // 9: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 12, // 10: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 12, // 11: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 2, // 12: reprod_api.v1.DerivationReproducibilityResponse.LogsEntry.value:type_name -> reprod_api.v1.Log + 10, // 13: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash + 11, // 14: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput + 0, // 15: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:input_type -> reprod_api.v1.DerivationReproducibilityRequest + 5, // 16: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:input_type -> reprod_api.v1.AttrReproducibilityTimeSeriesRequest + 6, // 17: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:input_type -> reprod_api.v1.SuggestsAttributeRequest + 8, // 18: reprod_api.v1.ReproducibilityAPI.Diff:input_type -> reprod_api.v1.DiffRequest + 1, // 19: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:output_type -> reprod_api.v1.DerivationReproducibilityResponse + 4, // 20: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:output_type -> reprod_api.v1.AttrReproducibilityTimeSeriesResponse + 7, // 21: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:output_type -> reprod_api.v1.SuggestAttributeResponse + 9, // 22: reprod_api.v1.ReproducibilityAPI.Diff:output_type -> reprod_api.v1.DiffResponse + 19, // [19:23] is the sub-list for method output_type + 15, // [15:19] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_reprod_api_api_proto_init() } @@ -985,7 +1065,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttrReproducibilityTimeSeriesPoint); i { + switch v := v.(*Log); i { case 0: return &v.state case 1: @@ -997,7 +1077,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttrReproducibilityTimeSeriesResponse); i { + switch v := v.(*AttrReproducibilityTimeSeriesPoint); i { case 0: return &v.state case 1: @@ -1009,7 +1089,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttrReproducibilityTimeSeriesRequest); i { + switch v := v.(*AttrReproducibilityTimeSeriesResponse); i { case 0: return &v.state case 1: @@ -1021,7 +1101,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SuggestsAttributeRequest); i { + switch v := v.(*AttrReproducibilityTimeSeriesRequest); i { case 0: return &v.state case 1: @@ -1033,7 +1113,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SuggestAttributeResponse); i { + switch v := v.(*SuggestsAttributeRequest); i { case 0: return &v.state case 1: @@ -1045,7 +1125,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffRequest); i { + switch v := v.(*SuggestAttributeResponse); i { case 0: return &v.state case 1: @@ -1057,7 +1137,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffResponse); i { + switch v := v.(*DiffRequest); i { case 0: return &v.state case 1: @@ -1069,7 +1149,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DerivationReproducibilityResponse_DerivationOutputHash); i { + switch v := v.(*DiffResponse); i { case 0: return &v.state case 1: @@ -1081,7 +1161,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DerivationReproducibilityResponse_DerivationOutput); i { + switch v := v.(*DerivationReproducibilityResponse_DerivationOutputHash); i { case 0: return &v.state case 1: @@ -1093,6 +1173,18 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DerivationReproducibilityResponse_DerivationOutput); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_reprod_api_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DerivationReproducibilityResponse_Derivation); i { case 0: return &v.state @@ -1111,7 +1203,7 @@ func file_reprod_api_api_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_reprod_api_api_proto_rawDesc, NumEnums: 0, - NumMessages: 18, + NumMessages: 20, NumExtensions: 0, NumServices: 1, }, diff --git a/packages/trustix-nix-r13y/reprod-api/api.proto b/packages/trustix-nix-r13y/reprod-api/api.proto index bc2c0b1a..6dc78e5e 100644 --- a/packages/trustix-nix-r13y/reprod-api/api.proto +++ b/packages/trustix-nix-r13y/reprod-api/api.proto @@ -11,7 +11,7 @@ option go_package = "github.com/nix-community/trustix/packages/trustix-nix-r13y/ message DerivationReproducibilityRequest { string DrvPath = 1; } message DerivationReproducibilityResponse { - message DerivationOutputHash { repeated int64 LogIDs = 1; } + message DerivationOutputHash { repeated string LogIDs = 1; } message DerivationOutput { string Output = 1; @@ -29,6 +29,13 @@ message DerivationReproducibilityResponse { map ReproducedPaths = 3; map UnknownPaths = 4; map MissingPaths = 5; + + map Logs = 6; +} + +message Log { + string LogID = 1; + string Name = 2; } message AttrReproducibilityTimeSeriesPoint { diff --git a/packages/trustix-nix-r13y/sql/queries/reprod.sql b/packages/trustix-nix-r13y/sql/queries/reprod.sql index 1fc5f171..044cc2e8 100644 --- a/packages/trustix-nix-r13y/sql/queries/reprod.sql +++ b/packages/trustix-nix-r13y/sql/queries/reprod.sql @@ -4,13 +4,14 @@ SELECT drvoutput.output, drvoutput.store_path, json_group_object( - drvoutputresult.log_id, + log.log_id, drvoutputresult.output_hash ) AS output_results FROM derivationoutput AS drvoutput JOIN derivation drv ON drv.id = drvoutput.derivation_id LEFT JOIN derivationoutputresult drvoutputresult ON drvoutputresult.store_path = drvoutput.store_path + LEFT JOIN log log ON log.id = drvoutputresult.log_id JOIN derivationrefrecursive refs_recurse ON refs_recurse.drv_id = drvoutput.derivation_id JOIN derivation referrer_drv ON referrer_drv.id = refs_recurse.referrer_id WHERE From 34102e7db753a5ab715428a00c79c0cd6877c458 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 14 Oct 2022 16:35:46 +1300 Subject: [PATCH 23/49] trustix-nix-r13y-web: Add pie chart show reproducibility distribution on derivation page --- .../trustix-nix-r13y-web/package-lock.json | 83 +++++++++++++++++++ packages/trustix-nix-r13y-web/package.json | 5 ++ .../trustix-nix-r13y-web/src/chart/README.md | 1 + .../src/chart/SolidChart.tsx | 45 ++++++++++ .../trustix-nix-r13y-web/src/pages/drv.tsx | 72 ++++++++++++++++ 5 files changed, 206 insertions(+) create mode 100644 packages/trustix-nix-r13y-web/src/chart/README.md create mode 100644 packages/trustix-nix-r13y-web/src/chart/SolidChart.tsx diff --git a/packages/trustix-nix-r13y-web/package-lock.json b/packages/trustix-nix-r13y-web/package-lock.json index 8073c8fd..548dea3e 100644 --- a/packages/trustix-nix-r13y-web/package-lock.json +++ b/packages/trustix-nix-r13y-web/package-lock.json @@ -12,12 +12,17 @@ "@bufbuild/connect-web": "^0.2.1", "@bufbuild/protobuf": "^0.1.1", "@solidjs/router": "^0.5.0", + "chart.js": "^3.9.1", + "lodash.clonedeep": "^4.5.0", + "lodash.merge": "^4.6.2", "solid-js": "^1.5.1", "theme-change": "^2.2.0" }, "devDependencies": { "@bufbuild/protoc-gen-connect-web": "^0.2.1", "@bufbuild/protoc-gen-es": "^0.1.1", + "@types/lodash.clonedeep": "^4.5.7", + "@types/lodash.merge": "^4.6.7", "autoprefixer": "^10.4.8", "daisyui": "^2.31.0", "postcss": "^8.4.16", @@ -683,6 +688,30 @@ "solid-js": "^1.5.3" } }, + "node_modules/@types/lodash": { + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", + "dev": true + }, + "node_modules/@types/lodash.clonedeep": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz", + "integrity": "sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/lodash.merge": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.7.tgz", + "integrity": "sha512-OwxUJ9E50gw3LnAefSHJPHaBLGEKmQBQ7CZe/xflHkyy/wH2zVyEIAKReHvVrrn7zKdF58p16We9kMfh7v0RRQ==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -906,6 +935,11 @@ "node": ">=4" } }, + "node_modules/chart.js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", + "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1739,6 +1773,16 @@ "node": ">=10" } }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, "node_modules/merge-anything": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.0.4.tgz", @@ -2859,6 +2903,30 @@ "integrity": "sha512-rNR07l21tWWDVmCbaapggB89rEX7jlM2XChpTLqEGEnj46LzVZ8zgvjcF6NNKScByAlLpoQUkVIjB2KHpcMi+w==", "requires": {} }, + "@types/lodash": { + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", + "dev": true + }, + "@types/lodash.clonedeep": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz", + "integrity": "sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/lodash.merge": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.7.tgz", + "integrity": "sha512-OwxUJ9E50gw3LnAefSHJPHaBLGEKmQBQ7CZe/xflHkyy/wH2zVyEIAKReHvVrrn7zKdF58p16We9kMfh7v0RRQ==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -3003,6 +3071,11 @@ "supports-color": "^5.3.0" } }, + "chart.js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", + "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -3533,6 +3606,16 @@ "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, "merge-anything": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.0.4.tgz", diff --git a/packages/trustix-nix-r13y-web/package.json b/packages/trustix-nix-r13y-web/package.json index 436acf62..a593dd14 100644 --- a/packages/trustix-nix-r13y-web/package.json +++ b/packages/trustix-nix-r13y-web/package.json @@ -11,6 +11,8 @@ "devDependencies": { "@bufbuild/protoc-gen-connect-web": "^0.2.1", "@bufbuild/protoc-gen-es": "^0.1.1", + "@types/lodash.clonedeep": "^4.5.7", + "@types/lodash.merge": "^4.6.7", "autoprefixer": "^10.4.8", "daisyui": "^2.31.0", "postcss": "^8.4.16", @@ -24,6 +26,9 @@ "@bufbuild/connect-web": "^0.2.1", "@bufbuild/protobuf": "^0.1.1", "@solidjs/router": "^0.5.0", + "chart.js": "^3.9.1", + "lodash.clonedeep": "^4.5.0", + "lodash.merge": "^4.6.2", "solid-js": "^1.5.1", "theme-change": "^2.2.0" } diff --git a/packages/trustix-nix-r13y-web/src/chart/README.md b/packages/trustix-nix-r13y-web/src/chart/README.md new file mode 100644 index 00000000..782604c0 --- /dev/null +++ b/packages/trustix-nix-r13y-web/src/chart/README.md @@ -0,0 +1 @@ +# This is a fork of https://github.com/MrFoxPro/solid-chart.js diff --git a/packages/trustix-nix-r13y-web/src/chart/SolidChart.tsx b/packages/trustix-nix-r13y-web/src/chart/SolidChart.tsx new file mode 100644 index 00000000..1e040a89 --- /dev/null +++ b/packages/trustix-nix-r13y-web/src/chart/SolidChart.tsx @@ -0,0 +1,45 @@ +import { Chart, registerables } from 'chart.js'; +import { ComponentProps, createEffect, createSignal } from "solid-js"; +import merge from "lodash.merge"; +import deepClone from "lodash.clonedeep"; + +export type SolidChartProps = { + canvasOptions?: ComponentProps<"canvas">; + replace?: boolean // set this to true if merging properties is not suitable (i.e. when you need to remove items or properties) +} & Chart.ChartConfiguration; + +Chart.register(...registerables); + +const replaceChartProps = (props: { src: SolidChartProps, dest: Chart }) => { + const { src, dest } = props; + for (const key in src) { + if (key in dest) { + dest[key] = src[key]; + } + } +} + +export function SolidChart(props: SolidChartProps) { + const [canvas, setCanvas] = createSignal(null); + const [chart, setChart] = createSignal(null); + createEffect(() => { + const el = canvas(); + if (!el) return; + const _chart = chart(); + if (!_chart) { + setChart(new Chart(el, deepClone(props))); + return; + } + + if (props.replace) { + replaceChartProps({ src: props, dest: _chart.config }); + } else { + merge(_chart.config, deepClone(props)); + } + _chart.update(); + }); + function createChart(canvas: HTMLCanvasElement) { + setTimeout(() => setCanvas(canvas)); + } + return ; +} diff --git a/packages/trustix-nix-r13y-web/src/pages/drv.tsx b/packages/trustix-nix-r13y-web/src/pages/drv.tsx index 37448b1d..7f21a274 100644 --- a/packages/trustix-nix-r13y-web/src/pages/drv.tsx +++ b/packages/trustix-nix-r13y-web/src/pages/drv.tsx @@ -6,8 +6,10 @@ import { For, Show, Suspense, + createEffect, } from "solid-js"; import { Routes, Route, useParams, useSearchParams, A } from "@solidjs/router"; +import { createStore } from "solid-js/store"; import { createConnectTransport, @@ -24,6 +26,11 @@ import { } from "../api/api_pb"; import { NameValuePair } from "../lib"; +import { + SolidChart, + SolidChartProps, +} from "../chart/SolidChart"; + type DerivationReproducibilityPaths = { [key: string]: DerivationReproducibilityResponse_Derivation; }; @@ -260,6 +267,60 @@ const Derivation: Component = () => { fetchDerivationReproducibility, ); + // Show a doughnut chart with the different groups + const chartSettings: SolidChartProps = { + type: 'doughnut', + data: { + labels: [ + "Unreproduced paths", + "Reproduced paths", + "Unknown paths", + "Missing paths", + ], + + }, + options: { + responsive: false, + plugins: { + legend: { + position: 'top', + }, + title: { + display: true, + text: 'Chart.js Doughnut Chart' + } + } + }, + } + + const [chart, setChart] = createStore(chartSettings); + + createEffect(() => { + const resp = drvReprod() + if (resp == undefined) { + return + } + + const datasets = [ + { + data: [ + resp.UnreproducedPaths, + resp.ReproducedPaths, + resp.UnknownPaths, + resp.MissingPaths, + ].map(paths => Object.keys(paths).length), + backgroundColor: [ + "#f87272", // bg-error + "#36d399", // bg-success + "#fbbd23", // bg-warning + "#ffffff", // bg-base-100 + ] + } + ] + + setChart("data", "datasets", datasets) + }); + return ( <>
@@ -271,6 +332,17 @@ const Derivation: Component = () => {

+ + + + + {renderPaths( "Unreproduced paths", From 4e2a02d5835987dfbd600eba609213466b6b8836 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 14 Oct 2022 16:53:52 +1300 Subject: [PATCH 24/49] trustix-nix-r13y-web: Add nice spacing --- .../trustix-nix-r13y-web/src/pages/drv.tsx | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/trustix-nix-r13y-web/src/pages/drv.tsx b/packages/trustix-nix-r13y-web/src/pages/drv.tsx index 7f21a274..564b3b94 100644 --- a/packages/trustix-nix-r13y-web/src/pages/drv.tsx +++ b/packages/trustix-nix-r13y-web/src/pages/drv.tsx @@ -285,10 +285,6 @@ const Derivation: Component = () => { legend: { position: 'top', }, - title: { - display: true, - text: 'Chart.js Doughnut Chart' - } } }, } @@ -325,7 +321,7 @@ const Derivation: Component = () => { <>

{searchParams.storePath} @@ -334,13 +330,20 @@ const Derivation: Component = () => { - +
+
+ Foo +
+
+ +
+
From 9dc599437c4354d15421f7acc3d1229849c43453 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 14 Oct 2022 17:32:57 +1300 Subject: [PATCH 25/49] trustix-nix-r13y-web: Add statistics --- .../src/chart/SolidChart.tsx | 60 ++++---- .../trustix-nix-r13y-web/src/pages/drv.tsx | 138 ++++++++++++------ 2 files changed, 123 insertions(+), 75 deletions(-) diff --git a/packages/trustix-nix-r13y-web/src/chart/SolidChart.tsx b/packages/trustix-nix-r13y-web/src/chart/SolidChart.tsx index 1e040a89..a34dcbd0 100644 --- a/packages/trustix-nix-r13y-web/src/chart/SolidChart.tsx +++ b/packages/trustix-nix-r13y-web/src/chart/SolidChart.tsx @@ -1,45 +1,45 @@ -import { Chart, registerables } from 'chart.js'; +import { Chart, registerables } from "chart.js"; import { ComponentProps, createEffect, createSignal } from "solid-js"; import merge from "lodash.merge"; import deepClone from "lodash.clonedeep"; export type SolidChartProps = { - canvasOptions?: ComponentProps<"canvas">; - replace?: boolean // set this to true if merging properties is not suitable (i.e. when you need to remove items or properties) + canvasOptions?: ComponentProps<"canvas">; + replace?: boolean; // set this to true if merging properties is not suitable (i.e. when you need to remove items or properties) } & Chart.ChartConfiguration; Chart.register(...registerables); -const replaceChartProps = (props: { src: SolidChartProps, dest: Chart }) => { - const { src, dest } = props; - for (const key in src) { - if (key in dest) { - dest[key] = src[key]; - } +const replaceChartProps = (props: { src: SolidChartProps; dest: Chart }) => { + const { src, dest } = props; + for (const key in src) { + if (key in dest) { + dest[key] = src[key]; } -} + } +}; export function SolidChart(props: SolidChartProps) { - const [canvas, setCanvas] = createSignal(null); - const [chart, setChart] = createSignal(null); - createEffect(() => { - const el = canvas(); - if (!el) return; - const _chart = chart(); - if (!_chart) { - setChart(new Chart(el, deepClone(props))); - return; - } + const [canvas, setCanvas] = createSignal(null); + const [chart, setChart] = createSignal(null); + createEffect(() => { + const el = canvas(); + if (!el) return; + const _chart = chart(); + if (!_chart) { + setChart(new Chart(el, deepClone(props))); + return; + } - if (props.replace) { - replaceChartProps({ src: props, dest: _chart.config }); - } else { - merge(_chart.config, deepClone(props)); - } - _chart.update(); - }); - function createChart(canvas: HTMLCanvasElement) { - setTimeout(() => setCanvas(canvas)); + if (props.replace) { + replaceChartProps({ src: props, dest: _chart.config }); + } else { + merge(_chart.config, deepClone(props)); } - return ; + _chart.update(); + }); + function createChart(canvas: HTMLCanvasElement) { + setTimeout(() => setCanvas(canvas)); + } + return ; } diff --git a/packages/trustix-nix-r13y-web/src/pages/drv.tsx b/packages/trustix-nix-r13y-web/src/pages/drv.tsx index 564b3b94..da896117 100644 --- a/packages/trustix-nix-r13y-web/src/pages/drv.tsx +++ b/packages/trustix-nix-r13y-web/src/pages/drv.tsx @@ -26,10 +26,7 @@ import { } from "../api/api_pb"; import { NameValuePair } from "../lib"; -import { - SolidChart, - SolidChartProps, -} from "../chart/SolidChart"; +import { SolidChart, SolidChartProps } from "../chart/SolidChart"; type DerivationReproducibilityPaths = { [key: string]: DerivationReproducibilityResponse_Derivation; @@ -38,6 +35,8 @@ type Logs = { [key: string]: Log }; const loading =

Loading...

; +const objSize = (o: any): number => Object.keys(o).length; + const fetchDerivationReproducibility = async ( drvPath, ): DerivationReproducibilityResponse => { @@ -260,16 +259,12 @@ const renderPaths = ( ); }; -const Derivation: Component = () => { - const [searchParams, setSearchParams] = useSearchParams(); - const [drvReprod] = createResource( - () => searchParams.storePath, - fetchDerivationReproducibility, - ); - +const renderDerivationStatistics = ( + drvReprod: DerivationReproducibilityResponse, +): Component => { // Show a doughnut chart with the different groups const chartSettings: SolidChartProps = { - type: 'doughnut', + type: "doughnut", data: { labels: [ "Unreproduced paths", @@ -277,24 +272,23 @@ const Derivation: Component = () => { "Unknown paths", "Missing paths", ], - }, options: { responsive: false, plugins: { legend: { - position: 'top', + position: "top", }, - } + }, }, - } + }; const [chart, setChart] = createStore(chartSettings); createEffect(() => { - const resp = drvReprod() + const resp = drvReprod; if (resp == undefined) { - return + return; } const datasets = [ @@ -304,46 +298,100 @@ const Derivation: Component = () => { resp.ReproducedPaths, resp.UnknownPaths, resp.MissingPaths, - ].map(paths => Object.keys(paths).length), + ].map((paths) => Object.keys(paths).length), backgroundColor: [ - "#f87272", // bg-error - "#36d399", // bg-success - "#fbbd23", // bg-warning + "#f87272", // bg-error + "#36d399", // bg-success + "#fbbd23", // bg-warning "#ffffff", // bg-base-100 - ] - } - ] + ], + }, + ]; - setChart("data", "datasets", datasets) + setChart("data", "datasets", datasets); }); + const numOutputs = [ + drvReprod.UnreproducedPaths, + drvReprod.ReproducedPaths, + drvReprod.UnknownPaths, + drvReprod.MissingPaths, + ].reduce((acc, v) => acc + objSize(v), 0); + + const numReproduced = objSize(drvReprod.ReproducedPaths); + + return ( +
+
+
+

Statistics

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Unreproduced paths{objSize(drvReprod.UnreproducedPaths)}
Reproduced paths{numReproduced}
Unknown paths{objSize(drvReprod.UnknownPaths)}
Missing paths{objSize(drvReprod.MissingPaths)}
Reproduced{(numOutputs / 100) * numReproduced}%
Number of logs{objSize(drvReprod.Logs)}
+
+
+ +
+ +
+
+ ); +}; + +const Derivation: Component = () => { + const [searchParams, setSearchParams] = useSearchParams(); + const [drvReprod] = createResource( + () => searchParams.storePath, + fetchDerivationReproducibility, + ); + return ( <>
-

+

{searchParams.storePath}

- -
-
- Foo -
-
- -
-
+ {renderDerivationStatistics(drvReprod())}
From 58d5b24791c728a961762ec97d8221b9735a0633 Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 14 Oct 2022 23:24:20 +1300 Subject: [PATCH 26/49] trustix-nix-r13y-web: Add request for grouped channels reproducibility rates This is what will be the default landing page for the trustix-nix-r13y-web dashboard --- .../src/api/api_connectweb.ts | 11 +- .../trustix-nix-r13y-web/src/api/api_pb.ts | 106 +++++ .../trustix-nix-r13y/examples/config.toml | 3 + .../trustix-nix-r13y/internal/cmd/serve.go | 2 +- .../internal/config/config.go | 11 +- .../trustix-nix-r13y/internal/server/api.go | 97 ++++- .../trustix-nix-r13y/reprod-api/api.pb.go | 389 ++++++++++++++---- .../trustix-nix-r13y/reprod-api/api.proto | 18 + .../reprod_apiconnect/api.connect.go | 31 +- 9 files changed, 572 insertions(+), 96 deletions(-) diff --git a/packages/trustix-nix-r13y-web/src/api/api_connectweb.ts b/packages/trustix-nix-r13y-web/src/api/api_connectweb.ts index d3c94564..5f654987 100644 --- a/packages/trustix-nix-r13y-web/src/api/api_connectweb.ts +++ b/packages/trustix-nix-r13y-web/src/api/api_connectweb.ts @@ -7,7 +7,7 @@ /* eslint-disable */ /* @ts-nocheck */ -import {AttrReproducibilityTimeSeriesRequest, AttrReproducibilityTimeSeriesResponse, DerivationReproducibilityRequest, DerivationReproducibilityResponse, DiffRequest, DiffResponse, SuggestAttributeResponse, SuggestsAttributeRequest} from "./api_pb.js"; +import {AttrReproducibilityTimeSeriesGroupedbyChannelRequest, AttrReproducibilityTimeSeriesGroupedbyChannelResponse, AttrReproducibilityTimeSeriesRequest, AttrReproducibilityTimeSeriesResponse, DerivationReproducibilityRequest, DerivationReproducibilityResponse, DiffRequest, DiffResponse, SuggestAttributeResponse, SuggestsAttributeRequest} from "./api_pb.js"; import {MethodKind} from "@bufbuild/protobuf"; /** @@ -34,6 +34,15 @@ export const ReproducibilityAPI = { O: AttrReproducibilityTimeSeriesResponse, kind: MethodKind.Unary, }, + /** + * @generated from rpc reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeriesGroupedbyChannel + */ + attrReproducibilityTimeSeriesGroupedbyChannel: { + name: "AttrReproducibilityTimeSeriesGroupedbyChannel", + I: AttrReproducibilityTimeSeriesGroupedbyChannelRequest, + O: AttrReproducibilityTimeSeriesGroupedbyChannelResponse, + kind: MethodKind.Unary, + }, /** * @generated from rpc reprod_api.v1.ReproducibilityAPI.SuggestAttribute */ diff --git a/packages/trustix-nix-r13y-web/src/api/api_pb.ts b/packages/trustix-nix-r13y-web/src/api/api_pb.ts index f6f5165b..4cb31407 100644 --- a/packages/trustix-nix-r13y-web/src/api/api_pb.ts +++ b/packages/trustix-nix-r13y-web/src/api/api_pb.ts @@ -588,3 +588,109 @@ export class DiffResponse extends Message { return proto3.util.equals(DiffResponse, a, b); } } + +/** + * @generated from message reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelRequest + */ +export class AttrReproducibilityTimeSeriesGroupedbyChannelRequest extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AttrReproducibilityTimeSeriesGroupedbyChannelRequest { + return new AttrReproducibilityTimeSeriesGroupedbyChannelRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AttrReproducibilityTimeSeriesGroupedbyChannelRequest { + return new AttrReproducibilityTimeSeriesGroupedbyChannelRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AttrReproducibilityTimeSeriesGroupedbyChannelRequest { + return new AttrReproducibilityTimeSeriesGroupedbyChannelRequest().fromJsonString(jsonString, options); + } + + static equals(a: AttrReproducibilityTimeSeriesGroupedbyChannelRequest | PlainMessage | undefined, b: AttrReproducibilityTimeSeriesGroupedbyChannelRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(AttrReproducibilityTimeSeriesGroupedbyChannelRequest, a, b); + } +} + +/** + * @generated from message reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse + */ +export class AttrReproducibilityTimeSeriesGroupedbyChannelResponse extends Message { + /** + * @generated from field: map Channels = 1; + */ + Channels: { [key: string]: AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel } = {}; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "Channels", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel} }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AttrReproducibilityTimeSeriesGroupedbyChannelResponse { + return new AttrReproducibilityTimeSeriesGroupedbyChannelResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AttrReproducibilityTimeSeriesGroupedbyChannelResponse { + return new AttrReproducibilityTimeSeriesGroupedbyChannelResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AttrReproducibilityTimeSeriesGroupedbyChannelResponse { + return new AttrReproducibilityTimeSeriesGroupedbyChannelResponse().fromJsonString(jsonString, options); + } + + static equals(a: AttrReproducibilityTimeSeriesGroupedbyChannelResponse | PlainMessage | undefined, b: AttrReproducibilityTimeSeriesGroupedbyChannelResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(AttrReproducibilityTimeSeriesGroupedbyChannelResponse, a, b); + } +} + +/** + * @generated from message reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.Channel + */ +export class AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel extends Message { + /** + * @generated from field: map Attrs = 1; + */ + Attrs: { [key: string]: AttrReproducibilityTimeSeriesResponse } = {}; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime = proto3; + static readonly typeName = "reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.Channel"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "Attrs", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: AttrReproducibilityTimeSeriesResponse} }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel { + return new AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel { + return new AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel { + return new AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel().fromJsonString(jsonString, options); + } + + static equals(a: AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel | PlainMessage | undefined, b: AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel | PlainMessage | undefined): boolean { + return proto3.util.equals(AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel, a, b); + } +} + diff --git a/packages/trustix-nix-r13y/examples/config.toml b/packages/trustix-nix-r13y/examples/config.toml index 26f95cd3..a269045a 100644 --- a/packages/trustix-nix-r13y/examples/config.toml +++ b/packages/trustix-nix-r13y/examples/config.toml @@ -5,6 +5,9 @@ log_index = 900 [lognames] e0f263745e4e3ab07ab5275b00b44f594e0b6d2bd35892a8ebd10a7f86322eb7 = "cache.nixos.org" +[attrs] +nixos-unstable = [ "jq" ] + [channels.hydra.nixos-unstable] base_url = "https://hydra.nixos.org" jobset = "trunk-combined" diff --git a/packages/trustix-nix-r13y/internal/cmd/serve.go b/packages/trustix-nix-r13y/internal/cmd/serve.go index 2c10055d..23e63fbd 100644 --- a/packages/trustix-nix-r13y/internal/cmd/serve.go +++ b/packages/trustix-nix-r13y/internal/cmd/serve.go @@ -115,7 +115,7 @@ var serveCommand = &cobra.Command{ defer evalIndexCron.Close() } - apiServer := server.NewAPIServer(dbs.dbRO, dbs.cacheDbRW, dbs.cacheDbRO, client, conf.Lognames) + apiServer := server.NewAPIServer(dbs.dbRO, dbs.cacheDbRW, dbs.cacheDbRO, client, conf.Lognames, conf.Attrs) errChan := make(chan error) diff --git a/packages/trustix-nix-r13y/internal/config/config.go b/packages/trustix-nix-r13y/internal/config/config.go index 3d9fa485..fde08441 100644 --- a/packages/trustix-nix-r13y/internal/config/config.go +++ b/packages/trustix-nix-r13y/internal/config/config.go @@ -16,9 +16,10 @@ import ( ) type Config struct { - Channels *Channels `toml:"channels" json:"channels"` - Cron *Cron `toml:"cron" json:"cron"` - Lognames map[string]string `toml:"lognames" json:"lognames"` + Channels *Channels `toml:"channels" json:"channels"` + Cron *Cron `toml:"cron" json:"cron"` + Lognames map[string]string `toml:"lognames" json:"lognames"` + Attrs map[string][]string `toml:"attrs" json:"attrs"` } func (c *Config) init() { @@ -35,6 +36,10 @@ func (c *Config) init() { if c.Lognames == nil { c.Lognames = make(map[string]string) } + + if c.Attrs == nil { + c.Attrs = make(map[string][]string) + } } func (c *Config) Validate() error { diff --git a/packages/trustix-nix-r13y/internal/server/api.go b/packages/trustix-nix-r13y/internal/server/api.go index 4bf437c2..d3a47ed6 100644 --- a/packages/trustix-nix-r13y/internal/server/api.go +++ b/packages/trustix-nix-r13y/internal/server/api.go @@ -9,9 +9,11 @@ import ( "database/sql" "encoding/json" "fmt" + "sync" "time" connect "github.com/bufbuild/connect-go" + "github.com/nix-community/trustix/packages/go-lib/executor" "github.com/nix-community/trustix/packages/go-lib/set" idb "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/db" "github.com/nix-community/trustix/packages/trustix-nix-r13y/internal/future" @@ -38,17 +40,20 @@ type APIServer struct { logNames map[string]string + attrsByChannel map[string][]string + diffExecutor *future.KeyedFutures[*pb.DiffResponse] downloadExecutor *future.KeyedFutures[*refcount.RefCountedValue[*narDownload]] } -func NewAPIServer(db *sql.DB, cacheDB *sql.DB, cacheDBRO *sql.DB, client *client.Client, logNames map[string]string) *APIServer { +func NewAPIServer(db *sql.DB, cacheDB *sql.DB, cacheDBRO *sql.DB, client *client.Client, logNames map[string]string, attrsByChannel map[string][]string) *APIServer { return &APIServer{ db: db, client: client, cacheDbRw: cacheDB, cacheDbRo: cacheDBRO, logNames: logNames, + attrsByChannel: attrsByChannel, diffExecutor: future.NewKeyedFutures[*pb.DiffResponse](), downloadExecutor: future.NewKeyedFutures[*refcount.RefCountedValue[*narDownload]](), } @@ -182,12 +187,26 @@ func (s *APIServer) DerivationReproducibility(ctx context.Context, req *connect. } func (s *APIServer) AttrReproducibilityTimeSeries(ctx context.Context, req *connect.Request[pb.AttrReproducibilityTimeSeriesRequest]) (*connect.Response[pb.AttrReproducibilityTimeSeriesResponse], error) { - msg := req.Msg + tx, err := s.db.BeginTx(ctx, nil) + if err != nil { + return nil, fmt.Errorf("error creating db transaction: %w", err) + } + defer func() { + err := tx.Rollback() + if err != nil && err != sql.ErrTxDone { + panic(err) + } + }() - attr := msg.Attr - start := time.Unix(msg.Start, 0) - stop := time.Unix(msg.Stop, 0) + resp, err := s.attrReproducibilityTimeSeries(ctx, tx, req.Msg) + if err != nil { + return nil, err + } + + return connect.NewResponse(resp), nil +} +func (s *APIServer) AttrReproducibilityTimeSeriesGroupedbyChannel(ctx context.Context, req *connect.Request[pb.AttrReproducibilityTimeSeriesGroupedbyChannelRequest]) (*connect.Response[pb.AttrReproducibilityTimeSeriesGroupedbyChannelResponse], error) { tx, err := s.db.BeginTx(ctx, nil) if err != nil { return nil, fmt.Errorf("error creating db transaction: %w", err) @@ -199,6 +218,70 @@ func (s *APIServer) AttrReproducibilityTimeSeries(ctx context.Context, req *conn } }() + var start, stop int64 + { + now := time.Now().UTC() + stop = now.Unix() + start = now.Add(-time.Hour * 24 * 90).Unix() + } + + resp := &pb.AttrReproducibilityTimeSeriesGroupedbyChannelResponse{ + Channels: make(map[string]*pb.AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel), + } + + e := executor.NewParallellExecutor() + + for channel, attrs := range s.attrsByChannel { + channel := channel + attrs := attrs + + c := &pb.AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel{ + Attrs: make(map[string]*pb.AttrReproducibilityTimeSeriesResponse), + } + resp.Channels[channel] = c + + var mux sync.Mutex + + for _, attr := range attrs { + attr := attr + + err := e.Add(func() error { + r, err := s.attrReproducibilityTimeSeries(ctx, tx, &pb.AttrReproducibilityTimeSeriesRequest{ + Attr: attr, + Start: start, + Stop: stop, + Channel: channel, + }) + if err != nil { + return fmt.Errorf("error getting reproducibility time series for attr '%s', channel '%s': %w", attr, channel, err) + } + + mux.Lock() + c.Attrs[attr] = r + mux.Unlock() + + return nil + }) + if err != nil { + return nil, err + } + + } + } + + err = e.Wait() + if err != nil { + return nil, err + } + + return connect.NewResponse(resp), nil +} + +func (s *APIServer) attrReproducibilityTimeSeries(ctx context.Context, tx *sql.Tx, msg *pb.AttrReproducibilityTimeSeriesRequest) (*pb.AttrReproducibilityTimeSeriesResponse, error) { + attr := msg.Attr + start := time.Unix(msg.Start, 0) + stop := time.Unix(msg.Stop, 0) + queries := idb.New(s.db) qtx := queries.WithTx(tx) @@ -209,7 +292,7 @@ func (s *APIServer) AttrReproducibilityTimeSeries(ctx context.Context, req *conn Channel: msg.Channel, }) if err != nil { - return nil, fmt.Errorf("error retreiving time series rows: %w", err) + return nil, fmt.Errorf("error retreiving time series rows for attr '%s': %w", attr, err) } resp := &pb.AttrReproducibilityTimeSeriesResponse{ @@ -242,7 +325,7 @@ func (s *APIServer) AttrReproducibilityTimeSeries(ctx context.Context, req *conn resp.PctReproduced = resp.PctReproduced / float32(len(rows)) } - return connect.NewResponse(resp), nil + return resp, nil } func (s *APIServer) SuggestAttribute(ctx context.Context, req *connect.Request[pb.SuggestsAttributeRequest]) (*connect.Response[pb.SuggestAttributeResponse], error) { diff --git a/packages/trustix-nix-r13y/reprod-api/api.pb.go b/packages/trustix-nix-r13y/reprod-api/api.pb.go index ec1015e3..0038c37b 100644 --- a/packages/trustix-nix-r13y/reprod-api/api.pb.go +++ b/packages/trustix-nix-r13y/reprod-api/api.pb.go @@ -606,6 +606,91 @@ func (x *DiffResponse) GetHTMLDiff() string { return "" } +type AttrReproducibilityTimeSeriesGroupedbyChannelRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelRequest) Reset() { + *x = AttrReproducibilityTimeSeriesGroupedbyChannelRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_reprod_api_api_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttrReproducibilityTimeSeriesGroupedbyChannelRequest) ProtoMessage() {} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelRequest) ProtoReflect() protoreflect.Message { + mi := &file_reprod_api_api_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AttrReproducibilityTimeSeriesGroupedbyChannelRequest.ProtoReflect.Descriptor instead. +func (*AttrReproducibilityTimeSeriesGroupedbyChannelRequest) Descriptor() ([]byte, []int) { + return file_reprod_api_api_proto_rawDescGZIP(), []int{10} +} + +type AttrReproducibilityTimeSeriesGroupedbyChannelResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Channels map[string]*AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel `protobuf:"bytes,1,rep,name=Channels,proto3" json:"Channels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelResponse) Reset() { + *x = AttrReproducibilityTimeSeriesGroupedbyChannelResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_reprod_api_api_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttrReproducibilityTimeSeriesGroupedbyChannelResponse) ProtoMessage() {} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelResponse) ProtoReflect() protoreflect.Message { + mi := &file_reprod_api_api_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AttrReproducibilityTimeSeriesGroupedbyChannelResponse.ProtoReflect.Descriptor instead. +func (*AttrReproducibilityTimeSeriesGroupedbyChannelResponse) Descriptor() ([]byte, []int) { + return file_reprod_api_api_proto_rawDescGZIP(), []int{11} +} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelResponse) GetChannels() map[string]*AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel { + if x != nil { + return x.Channels + } + return nil +} + type DerivationReproducibilityResponse_DerivationOutputHash struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -617,7 +702,7 @@ type DerivationReproducibilityResponse_DerivationOutputHash struct { func (x *DerivationReproducibilityResponse_DerivationOutputHash) Reset() { *x = DerivationReproducibilityResponse_DerivationOutputHash{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[10] + mi := &file_reprod_api_api_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -630,7 +715,7 @@ func (x *DerivationReproducibilityResponse_DerivationOutputHash) String() string func (*DerivationReproducibilityResponse_DerivationOutputHash) ProtoMessage() {} func (x *DerivationReproducibilityResponse_DerivationOutputHash) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[10] + mi := &file_reprod_api_api_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -667,7 +752,7 @@ type DerivationReproducibilityResponse_DerivationOutput struct { func (x *DerivationReproducibilityResponse_DerivationOutput) Reset() { *x = DerivationReproducibilityResponse_DerivationOutput{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[11] + mi := &file_reprod_api_api_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -680,7 +765,7 @@ func (x *DerivationReproducibilityResponse_DerivationOutput) String() string { func (*DerivationReproducibilityResponse_DerivationOutput) ProtoMessage() {} func (x *DerivationReproducibilityResponse_DerivationOutput) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[11] + mi := &file_reprod_api_api_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -728,7 +813,7 @@ type DerivationReproducibilityResponse_Derivation struct { func (x *DerivationReproducibilityResponse_Derivation) Reset() { *x = DerivationReproducibilityResponse_Derivation{} if protoimpl.UnsafeEnabled { - mi := &file_reprod_api_api_proto_msgTypes[12] + mi := &file_reprod_api_api_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -741,7 +826,7 @@ func (x *DerivationReproducibilityResponse_Derivation) String() string { func (*DerivationReproducibilityResponse_Derivation) ProtoMessage() {} func (x *DerivationReproducibilityResponse_Derivation) ProtoReflect() protoreflect.Message { - mi := &file_reprod_api_api_proto_msgTypes[12] + mi := &file_reprod_api_api_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -764,6 +849,53 @@ func (x *DerivationReproducibilityResponse_Derivation) GetOutputs() map[string]* return nil } +type AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Attrs map[string]*AttrReproducibilityTimeSeriesResponse `protobuf:"bytes,1,rep,name=Attrs,proto3" json:"Attrs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel) Reset() { + *x = AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel{} + if protoimpl.UnsafeEnabled { + mi := &file_reprod_api_api_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel) ProtoMessage() {} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel) ProtoReflect() protoreflect.Message { + mi := &file_reprod_api_api_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel.ProtoReflect.Descriptor instead. +func (*AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel) Descriptor() ([]byte, []int) { + return file_reprod_api_api_proto_rawDescGZIP(), []int{11, 0} +} + +func (x *AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel) GetAttrs() map[string]*AttrReproducibilityTimeSeriesResponse { + if x != nil { + return x.Attrs + } + return nil +} + var File_reprod_api_api_proto protoreflect.FileDescriptor var file_reprod_api_api_proto_rawDesc = []byte{ @@ -931,41 +1063,91 @@ var file_reprod_api_api_proto_rawDesc = []byte{ 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x61, 0x73, 0x68, 0x32, 0x22, 0x2a, 0x0a, 0x0c, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x48, 0x54, 0x4d, 0x4c, 0x44, 0x69, 0x66, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x48, 0x54, - 0x4d, 0x4c, 0x44, 0x69, 0x66, 0x66, 0x32, 0xd1, 0x03, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x50, 0x49, 0x12, 0x80, 0x01, - 0x0a, 0x19, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2f, 0x2e, 0x72, 0x65, - 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x72, - 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x8c, 0x01, 0x0a, 0x1d, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x12, 0x33, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, + 0x4d, 0x4c, 0x44, 0x69, 0x66, 0x66, 0x22, 0x36, 0x0a, 0x34, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x62, 0x79, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9e, + 0x04, 0x0a, 0x35, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x62, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x72, 0x65, 0x70, + 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x62, + 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x1a, 0xe8, 0x01, 0x0a, 0x07, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x6d, 0x0a, 0x05, 0x41, 0x74, 0x74, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x57, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, + 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x62, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x41, 0x74, + 0x74, 0x72, 0x73, 0x1a, 0x6e, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, - 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, - 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x66, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x73, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x72, - 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, 0x12, - 0x1a, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x72, 0x65, - 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, - 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, - 0x6e, 0x69, 0x78, 0x2d, 0x72, 0x31, 0x33, 0x79, 0x2f, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x2d, - 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x89, 0x01, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x62, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x72, 0x69, 0x65, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x62, 0x79, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, + 0x90, 0x05, 0x0a, 0x12, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x41, 0x50, 0x49, 0x12, 0x80, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x2f, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8c, 0x01, 0x0a, 0x1d, 0x41, 0x74, + 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x72, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, + 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, + 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xbc, 0x01, 0x0a, 0x2d, 0x41, 0x74, 0x74, + 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, + 0x64, 0x62, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x43, 0x2e, 0x72, 0x65, 0x70, + 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x52, + 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x62, + 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x44, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x74, 0x74, 0x72, 0x52, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x69, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x65, 0x64, 0x62, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x10, 0x53, 0x75, 0x67, 0x67, 0x65, + 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x27, 0x2e, 0x72, 0x65, + 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, + 0x65, 0x73, 0x74, 0x73, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x41, 0x0a, 0x04, 0x44, 0x69, 0x66, 0x66, 0x12, 0x1a, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, + 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x5f, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6e, 0x69, 0x78, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x74, 0x79, 0x2f, 0x74, + 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x2f, + 0x74, 0x72, 0x75, 0x73, 0x74, 0x69, 0x78, 0x2d, 0x6e, 0x69, 0x78, 0x2d, 0x72, 0x31, 0x33, 0x79, + 0x2f, 0x72, 0x65, 0x70, 0x72, 0x6f, 0x64, 0x2d, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -980,7 +1162,7 @@ func file_reprod_api_api_proto_rawDescGZIP() []byte { return file_reprod_api_api_proto_rawDescData } -var file_reprod_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_reprod_api_api_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_reprod_api_api_proto_goTypes = []interface{}{ (*DerivationReproducibilityRequest)(nil), // 0: reprod_api.v1.DerivationReproducibilityRequest (*DerivationReproducibilityResponse)(nil), // 1: reprod_api.v1.DerivationReproducibilityResponse @@ -992,46 +1174,57 @@ var file_reprod_api_api_proto_goTypes = []interface{}{ (*SuggestAttributeResponse)(nil), // 7: reprod_api.v1.SuggestAttributeResponse (*DiffRequest)(nil), // 8: reprod_api.v1.DiffRequest (*DiffResponse)(nil), // 9: reprod_api.v1.DiffResponse - (*DerivationReproducibilityResponse_DerivationOutputHash)(nil), // 10: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash - (*DerivationReproducibilityResponse_DerivationOutput)(nil), // 11: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput - (*DerivationReproducibilityResponse_Derivation)(nil), // 12: reprod_api.v1.DerivationReproducibilityResponse.Derivation - nil, // 13: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry - nil, // 14: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry - nil, // 15: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry - nil, // 16: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry - nil, // 17: reprod_api.v1.DerivationReproducibilityResponse.LogsEntry - nil, // 18: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry - nil, // 19: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry + (*AttrReproducibilityTimeSeriesGroupedbyChannelRequest)(nil), // 10: reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelRequest + (*AttrReproducibilityTimeSeriesGroupedbyChannelResponse)(nil), // 11: reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse + (*DerivationReproducibilityResponse_DerivationOutputHash)(nil), // 12: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash + (*DerivationReproducibilityResponse_DerivationOutput)(nil), // 13: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput + (*DerivationReproducibilityResponse_Derivation)(nil), // 14: reprod_api.v1.DerivationReproducibilityResponse.Derivation + nil, // 15: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry + nil, // 16: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry + nil, // 17: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry + nil, // 18: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry + nil, // 19: reprod_api.v1.DerivationReproducibilityResponse.LogsEntry + nil, // 20: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry + nil, // 21: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry + (*AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel)(nil), // 22: reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.Channel + nil, // 23: reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.ChannelsEntry + nil, // 24: reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.Channel.AttrsEntry } var file_reprod_api_api_proto_depIdxs = []int32{ - 13, // 0: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry - 14, // 1: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry - 15, // 2: reprod_api.v1.DerivationReproducibilityResponse.UnknownPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry - 16, // 3: reprod_api.v1.DerivationReproducibilityResponse.MissingPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry - 17, // 4: reprod_api.v1.DerivationReproducibilityResponse.Logs:type_name -> reprod_api.v1.DerivationReproducibilityResponse.LogsEntry + 15, // 0: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry + 16, // 1: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry + 17, // 2: reprod_api.v1.DerivationReproducibilityResponse.UnknownPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry + 18, // 3: reprod_api.v1.DerivationReproducibilityResponse.MissingPaths:type_name -> reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry + 19, // 4: reprod_api.v1.DerivationReproducibilityResponse.Logs:type_name -> reprod_api.v1.DerivationReproducibilityResponse.LogsEntry 3, // 5: reprod_api.v1.AttrReproducibilityTimeSeriesResponse.Points:type_name -> reprod_api.v1.AttrReproducibilityTimeSeriesPoint - 18, // 6: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashes:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry - 19, // 7: reprod_api.v1.DerivationReproducibilityResponse.Derivation.Outputs:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry - 12, // 8: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation - 12, // 9: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation - 12, // 10: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation - 12, // 11: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation - 2, // 12: reprod_api.v1.DerivationReproducibilityResponse.LogsEntry.value:type_name -> reprod_api.v1.Log - 10, // 13: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash - 11, // 14: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput - 0, // 15: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:input_type -> reprod_api.v1.DerivationReproducibilityRequest - 5, // 16: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:input_type -> reprod_api.v1.AttrReproducibilityTimeSeriesRequest - 6, // 17: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:input_type -> reprod_api.v1.SuggestsAttributeRequest - 8, // 18: reprod_api.v1.ReproducibilityAPI.Diff:input_type -> reprod_api.v1.DiffRequest - 1, // 19: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:output_type -> reprod_api.v1.DerivationReproducibilityResponse - 4, // 20: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:output_type -> reprod_api.v1.AttrReproducibilityTimeSeriesResponse - 7, // 21: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:output_type -> reprod_api.v1.SuggestAttributeResponse - 9, // 22: reprod_api.v1.ReproducibilityAPI.Diff:output_type -> reprod_api.v1.DiffResponse - 19, // [19:23] is the sub-list for method output_type - 15, // [15:19] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 23, // 6: reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.Channels:type_name -> reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.ChannelsEntry + 20, // 7: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashes:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry + 21, // 8: reprod_api.v1.DerivationReproducibilityResponse.Derivation.Outputs:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry + 14, // 9: reprod_api.v1.DerivationReproducibilityResponse.UnreproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 14, // 10: reprod_api.v1.DerivationReproducibilityResponse.ReproducedPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 14, // 11: reprod_api.v1.DerivationReproducibilityResponse.UnknownPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 14, // 12: reprod_api.v1.DerivationReproducibilityResponse.MissingPathsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.Derivation + 2, // 13: reprod_api.v1.DerivationReproducibilityResponse.LogsEntry.value:type_name -> reprod_api.v1.Log + 12, // 14: reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput.OutputHashesEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutputHash + 13, // 15: reprod_api.v1.DerivationReproducibilityResponse.Derivation.OutputsEntry.value:type_name -> reprod_api.v1.DerivationReproducibilityResponse.DerivationOutput + 24, // 16: reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.Channel.Attrs:type_name -> reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.Channel.AttrsEntry + 22, // 17: reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.ChannelsEntry.value:type_name -> reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.Channel + 4, // 18: reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse.Channel.AttrsEntry.value:type_name -> reprod_api.v1.AttrReproducibilityTimeSeriesResponse + 0, // 19: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:input_type -> reprod_api.v1.DerivationReproducibilityRequest + 5, // 20: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:input_type -> reprod_api.v1.AttrReproducibilityTimeSeriesRequest + 10, // 21: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeriesGroupedbyChannel:input_type -> reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelRequest + 6, // 22: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:input_type -> reprod_api.v1.SuggestsAttributeRequest + 8, // 23: reprod_api.v1.ReproducibilityAPI.Diff:input_type -> reprod_api.v1.DiffRequest + 1, // 24: reprod_api.v1.ReproducibilityAPI.DerivationReproducibility:output_type -> reprod_api.v1.DerivationReproducibilityResponse + 4, // 25: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries:output_type -> reprod_api.v1.AttrReproducibilityTimeSeriesResponse + 11, // 26: reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeriesGroupedbyChannel:output_type -> reprod_api.v1.AttrReproducibilityTimeSeriesGroupedbyChannelResponse + 7, // 27: reprod_api.v1.ReproducibilityAPI.SuggestAttribute:output_type -> reprod_api.v1.SuggestAttributeResponse + 9, // 28: reprod_api.v1.ReproducibilityAPI.Diff:output_type -> reprod_api.v1.DiffResponse + 24, // [24:29] is the sub-list for method output_type + 19, // [19:24] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_reprod_api_api_proto_init() } @@ -1161,7 +1354,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DerivationReproducibilityResponse_DerivationOutputHash); i { + switch v := v.(*AttrReproducibilityTimeSeriesGroupedbyChannelRequest); i { case 0: return &v.state case 1: @@ -1173,7 +1366,7 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DerivationReproducibilityResponse_DerivationOutput); i { + switch v := v.(*AttrReproducibilityTimeSeriesGroupedbyChannelResponse); i { case 0: return &v.state case 1: @@ -1185,6 +1378,30 @@ func file_reprod_api_api_proto_init() { } } file_reprod_api_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DerivationReproducibilityResponse_DerivationOutputHash); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_reprod_api_api_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DerivationReproducibilityResponse_DerivationOutput); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_reprod_api_api_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DerivationReproducibilityResponse_Derivation); i { case 0: return &v.state @@ -1196,6 +1413,18 @@ func file_reprod_api_api_proto_init() { return nil } } + file_reprod_api_api_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AttrReproducibilityTimeSeriesGroupedbyChannelResponse_Channel); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1203,7 +1432,7 @@ func file_reprod_api_api_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_reprod_api_api_proto_rawDesc, NumEnums: 0, - NumMessages: 20, + NumMessages: 25, NumExtensions: 0, NumServices: 1, }, diff --git a/packages/trustix-nix-r13y/reprod-api/api.proto b/packages/trustix-nix-r13y/reprod-api/api.proto index 6dc78e5e..def1a83f 100644 --- a/packages/trustix-nix-r13y/reprod-api/api.proto +++ b/packages/trustix-nix-r13y/reprod-api/api.proto @@ -69,12 +69,30 @@ message DiffRequest { message DiffResponse { string HTMLDiff = 1; } +message AttrReproducibilityTimeSeriesGroupedbyChannelRequest { +} + + +message AttrReproducibilityTimeSeriesGroupedbyChannelResponse { + message Channel { + map Attrs = 1; + } + + map Channels = 1; +} + service ReproducibilityAPI { rpc DerivationReproducibility(DerivationReproducibilityRequest) returns (DerivationReproducibilityResponse) {} + rpc AttrReproducibilityTimeSeries(AttrReproducibilityTimeSeriesRequest) returns (AttrReproducibilityTimeSeriesResponse) {} + + rpc AttrReproducibilityTimeSeriesGroupedbyChannel(AttrReproducibilityTimeSeriesGroupedbyChannelRequest) + returns (AttrReproducibilityTimeSeriesGroupedbyChannelResponse) {} + rpc SuggestAttribute(SuggestsAttributeRequest) returns (SuggestAttributeResponse) {} + rpc Diff(DiffRequest) returns (DiffResponse) {} } diff --git a/packages/trustix-nix-r13y/reprod-api/reprod_apiconnect/api.connect.go b/packages/trustix-nix-r13y/reprod-api/reprod_apiconnect/api.connect.go index e88e725f..74429ad7 100644 --- a/packages/trustix-nix-r13y/reprod-api/reprod_apiconnect/api.connect.go +++ b/packages/trustix-nix-r13y/reprod-api/reprod_apiconnect/api.connect.go @@ -29,6 +29,7 @@ const ( type ReproducibilityAPIClient interface { DerivationReproducibility(context.Context, *connect_go.Request[reprod_api.DerivationReproducibilityRequest]) (*connect_go.Response[reprod_api.DerivationReproducibilityResponse], error) AttrReproducibilityTimeSeries(context.Context, *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesResponse], error) + AttrReproducibilityTimeSeriesGroupedbyChannel(context.Context, *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelResponse], error) SuggestAttribute(context.Context, *connect_go.Request[reprod_api.SuggestsAttributeRequest]) (*connect_go.Response[reprod_api.SuggestAttributeResponse], error) Diff(context.Context, *connect_go.Request[reprod_api.DiffRequest]) (*connect_go.Response[reprod_api.DiffResponse], error) } @@ -53,6 +54,11 @@ func NewReproducibilityAPIClient(httpClient connect_go.HTTPClient, baseURL strin baseURL+"/reprod_api.v1.ReproducibilityAPI/AttrReproducibilityTimeSeries", opts..., ), + attrReproducibilityTimeSeriesGroupedbyChannel: connect_go.NewClient[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelRequest, reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelResponse]( + httpClient, + baseURL+"/reprod_api.v1.ReproducibilityAPI/AttrReproducibilityTimeSeriesGroupedbyChannel", + opts..., + ), suggestAttribute: connect_go.NewClient[reprod_api.SuggestsAttributeRequest, reprod_api.SuggestAttributeResponse]( httpClient, baseURL+"/reprod_api.v1.ReproducibilityAPI/SuggestAttribute", @@ -68,10 +74,11 @@ func NewReproducibilityAPIClient(httpClient connect_go.HTTPClient, baseURL strin // reproducibilityAPIClient implements ReproducibilityAPIClient. type reproducibilityAPIClient struct { - derivationReproducibility *connect_go.Client[reprod_api.DerivationReproducibilityRequest, reprod_api.DerivationReproducibilityResponse] - attrReproducibilityTimeSeries *connect_go.Client[reprod_api.AttrReproducibilityTimeSeriesRequest, reprod_api.AttrReproducibilityTimeSeriesResponse] - suggestAttribute *connect_go.Client[reprod_api.SuggestsAttributeRequest, reprod_api.SuggestAttributeResponse] - diff *connect_go.Client[reprod_api.DiffRequest, reprod_api.DiffResponse] + derivationReproducibility *connect_go.Client[reprod_api.DerivationReproducibilityRequest, reprod_api.DerivationReproducibilityResponse] + attrReproducibilityTimeSeries *connect_go.Client[reprod_api.AttrReproducibilityTimeSeriesRequest, reprod_api.AttrReproducibilityTimeSeriesResponse] + attrReproducibilityTimeSeriesGroupedbyChannel *connect_go.Client[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelRequest, reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelResponse] + suggestAttribute *connect_go.Client[reprod_api.SuggestsAttributeRequest, reprod_api.SuggestAttributeResponse] + diff *connect_go.Client[reprod_api.DiffRequest, reprod_api.DiffResponse] } // DerivationReproducibility calls reprod_api.v1.ReproducibilityAPI.DerivationReproducibility. @@ -85,6 +92,12 @@ func (c *reproducibilityAPIClient) AttrReproducibilityTimeSeries(ctx context.Con return c.attrReproducibilityTimeSeries.CallUnary(ctx, req) } +// AttrReproducibilityTimeSeriesGroupedbyChannel calls +// reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeriesGroupedbyChannel. +func (c *reproducibilityAPIClient) AttrReproducibilityTimeSeriesGroupedbyChannel(ctx context.Context, req *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelResponse], error) { + return c.attrReproducibilityTimeSeriesGroupedbyChannel.CallUnary(ctx, req) +} + // SuggestAttribute calls reprod_api.v1.ReproducibilityAPI.SuggestAttribute. func (c *reproducibilityAPIClient) SuggestAttribute(ctx context.Context, req *connect_go.Request[reprod_api.SuggestsAttributeRequest]) (*connect_go.Response[reprod_api.SuggestAttributeResponse], error) { return c.suggestAttribute.CallUnary(ctx, req) @@ -99,6 +112,7 @@ func (c *reproducibilityAPIClient) Diff(ctx context.Context, req *connect_go.Req type ReproducibilityAPIHandler interface { DerivationReproducibility(context.Context, *connect_go.Request[reprod_api.DerivationReproducibilityRequest]) (*connect_go.Response[reprod_api.DerivationReproducibilityResponse], error) AttrReproducibilityTimeSeries(context.Context, *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesResponse], error) + AttrReproducibilityTimeSeriesGroupedbyChannel(context.Context, *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelResponse], error) SuggestAttribute(context.Context, *connect_go.Request[reprod_api.SuggestsAttributeRequest]) (*connect_go.Response[reprod_api.SuggestAttributeResponse], error) Diff(context.Context, *connect_go.Request[reprod_api.DiffRequest]) (*connect_go.Response[reprod_api.DiffResponse], error) } @@ -120,6 +134,11 @@ func NewReproducibilityAPIHandler(svc ReproducibilityAPIHandler, opts ...connect svc.AttrReproducibilityTimeSeries, opts..., )) + mux.Handle("/reprod_api.v1.ReproducibilityAPI/AttrReproducibilityTimeSeriesGroupedbyChannel", connect_go.NewUnaryHandler( + "/reprod_api.v1.ReproducibilityAPI/AttrReproducibilityTimeSeriesGroupedbyChannel", + svc.AttrReproducibilityTimeSeriesGroupedbyChannel, + opts..., + )) mux.Handle("/reprod_api.v1.ReproducibilityAPI/SuggestAttribute", connect_go.NewUnaryHandler( "/reprod_api.v1.ReproducibilityAPI/SuggestAttribute", svc.SuggestAttribute, @@ -144,6 +163,10 @@ func (UnimplementedReproducibilityAPIHandler) AttrReproducibilityTimeSeries(cont return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeries is not implemented")) } +func (UnimplementedReproducibilityAPIHandler) AttrReproducibilityTimeSeriesGroupedbyChannel(context.Context, *connect_go.Request[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelRequest]) (*connect_go.Response[reprod_api.AttrReproducibilityTimeSeriesGroupedbyChannelResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("reprod_api.v1.ReproducibilityAPI.AttrReproducibilityTimeSeriesGroupedbyChannel is not implemented")) +} + func (UnimplementedReproducibilityAPIHandler) SuggestAttribute(context.Context, *connect_go.Request[reprod_api.SuggestsAttributeRequest]) (*connect_go.Response[reprod_api.SuggestAttributeResponse], error) { return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("reprod_api.v1.ReproducibilityAPI.SuggestAttribute is not implemented")) } From cfcc38cdc5bb18e914256d9b85c2c2faf64f2f7f Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 14 Oct 2022 23:25:07 +1300 Subject: [PATCH 27/49] go-lib: Add early error to parallell executor --- packages/go-lib/executor/executor.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/go-lib/executor/executor.go b/packages/go-lib/executor/executor.go index 0e7a7da6..22d9fe29 100644 --- a/packages/go-lib/executor/executor.go +++ b/packages/go-lib/executor/executor.go @@ -31,7 +31,11 @@ func NewParallellExecutor() *ParallellExecutor { } } -func (e *ParallellExecutor) Add(fn func() error) { +func (e *ParallellExecutor) Add(fn func() error) error { + if e.err != nil { + return e.err + } + e.wg.Add(1) go func() { @@ -42,6 +46,8 @@ func (e *ParallellExecutor) Add(fn func() error) { e.errChan <- err } }() + + return nil } func (e *ParallellExecutor) Wait() error { From 6e34c403ed0a6c8246a762cf58f96b62148d2e1c Mon Sep 17 00:00:00 2001 From: adisbladis Date: Fri, 14 Oct 2022 23:25:49 +1300 Subject: [PATCH 28/49] trustix-nix-r13y-web: Add attrs attrs landing page --- packages/trustix-nix-r13y-web/src/App.tsx | 46 ++++- packages/trustix-nix-r13y-web/src/client.tsx | 14 ++ .../trustix-nix-r13y-web/src/pages/attrs.tsx | 184 ++++++++++++++++++ .../trustix-nix-r13y-web/src/pages/drv.tsx | 18 +- packages/trustix-nix-r13y-web/src/widgets.tsx | 1 + 5 files changed, 239 insertions(+), 24 deletions(-) create mode 100644 packages/trustix-nix-r13y-web/src/client.tsx create mode 100644 packages/trustix-nix-r13y-web/src/pages/attrs.tsx create mode 100644 packages/trustix-nix-r13y-web/src/widgets.tsx diff --git a/packages/trustix-nix-r13y-web/src/App.tsx b/packages/trustix-nix-r13y-web/src/App.tsx index fcbb7122..62ecb880 100644 --- a/packages/trustix-nix-r13y-web/src/App.tsx +++ b/packages/trustix-nix-r13y-web/src/App.tsx @@ -1,9 +1,20 @@ import type { Component } from "solid-js"; -import { lazy, onMount } from "solid-js"; +import { lazy, onMount, For } from "solid-js"; import { Routes, Route, A } from "@solidjs/router"; import { themeChange } from "theme-change"; const Derivation = lazy(() => import("./pages/drv")); +const Attrs = lazy(() => import("./pages/attrs")); + +const links: { + title: string; + href: string; +}[] = [ + { + title: "Attributes", + href: "/attrs", + }, +]; const App: Component = () => { onMount(async () => { @@ -12,16 +23,33 @@ const App: Component = () => { return ( <> -
-