From a43ef7c24272c55a29c3800bd38b6f8ef040dfee Mon Sep 17 00:00:00 2001 From: Alex Dunmow Date: Tue, 7 Jul 2026 13:22:09 +0800 Subject: [PATCH] feat(abi)!: RenderTemplateResponse returns TemplateDocument (P3 flag-day) --- abi/proto/v1/render.proto | 22 ++- abi/v1/render.pb.go | 298 ++++++++++++++++++++++++++------------ 2 files changed, 223 insertions(+), 97 deletions(-) diff --git a/abi/proto/v1/render.proto b/abi/proto/v1/render.proto index 54f62c8..dda13fa 100644 --- a/abi/proto/v1/render.proto +++ b/abi/proto/v1/render.proto @@ -55,7 +55,27 @@ message RenderTemplateRequest { } message RenderTemplateResponse { - bytes html = 1; + // Field 1 was `bytes html` — the guest-rendered full document, retired + // flag-day in P3 (host-side chrome composition). Reserved so a stale + // pre-v0.2.0 artifact decodes to an EMPTY document and the host can fail + // that render with an explicit republish error instead of mis-parsing. + reserved 1; + TemplateDocument document = 2; +} + +// TemplateDocument is a guest template's contribution to a page. The HOST +// owns the document envelope: it composes doctype/// with +// the cms-authored bn chrome, built from the same doc map it sent the guest +// as doc_json (see cms docs/superpowers/specs/2026-07-07-host-chrome-injection-design.md). +message TemplateDocument { + bytes body_html = 1; // inner content + string body_class = 2; // + string lang = 3; // ; empty means host default "en" + bytes head_extra_html = 4; // appended inside , after bn.Head + bytes body_end_extra_html = 5; // appended before , after bn.BodyEnd + // Extra -element attributes (e.g. data-theme). A "lang" key here is + // ignored — the lang field wins. + map html_attrs = 6; } // RenderTagRequest invokes a plugin-declared template tag (HOOK_RENDER_TAG). diff --git a/abi/v1/render.pb.go b/abi/v1/render.pb.go index 8238edb..2f2841e 100644 --- a/abi/v1/render.pb.go +++ b/abi/v1/render.pb.go @@ -274,7 +274,7 @@ func (x *RenderTemplateRequest) GetRenderContext() *RenderContext { type RenderTemplateResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - Html []byte `protobuf:"bytes,1,opt,name=html,proto3" json:"html,omitempty"` + Document *TemplateDocument `protobuf:"bytes,2,opt,name=document,proto3" json:"document,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -309,9 +309,99 @@ func (*RenderTemplateResponse) Descriptor() ([]byte, []int) { return file_v1_render_proto_rawDescGZIP(), []int{4} } -func (x *RenderTemplateResponse) GetHtml() []byte { +func (x *RenderTemplateResponse) GetDocument() *TemplateDocument { if x != nil { - return x.Html + return x.Document + } + return nil +} + +// TemplateDocument is a guest template's contribution to a page. The HOST +// owns the document envelope: it composes doctype/// with +// the cms-authored bn chrome, built from the same doc map it sent the guest +// as doc_json (see cms docs/superpowers/specs/2026-07-07-host-chrome-injection-design.md). +type TemplateDocument struct { + state protoimpl.MessageState `protogen:"open.v1"` + BodyHtml []byte `protobuf:"bytes,1,opt,name=body_html,json=bodyHtml,proto3" json:"body_html,omitempty"` // inner content + BodyClass string `protobuf:"bytes,2,opt,name=body_class,json=bodyClass,proto3" json:"body_class,omitempty"` // + Lang string `protobuf:"bytes,3,opt,name=lang,proto3" json:"lang,omitempty"` // ; empty means host default "en" + HeadExtraHtml []byte `protobuf:"bytes,4,opt,name=head_extra_html,json=headExtraHtml,proto3" json:"head_extra_html,omitempty"` // appended inside , after bn.Head + BodyEndExtraHtml []byte `protobuf:"bytes,5,opt,name=body_end_extra_html,json=bodyEndExtraHtml,proto3" json:"body_end_extra_html,omitempty"` // appended before , after bn.BodyEnd + // Extra -element attributes (e.g. data-theme). A "lang" key here is + // ignored — the lang field wins. + HtmlAttrs map[string]string `protobuf:"bytes,6,rep,name=html_attrs,json=htmlAttrs,proto3" json:"html_attrs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TemplateDocument) Reset() { + *x = TemplateDocument{} + mi := &file_v1_render_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TemplateDocument) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TemplateDocument) ProtoMessage() {} + +func (x *TemplateDocument) ProtoReflect() protoreflect.Message { + mi := &file_v1_render_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TemplateDocument.ProtoReflect.Descriptor instead. +func (*TemplateDocument) Descriptor() ([]byte, []int) { + return file_v1_render_proto_rawDescGZIP(), []int{5} +} + +func (x *TemplateDocument) GetBodyHtml() []byte { + if x != nil { + return x.BodyHtml + } + return nil +} + +func (x *TemplateDocument) GetBodyClass() string { + if x != nil { + return x.BodyClass + } + return "" +} + +func (x *TemplateDocument) GetLang() string { + if x != nil { + return x.Lang + } + return "" +} + +func (x *TemplateDocument) GetHeadExtraHtml() []byte { + if x != nil { + return x.HeadExtraHtml + } + return nil +} + +func (x *TemplateDocument) GetBodyEndExtraHtml() []byte { + if x != nil { + return x.BodyEndExtraHtml + } + return nil +} + +func (x *TemplateDocument) GetHtmlAttrs() map[string]string { + if x != nil { + return x.HtmlAttrs } return nil } @@ -334,7 +424,7 @@ type RenderTagRequest struct { func (x *RenderTagRequest) Reset() { *x = RenderTagRequest{} - mi := &file_v1_render_proto_msgTypes[5] + mi := &file_v1_render_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -346,7 +436,7 @@ func (x *RenderTagRequest) String() string { func (*RenderTagRequest) ProtoMessage() {} func (x *RenderTagRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[5] + mi := &file_v1_render_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -359,7 +449,7 @@ func (x *RenderTagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderTagRequest.ProtoReflect.Descriptor instead. func (*RenderTagRequest) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{5} + return file_v1_render_proto_rawDescGZIP(), []int{6} } func (x *RenderTagRequest) GetTagName() string { @@ -396,7 +486,7 @@ type RenderTagResponse struct { func (x *RenderTagResponse) Reset() { *x = RenderTagResponse{} - mi := &file_v1_render_proto_msgTypes[6] + mi := &file_v1_render_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -408,7 +498,7 @@ func (x *RenderTagResponse) String() string { func (*RenderTagResponse) ProtoMessage() {} func (x *RenderTagResponse) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[6] + mi := &file_v1_render_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -421,7 +511,7 @@ func (x *RenderTagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderTagResponse.ProtoReflect.Descriptor instead. func (*RenderTagResponse) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{6} + return file_v1_render_proto_rawDescGZIP(), []int{7} } func (x *RenderTagResponse) GetHtml() string { @@ -454,7 +544,7 @@ type ApplyFilterRequest struct { func (x *ApplyFilterRequest) Reset() { *x = ApplyFilterRequest{} - mi := &file_v1_render_proto_msgTypes[7] + mi := &file_v1_render_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -466,7 +556,7 @@ func (x *ApplyFilterRequest) String() string { func (*ApplyFilterRequest) ProtoMessage() {} func (x *ApplyFilterRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[7] + mi := &file_v1_render_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -479,7 +569,7 @@ func (x *ApplyFilterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyFilterRequest.ProtoReflect.Descriptor instead. func (*ApplyFilterRequest) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{7} + return file_v1_render_proto_rawDescGZIP(), []int{8} } func (x *ApplyFilterRequest) GetFilterName() string { @@ -515,7 +605,7 @@ type ApplyFilterResponse struct { func (x *ApplyFilterResponse) Reset() { *x = ApplyFilterResponse{} - mi := &file_v1_render_proto_msgTypes[8] + mi := &file_v1_render_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -527,7 +617,7 @@ func (x *ApplyFilterResponse) String() string { func (*ApplyFilterResponse) ProtoMessage() {} func (x *ApplyFilterResponse) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[8] + mi := &file_v1_render_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -540,7 +630,7 @@ func (x *ApplyFilterResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyFilterResponse.ProtoReflect.Descriptor instead. func (*ApplyFilterResponse) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{8} + return file_v1_render_proto_rawDescGZIP(), []int{9} } func (x *ApplyFilterResponse) GetOutput() string { @@ -604,7 +694,7 @@ type RenderContext struct { func (x *RenderContext) Reset() { *x = RenderContext{} - mi := &file_v1_render_proto_msgTypes[9] + mi := &file_v1_render_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -616,7 +706,7 @@ func (x *RenderContext) String() string { func (*RenderContext) ProtoMessage() {} func (x *RenderContext) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[9] + mi := &file_v1_render_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -629,7 +719,7 @@ func (x *RenderContext) ProtoReflect() protoreflect.Message { // Deprecated: Use RenderContext.ProtoReflect.Descriptor instead. func (*RenderContext) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{9} + return file_v1_render_proto_rawDescGZIP(), []int{10} } func (x *RenderContext) GetRequest() *RequestInfo { @@ -778,7 +868,7 @@ type RequestInfo struct { func (x *RequestInfo) Reset() { *x = RequestInfo{} - mi := &file_v1_render_proto_msgTypes[10] + mi := &file_v1_render_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -790,7 +880,7 @@ func (x *RequestInfo) String() string { func (*RequestInfo) ProtoMessage() {} func (x *RequestInfo) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[10] + mi := &file_v1_render_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -803,7 +893,7 @@ func (x *RequestInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestInfo.ProtoReflect.Descriptor instead. func (*RequestInfo) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{10} + return file_v1_render_proto_rawDescGZIP(), []int{11} } func (x *RequestInfo) GetMethod() string { @@ -890,7 +980,7 @@ type PageContext struct { func (x *PageContext) Reset() { *x = PageContext{} - mi := &file_v1_render_proto_msgTypes[11] + mi := &file_v1_render_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -902,7 +992,7 @@ func (x *PageContext) String() string { func (*PageContext) ProtoMessage() {} func (x *PageContext) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[11] + mi := &file_v1_render_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -915,7 +1005,7 @@ func (x *PageContext) ProtoReflect() protoreflect.Message { // Deprecated: Use PageContext.ProtoReflect.Descriptor instead. func (*PageContext) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{11} + return file_v1_render_proto_rawDescGZIP(), []int{12} } func (x *PageContext) GetId() string { @@ -971,7 +1061,7 @@ type PostContext struct { func (x *PostContext) Reset() { *x = PostContext{} - mi := &file_v1_render_proto_msgTypes[12] + mi := &file_v1_render_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -983,7 +1073,7 @@ func (x *PostContext) String() string { func (*PostContext) ProtoMessage() {} func (x *PostContext) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[12] + mi := &file_v1_render_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -996,7 +1086,7 @@ func (x *PostContext) ProtoReflect() protoreflect.Message { // Deprecated: Use PostContext.ProtoReflect.Descriptor instead. func (*PostContext) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{12} + return file_v1_render_proto_rawDescGZIP(), []int{13} } func (x *PostContext) GetId() string { @@ -1076,7 +1166,7 @@ type AuthorContext struct { func (x *AuthorContext) Reset() { *x = AuthorContext{} - mi := &file_v1_render_proto_msgTypes[13] + mi := &file_v1_render_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1088,7 +1178,7 @@ func (x *AuthorContext) String() string { func (*AuthorContext) ProtoMessage() {} func (x *AuthorContext) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[13] + mi := &file_v1_render_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1101,7 +1191,7 @@ func (x *AuthorContext) ProtoReflect() protoreflect.Message { // Deprecated: Use AuthorContext.ProtoReflect.Descriptor instead. func (*AuthorContext) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{13} + return file_v1_render_proto_rawDescGZIP(), []int{14} } func (x *AuthorContext) GetId() string { @@ -1151,7 +1241,7 @@ type CategoryContext struct { func (x *CategoryContext) Reset() { *x = CategoryContext{} - mi := &file_v1_render_proto_msgTypes[14] + mi := &file_v1_render_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1163,7 +1253,7 @@ func (x *CategoryContext) String() string { func (*CategoryContext) ProtoMessage() {} func (x *CategoryContext) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[14] + mi := &file_v1_render_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1176,7 +1266,7 @@ func (x *CategoryContext) ProtoReflect() protoreflect.Message { // Deprecated: Use CategoryContext.ProtoReflect.Descriptor instead. func (*CategoryContext) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{14} + return file_v1_render_proto_rawDescGZIP(), []int{15} } func (x *CategoryContext) GetId() string { @@ -1212,7 +1302,7 @@ type MasterPageContext struct { func (x *MasterPageContext) Reset() { *x = MasterPageContext{} - mi := &file_v1_render_proto_msgTypes[15] + mi := &file_v1_render_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1224,7 +1314,7 @@ func (x *MasterPageContext) String() string { func (*MasterPageContext) ProtoMessage() {} func (x *MasterPageContext) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[15] + mi := &file_v1_render_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1237,7 +1327,7 @@ func (x *MasterPageContext) ProtoReflect() protoreflect.Message { // Deprecated: Use MasterPageContext.ProtoReflect.Descriptor instead. func (*MasterPageContext) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{15} + return file_v1_render_proto_rawDescGZIP(), []int{16} } func (x *MasterPageContext) GetId() string { @@ -1274,7 +1364,7 @@ type HumanProofBanner struct { func (x *HumanProofBanner) Reset() { *x = HumanProofBanner{} - mi := &file_v1_render_proto_msgTypes[16] + mi := &file_v1_render_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1286,7 +1376,7 @@ func (x *HumanProofBanner) String() string { func (*HumanProofBanner) ProtoMessage() {} func (x *HumanProofBanner) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[16] + mi := &file_v1_render_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1299,7 +1389,7 @@ func (x *HumanProofBanner) ProtoReflect() protoreflect.Message { // Deprecated: Use HumanProofBanner.ProtoReflect.Descriptor instead. func (*HumanProofBanner) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{16} + return file_v1_render_proto_rawDescGZIP(), []int{17} } func (x *HumanProofBanner) GetActiveTimeMinutes() int32 { @@ -1343,7 +1433,7 @@ type DetailRow struct { func (x *DetailRow) Reset() { *x = DetailRow{} - mi := &file_v1_render_proto_msgTypes[17] + mi := &file_v1_render_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1355,7 +1445,7 @@ func (x *DetailRow) String() string { func (*DetailRow) ProtoMessage() {} func (x *DetailRow) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[17] + mi := &file_v1_render_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1368,7 +1458,7 @@ func (x *DetailRow) ProtoReflect() protoreflect.Message { // Deprecated: Use DetailRow.ProtoReflect.Descriptor instead. func (*DetailRow) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{17} + return file_v1_render_proto_rawDescGZIP(), []int{18} } func (x *DetailRow) GetTableId() string { @@ -1440,7 +1530,7 @@ type BlockContext struct { func (x *BlockContext) Reset() { *x = BlockContext{} - mi := &file_v1_render_proto_msgTypes[18] + mi := &file_v1_render_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1452,7 +1542,7 @@ func (x *BlockContext) String() string { func (*BlockContext) ProtoMessage() {} func (x *BlockContext) ProtoReflect() protoreflect.Message { - mi := &file_v1_render_proto_msgTypes[18] + mi := &file_v1_render_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1465,7 +1555,7 @@ func (x *BlockContext) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockContext.ProtoReflect.Descriptor instead. func (*BlockContext) Descriptor() ([]byte, []int) { - return file_v1_render_proto_rawDescGZIP(), []int{18} + return file_v1_render_proto_rawDescGZIP(), []int{19} } func (x *BlockContext) GetUrl() string { @@ -1752,9 +1842,21 @@ const file_v1_render_proto_rawDesc = "" + "\x15RenderTemplateRequest\x12!\n" + "\ftemplate_key\x18\x01 \x01(\tR\vtemplateKey\x12\x19\n" + "\bdoc_json\x18\x02 \x01(\fR\adocJson\x12<\n" + - "\x0erender_context\x18\x03 \x01(\v2\x15.abi.v1.RenderContextR\rrenderContext\",\n" + - "\x16RenderTemplateResponse\x12\x12\n" + - "\x04html\x18\x01 \x01(\fR\x04html\"\x88\x01\n" + + "\x0erender_context\x18\x03 \x01(\v2\x15.abi.v1.RenderContextR\rrenderContext\"T\n" + + "\x16RenderTemplateResponse\x124\n" + + "\bdocument\x18\x02 \x01(\v2\x18.abi.v1.TemplateDocumentR\bdocumentJ\x04\b\x01\x10\x02\"\xbf\x02\n" + + "\x10TemplateDocument\x12\x1b\n" + + "\tbody_html\x18\x01 \x01(\fR\bbodyHtml\x12\x1d\n" + + "\n" + + "body_class\x18\x02 \x01(\tR\tbodyClass\x12\x12\n" + + "\x04lang\x18\x03 \x01(\tR\x04lang\x12&\n" + + "\x0fhead_extra_html\x18\x04 \x01(\fR\rheadExtraHtml\x12-\n" + + "\x13body_end_extra_html\x18\x05 \x01(\fR\x10bodyEndExtraHtml\x12F\n" + + "\n" + + "html_attrs\x18\x06 \x03(\v2'.abi.v1.TemplateDocument.HtmlAttrsEntryR\thtmlAttrs\x1a<\n" + + "\x0eHtmlAttrsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x88\x01\n" + "\x10RenderTagRequest\x12\x19\n" + "\btag_name\x18\x01 \x01(\tR\atagName\x12\x1b\n" + "\targs_json\x18\x02 \x01(\fR\bargsJson\x12<\n" + @@ -1923,62 +2025,66 @@ func file_v1_render_proto_rawDescGZIP() []byte { return file_v1_render_proto_rawDescData } -var file_v1_render_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_v1_render_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_v1_render_proto_goTypes = []any{ (*RenderBlockRequest)(nil), // 0: abi.v1.RenderBlockRequest (*RenderBlockResponse)(nil), // 1: abi.v1.RenderBlockResponse (*PoweredBlock)(nil), // 2: abi.v1.PoweredBlock (*RenderTemplateRequest)(nil), // 3: abi.v1.RenderTemplateRequest (*RenderTemplateResponse)(nil), // 4: abi.v1.RenderTemplateResponse - (*RenderTagRequest)(nil), // 5: abi.v1.RenderTagRequest - (*RenderTagResponse)(nil), // 6: abi.v1.RenderTagResponse - (*ApplyFilterRequest)(nil), // 7: abi.v1.ApplyFilterRequest - (*ApplyFilterResponse)(nil), // 8: abi.v1.ApplyFilterResponse - (*RenderContext)(nil), // 9: abi.v1.RenderContext - (*RequestInfo)(nil), // 10: abi.v1.RequestInfo - (*PageContext)(nil), // 11: abi.v1.PageContext - (*PostContext)(nil), // 12: abi.v1.PostContext - (*AuthorContext)(nil), // 13: abi.v1.AuthorContext - (*CategoryContext)(nil), // 14: abi.v1.CategoryContext - (*MasterPageContext)(nil), // 15: abi.v1.MasterPageContext - (*HumanProofBanner)(nil), // 16: abi.v1.HumanProofBanner - (*DetailRow)(nil), // 17: abi.v1.DetailRow - (*BlockContext)(nil), // 18: abi.v1.BlockContext - nil, // 19: abi.v1.RenderContext.InjectedSlotsEntry - nil, // 20: abi.v1.RequestInfo.HeadersEntry - nil, // 21: abi.v1.RequestInfo.CookiesEntry - nil, // 22: abi.v1.BlockContext.QueryEntry - nil, // 23: abi.v1.BlockContext.CookiesEntry - nil, // 24: abi.v1.BlockContext.HeadersEntry - (*timestamppb.Timestamp)(nil), // 25: google.protobuf.Timestamp + (*TemplateDocument)(nil), // 5: abi.v1.TemplateDocument + (*RenderTagRequest)(nil), // 6: abi.v1.RenderTagRequest + (*RenderTagResponse)(nil), // 7: abi.v1.RenderTagResponse + (*ApplyFilterRequest)(nil), // 8: abi.v1.ApplyFilterRequest + (*ApplyFilterResponse)(nil), // 9: abi.v1.ApplyFilterResponse + (*RenderContext)(nil), // 10: abi.v1.RenderContext + (*RequestInfo)(nil), // 11: abi.v1.RequestInfo + (*PageContext)(nil), // 12: abi.v1.PageContext + (*PostContext)(nil), // 13: abi.v1.PostContext + (*AuthorContext)(nil), // 14: abi.v1.AuthorContext + (*CategoryContext)(nil), // 15: abi.v1.CategoryContext + (*MasterPageContext)(nil), // 16: abi.v1.MasterPageContext + (*HumanProofBanner)(nil), // 17: abi.v1.HumanProofBanner + (*DetailRow)(nil), // 18: abi.v1.DetailRow + (*BlockContext)(nil), // 19: abi.v1.BlockContext + nil, // 20: abi.v1.TemplateDocument.HtmlAttrsEntry + nil, // 21: abi.v1.RenderContext.InjectedSlotsEntry + nil, // 22: abi.v1.RequestInfo.HeadersEntry + nil, // 23: abi.v1.RequestInfo.CookiesEntry + nil, // 24: abi.v1.BlockContext.QueryEntry + nil, // 25: abi.v1.BlockContext.CookiesEntry + nil, // 26: abi.v1.BlockContext.HeadersEntry + (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp } var file_v1_render_proto_depIdxs = []int32{ - 9, // 0: abi.v1.RenderBlockRequest.render_context:type_name -> abi.v1.RenderContext + 10, // 0: abi.v1.RenderBlockRequest.render_context:type_name -> abi.v1.RenderContext 2, // 1: abi.v1.RenderBlockResponse.powered:type_name -> abi.v1.PoweredBlock - 9, // 2: abi.v1.RenderTemplateRequest.render_context:type_name -> abi.v1.RenderContext - 9, // 3: abi.v1.RenderTagRequest.render_context:type_name -> abi.v1.RenderContext - 10, // 4: abi.v1.RenderContext.request:type_name -> abi.v1.RequestInfo - 18, // 5: abi.v1.RenderContext.block_context:type_name -> abi.v1.BlockContext - 11, // 6: abi.v1.RenderContext.page:type_name -> abi.v1.PageContext - 12, // 7: abi.v1.RenderContext.post:type_name -> abi.v1.PostContext - 13, // 8: abi.v1.RenderContext.author:type_name -> abi.v1.AuthorContext - 14, // 9: abi.v1.RenderContext.category:type_name -> abi.v1.CategoryContext - 15, // 10: abi.v1.RenderContext.master_page:type_name -> abi.v1.MasterPageContext - 19, // 11: abi.v1.RenderContext.injected_slots:type_name -> abi.v1.RenderContext.InjectedSlotsEntry - 16, // 12: abi.v1.RenderContext.human_proof_banner:type_name -> abi.v1.HumanProofBanner - 17, // 13: abi.v1.RenderContext.detail_row:type_name -> abi.v1.DetailRow - 20, // 14: abi.v1.RequestInfo.headers:type_name -> abi.v1.RequestInfo.HeadersEntry - 21, // 15: abi.v1.RequestInfo.cookies:type_name -> abi.v1.RequestInfo.CookiesEntry - 25, // 16: abi.v1.PostContext.published_at:type_name -> google.protobuf.Timestamp - 25, // 17: abi.v1.BlockContext.now:type_name -> google.protobuf.Timestamp - 22, // 18: abi.v1.BlockContext.query:type_name -> abi.v1.BlockContext.QueryEntry - 23, // 19: abi.v1.BlockContext.cookies:type_name -> abi.v1.BlockContext.CookiesEntry - 24, // 20: abi.v1.BlockContext.headers:type_name -> abi.v1.BlockContext.HeadersEntry - 21, // [21:21] is the sub-list for method output_type - 21, // [21:21] is the sub-list for method input_type - 21, // [21:21] is the sub-list for extension type_name - 21, // [21:21] is the sub-list for extension extendee - 0, // [0:21] is the sub-list for field type_name + 10, // 2: abi.v1.RenderTemplateRequest.render_context:type_name -> abi.v1.RenderContext + 5, // 3: abi.v1.RenderTemplateResponse.document:type_name -> abi.v1.TemplateDocument + 20, // 4: abi.v1.TemplateDocument.html_attrs:type_name -> abi.v1.TemplateDocument.HtmlAttrsEntry + 10, // 5: abi.v1.RenderTagRequest.render_context:type_name -> abi.v1.RenderContext + 11, // 6: abi.v1.RenderContext.request:type_name -> abi.v1.RequestInfo + 19, // 7: abi.v1.RenderContext.block_context:type_name -> abi.v1.BlockContext + 12, // 8: abi.v1.RenderContext.page:type_name -> abi.v1.PageContext + 13, // 9: abi.v1.RenderContext.post:type_name -> abi.v1.PostContext + 14, // 10: abi.v1.RenderContext.author:type_name -> abi.v1.AuthorContext + 15, // 11: abi.v1.RenderContext.category:type_name -> abi.v1.CategoryContext + 16, // 12: abi.v1.RenderContext.master_page:type_name -> abi.v1.MasterPageContext + 21, // 13: abi.v1.RenderContext.injected_slots:type_name -> abi.v1.RenderContext.InjectedSlotsEntry + 17, // 14: abi.v1.RenderContext.human_proof_banner:type_name -> abi.v1.HumanProofBanner + 18, // 15: abi.v1.RenderContext.detail_row:type_name -> abi.v1.DetailRow + 22, // 16: abi.v1.RequestInfo.headers:type_name -> abi.v1.RequestInfo.HeadersEntry + 23, // 17: abi.v1.RequestInfo.cookies:type_name -> abi.v1.RequestInfo.CookiesEntry + 27, // 18: abi.v1.PostContext.published_at:type_name -> google.protobuf.Timestamp + 27, // 19: abi.v1.BlockContext.now:type_name -> google.protobuf.Timestamp + 24, // 20: abi.v1.BlockContext.query:type_name -> abi.v1.BlockContext.QueryEntry + 25, // 21: abi.v1.BlockContext.cookies:type_name -> abi.v1.BlockContext.CookiesEntry + 26, // 22: abi.v1.BlockContext.headers:type_name -> abi.v1.BlockContext.HeadersEntry + 23, // [23:23] is the sub-list for method output_type + 23, // [23:23] is the sub-list for method input_type + 23, // [23:23] is the sub-list for extension type_name + 23, // [23:23] is the sub-list for extension extendee + 0, // [0:23] is the sub-list for field type_name } func init() { file_v1_render_proto_init() } @@ -1992,7 +2098,7 @@ func file_v1_render_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_render_proto_rawDesc), len(file_v1_render_proto_rawDesc)), NumEnums: 0, - NumMessages: 25, + NumMessages: 27, NumExtensions: 0, NumServices: 0, },