feat(abi)!: RenderTemplateResponse returns TemplateDocument (P3 flag-day)

This commit is contained in:
Alex Dunmow 2026-07-07 13:22:09 +08:00
parent 1aa4c42d58
commit a43ef7c242
2 changed files with 223 additions and 97 deletions

View File

@ -55,7 +55,27 @@ message RenderTemplateRequest {
} }
message RenderTemplateResponse { 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/<html>/<head>/<body> 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 <body> content
string body_class = 2; // <body class="...">
string lang = 3; // <html lang>; empty means host default "en"
bytes head_extra_html = 4; // appended inside <head>, after bn.Head
bytes body_end_extra_html = 5; // appended before </body>, after bn.BodyEnd
// Extra <html>-element attributes (e.g. data-theme). A "lang" key here is
// ignored the lang field wins.
map<string, string> html_attrs = 6;
} }
// RenderTagRequest invokes a plugin-declared template tag (HOOK_RENDER_TAG). // RenderTagRequest invokes a plugin-declared template tag (HOOK_RENDER_TAG).

View File

@ -274,7 +274,7 @@ func (x *RenderTemplateRequest) GetRenderContext() *RenderContext {
type RenderTemplateResponse struct { type RenderTemplateResponse struct {
state protoimpl.MessageState `protogen:"open.v1"` 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 unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
@ -309,9 +309,99 @@ func (*RenderTemplateResponse) Descriptor() ([]byte, []int) {
return file_v1_render_proto_rawDescGZIP(), []int{4} return file_v1_render_proto_rawDescGZIP(), []int{4}
} }
func (x *RenderTemplateResponse) GetHtml() []byte { func (x *RenderTemplateResponse) GetDocument() *TemplateDocument {
if x != nil { 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/<html>/<head>/<body> 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 <body> content
BodyClass string `protobuf:"bytes,2,opt,name=body_class,json=bodyClass,proto3" json:"body_class,omitempty"` // <body class="...">
Lang string `protobuf:"bytes,3,opt,name=lang,proto3" json:"lang,omitempty"` // <html lang>; 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 <head>, 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 </body>, after bn.BodyEnd
// Extra <html>-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 return nil
} }
@ -334,7 +424,7 @@ type RenderTagRequest struct {
func (x *RenderTagRequest) Reset() { func (x *RenderTagRequest) Reset() {
*x = RenderTagRequest{} *x = RenderTagRequest{}
mi := &file_v1_render_proto_msgTypes[5] mi := &file_v1_render_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -346,7 +436,7 @@ func (x *RenderTagRequest) String() string {
func (*RenderTagRequest) ProtoMessage() {} func (*RenderTagRequest) ProtoMessage() {}
func (x *RenderTagRequest) ProtoReflect() protoreflect.Message { func (x *RenderTagRequest) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[5] mi := &file_v1_render_proto_msgTypes[6]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -359,7 +449,7 @@ func (x *RenderTagRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use RenderTagRequest.ProtoReflect.Descriptor instead. // Deprecated: Use RenderTagRequest.ProtoReflect.Descriptor instead.
func (*RenderTagRequest) Descriptor() ([]byte, []int) { 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 { func (x *RenderTagRequest) GetTagName() string {
@ -396,7 +486,7 @@ type RenderTagResponse struct {
func (x *RenderTagResponse) Reset() { func (x *RenderTagResponse) Reset() {
*x = RenderTagResponse{} *x = RenderTagResponse{}
mi := &file_v1_render_proto_msgTypes[6] mi := &file_v1_render_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -408,7 +498,7 @@ func (x *RenderTagResponse) String() string {
func (*RenderTagResponse) ProtoMessage() {} func (*RenderTagResponse) ProtoMessage() {}
func (x *RenderTagResponse) ProtoReflect() protoreflect.Message { func (x *RenderTagResponse) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[6] mi := &file_v1_render_proto_msgTypes[7]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -421,7 +511,7 @@ func (x *RenderTagResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use RenderTagResponse.ProtoReflect.Descriptor instead. // Deprecated: Use RenderTagResponse.ProtoReflect.Descriptor instead.
func (*RenderTagResponse) Descriptor() ([]byte, []int) { 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 { func (x *RenderTagResponse) GetHtml() string {
@ -454,7 +544,7 @@ type ApplyFilterRequest struct {
func (x *ApplyFilterRequest) Reset() { func (x *ApplyFilterRequest) Reset() {
*x = ApplyFilterRequest{} *x = ApplyFilterRequest{}
mi := &file_v1_render_proto_msgTypes[7] mi := &file_v1_render_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -466,7 +556,7 @@ func (x *ApplyFilterRequest) String() string {
func (*ApplyFilterRequest) ProtoMessage() {} func (*ApplyFilterRequest) ProtoMessage() {}
func (x *ApplyFilterRequest) ProtoReflect() protoreflect.Message { func (x *ApplyFilterRequest) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[7] mi := &file_v1_render_proto_msgTypes[8]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -479,7 +569,7 @@ func (x *ApplyFilterRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ApplyFilterRequest.ProtoReflect.Descriptor instead. // Deprecated: Use ApplyFilterRequest.ProtoReflect.Descriptor instead.
func (*ApplyFilterRequest) Descriptor() ([]byte, []int) { 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 { func (x *ApplyFilterRequest) GetFilterName() string {
@ -515,7 +605,7 @@ type ApplyFilterResponse struct {
func (x *ApplyFilterResponse) Reset() { func (x *ApplyFilterResponse) Reset() {
*x = ApplyFilterResponse{} *x = ApplyFilterResponse{}
mi := &file_v1_render_proto_msgTypes[8] mi := &file_v1_render_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -527,7 +617,7 @@ func (x *ApplyFilterResponse) String() string {
func (*ApplyFilterResponse) ProtoMessage() {} func (*ApplyFilterResponse) ProtoMessage() {}
func (x *ApplyFilterResponse) ProtoReflect() protoreflect.Message { func (x *ApplyFilterResponse) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[8] mi := &file_v1_render_proto_msgTypes[9]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -540,7 +630,7 @@ func (x *ApplyFilterResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ApplyFilterResponse.ProtoReflect.Descriptor instead. // Deprecated: Use ApplyFilterResponse.ProtoReflect.Descriptor instead.
func (*ApplyFilterResponse) Descriptor() ([]byte, []int) { 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 { func (x *ApplyFilterResponse) GetOutput() string {
@ -604,7 +694,7 @@ type RenderContext struct {
func (x *RenderContext) Reset() { func (x *RenderContext) Reset() {
*x = RenderContext{} *x = RenderContext{}
mi := &file_v1_render_proto_msgTypes[9] mi := &file_v1_render_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -616,7 +706,7 @@ func (x *RenderContext) String() string {
func (*RenderContext) ProtoMessage() {} func (*RenderContext) ProtoMessage() {}
func (x *RenderContext) ProtoReflect() protoreflect.Message { func (x *RenderContext) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[9] mi := &file_v1_render_proto_msgTypes[10]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -629,7 +719,7 @@ func (x *RenderContext) ProtoReflect() protoreflect.Message {
// Deprecated: Use RenderContext.ProtoReflect.Descriptor instead. // Deprecated: Use RenderContext.ProtoReflect.Descriptor instead.
func (*RenderContext) Descriptor() ([]byte, []int) { 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 { func (x *RenderContext) GetRequest() *RequestInfo {
@ -778,7 +868,7 @@ type RequestInfo struct {
func (x *RequestInfo) Reset() { func (x *RequestInfo) Reset() {
*x = RequestInfo{} *x = RequestInfo{}
mi := &file_v1_render_proto_msgTypes[10] mi := &file_v1_render_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -790,7 +880,7 @@ func (x *RequestInfo) String() string {
func (*RequestInfo) ProtoMessage() {} func (*RequestInfo) ProtoMessage() {}
func (x *RequestInfo) ProtoReflect() protoreflect.Message { func (x *RequestInfo) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[10] mi := &file_v1_render_proto_msgTypes[11]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -803,7 +893,7 @@ func (x *RequestInfo) ProtoReflect() protoreflect.Message {
// Deprecated: Use RequestInfo.ProtoReflect.Descriptor instead. // Deprecated: Use RequestInfo.ProtoReflect.Descriptor instead.
func (*RequestInfo) Descriptor() ([]byte, []int) { 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 { func (x *RequestInfo) GetMethod() string {
@ -890,7 +980,7 @@ type PageContext struct {
func (x *PageContext) Reset() { func (x *PageContext) Reset() {
*x = PageContext{} *x = PageContext{}
mi := &file_v1_render_proto_msgTypes[11] mi := &file_v1_render_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -902,7 +992,7 @@ func (x *PageContext) String() string {
func (*PageContext) ProtoMessage() {} func (*PageContext) ProtoMessage() {}
func (x *PageContext) ProtoReflect() protoreflect.Message { func (x *PageContext) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[11] mi := &file_v1_render_proto_msgTypes[12]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -915,7 +1005,7 @@ func (x *PageContext) ProtoReflect() protoreflect.Message {
// Deprecated: Use PageContext.ProtoReflect.Descriptor instead. // Deprecated: Use PageContext.ProtoReflect.Descriptor instead.
func (*PageContext) Descriptor() ([]byte, []int) { 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 { func (x *PageContext) GetId() string {
@ -971,7 +1061,7 @@ type PostContext struct {
func (x *PostContext) Reset() { func (x *PostContext) Reset() {
*x = PostContext{} *x = PostContext{}
mi := &file_v1_render_proto_msgTypes[12] mi := &file_v1_render_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -983,7 +1073,7 @@ func (x *PostContext) String() string {
func (*PostContext) ProtoMessage() {} func (*PostContext) ProtoMessage() {}
func (x *PostContext) ProtoReflect() protoreflect.Message { func (x *PostContext) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[12] mi := &file_v1_render_proto_msgTypes[13]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -996,7 +1086,7 @@ func (x *PostContext) ProtoReflect() protoreflect.Message {
// Deprecated: Use PostContext.ProtoReflect.Descriptor instead. // Deprecated: Use PostContext.ProtoReflect.Descriptor instead.
func (*PostContext) Descriptor() ([]byte, []int) { 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 { func (x *PostContext) GetId() string {
@ -1076,7 +1166,7 @@ type AuthorContext struct {
func (x *AuthorContext) Reset() { func (x *AuthorContext) Reset() {
*x = AuthorContext{} *x = AuthorContext{}
mi := &file_v1_render_proto_msgTypes[13] mi := &file_v1_render_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1088,7 +1178,7 @@ func (x *AuthorContext) String() string {
func (*AuthorContext) ProtoMessage() {} func (*AuthorContext) ProtoMessage() {}
func (x *AuthorContext) ProtoReflect() protoreflect.Message { func (x *AuthorContext) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[13] mi := &file_v1_render_proto_msgTypes[14]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1101,7 +1191,7 @@ func (x *AuthorContext) ProtoReflect() protoreflect.Message {
// Deprecated: Use AuthorContext.ProtoReflect.Descriptor instead. // Deprecated: Use AuthorContext.ProtoReflect.Descriptor instead.
func (*AuthorContext) Descriptor() ([]byte, []int) { 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 { func (x *AuthorContext) GetId() string {
@ -1151,7 +1241,7 @@ type CategoryContext struct {
func (x *CategoryContext) Reset() { func (x *CategoryContext) Reset() {
*x = CategoryContext{} *x = CategoryContext{}
mi := &file_v1_render_proto_msgTypes[14] mi := &file_v1_render_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1163,7 +1253,7 @@ func (x *CategoryContext) String() string {
func (*CategoryContext) ProtoMessage() {} func (*CategoryContext) ProtoMessage() {}
func (x *CategoryContext) ProtoReflect() protoreflect.Message { func (x *CategoryContext) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[14] mi := &file_v1_render_proto_msgTypes[15]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1176,7 +1266,7 @@ func (x *CategoryContext) ProtoReflect() protoreflect.Message {
// Deprecated: Use CategoryContext.ProtoReflect.Descriptor instead. // Deprecated: Use CategoryContext.ProtoReflect.Descriptor instead.
func (*CategoryContext) Descriptor() ([]byte, []int) { 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 { func (x *CategoryContext) GetId() string {
@ -1212,7 +1302,7 @@ type MasterPageContext struct {
func (x *MasterPageContext) Reset() { func (x *MasterPageContext) Reset() {
*x = MasterPageContext{} *x = MasterPageContext{}
mi := &file_v1_render_proto_msgTypes[15] mi := &file_v1_render_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1224,7 +1314,7 @@ func (x *MasterPageContext) String() string {
func (*MasterPageContext) ProtoMessage() {} func (*MasterPageContext) ProtoMessage() {}
func (x *MasterPageContext) ProtoReflect() protoreflect.Message { func (x *MasterPageContext) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[15] mi := &file_v1_render_proto_msgTypes[16]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1237,7 +1327,7 @@ func (x *MasterPageContext) ProtoReflect() protoreflect.Message {
// Deprecated: Use MasterPageContext.ProtoReflect.Descriptor instead. // Deprecated: Use MasterPageContext.ProtoReflect.Descriptor instead.
func (*MasterPageContext) Descriptor() ([]byte, []int) { 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 { func (x *MasterPageContext) GetId() string {
@ -1274,7 +1364,7 @@ type HumanProofBanner struct {
func (x *HumanProofBanner) Reset() { func (x *HumanProofBanner) Reset() {
*x = HumanProofBanner{} *x = HumanProofBanner{}
mi := &file_v1_render_proto_msgTypes[16] mi := &file_v1_render_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1286,7 +1376,7 @@ func (x *HumanProofBanner) String() string {
func (*HumanProofBanner) ProtoMessage() {} func (*HumanProofBanner) ProtoMessage() {}
func (x *HumanProofBanner) ProtoReflect() protoreflect.Message { func (x *HumanProofBanner) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[16] mi := &file_v1_render_proto_msgTypes[17]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1299,7 +1389,7 @@ func (x *HumanProofBanner) ProtoReflect() protoreflect.Message {
// Deprecated: Use HumanProofBanner.ProtoReflect.Descriptor instead. // Deprecated: Use HumanProofBanner.ProtoReflect.Descriptor instead.
func (*HumanProofBanner) Descriptor() ([]byte, []int) { 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 { func (x *HumanProofBanner) GetActiveTimeMinutes() int32 {
@ -1343,7 +1433,7 @@ type DetailRow struct {
func (x *DetailRow) Reset() { func (x *DetailRow) Reset() {
*x = DetailRow{} *x = DetailRow{}
mi := &file_v1_render_proto_msgTypes[17] mi := &file_v1_render_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1355,7 +1445,7 @@ func (x *DetailRow) String() string {
func (*DetailRow) ProtoMessage() {} func (*DetailRow) ProtoMessage() {}
func (x *DetailRow) ProtoReflect() protoreflect.Message { func (x *DetailRow) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[17] mi := &file_v1_render_proto_msgTypes[18]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1368,7 +1458,7 @@ func (x *DetailRow) ProtoReflect() protoreflect.Message {
// Deprecated: Use DetailRow.ProtoReflect.Descriptor instead. // Deprecated: Use DetailRow.ProtoReflect.Descriptor instead.
func (*DetailRow) Descriptor() ([]byte, []int) { 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 { func (x *DetailRow) GetTableId() string {
@ -1440,7 +1530,7 @@ type BlockContext struct {
func (x *BlockContext) Reset() { func (x *BlockContext) Reset() {
*x = BlockContext{} *x = BlockContext{}
mi := &file_v1_render_proto_msgTypes[18] mi := &file_v1_render_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1452,7 +1542,7 @@ func (x *BlockContext) String() string {
func (*BlockContext) ProtoMessage() {} func (*BlockContext) ProtoMessage() {}
func (x *BlockContext) ProtoReflect() protoreflect.Message { func (x *BlockContext) ProtoReflect() protoreflect.Message {
mi := &file_v1_render_proto_msgTypes[18] mi := &file_v1_render_proto_msgTypes[19]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1465,7 +1555,7 @@ func (x *BlockContext) ProtoReflect() protoreflect.Message {
// Deprecated: Use BlockContext.ProtoReflect.Descriptor instead. // Deprecated: Use BlockContext.ProtoReflect.Descriptor instead.
func (*BlockContext) Descriptor() ([]byte, []int) { 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 { func (x *BlockContext) GetUrl() string {
@ -1752,9 +1842,21 @@ const file_v1_render_proto_rawDesc = "" +
"\x15RenderTemplateRequest\x12!\n" + "\x15RenderTemplateRequest\x12!\n" +
"\ftemplate_key\x18\x01 \x01(\tR\vtemplateKey\x12\x19\n" + "\ftemplate_key\x18\x01 \x01(\tR\vtemplateKey\x12\x19\n" +
"\bdoc_json\x18\x02 \x01(\fR\adocJson\x12<\n" + "\bdoc_json\x18\x02 \x01(\fR\adocJson\x12<\n" +
"\x0erender_context\x18\x03 \x01(\v2\x15.abi.v1.RenderContextR\rrenderContext\",\n" + "\x0erender_context\x18\x03 \x01(\v2\x15.abi.v1.RenderContextR\rrenderContext\"T\n" +
"\x16RenderTemplateResponse\x12\x12\n" + "\x16RenderTemplateResponse\x124\n" +
"\x04html\x18\x01 \x01(\fR\x04html\"\x88\x01\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" + "\x10RenderTagRequest\x12\x19\n" +
"\btag_name\x18\x01 \x01(\tR\atagName\x12\x1b\n" + "\btag_name\x18\x01 \x01(\tR\atagName\x12\x1b\n" +
"\targs_json\x18\x02 \x01(\fR\bargsJson\x12<\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 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{ var file_v1_render_proto_goTypes = []any{
(*RenderBlockRequest)(nil), // 0: abi.v1.RenderBlockRequest (*RenderBlockRequest)(nil), // 0: abi.v1.RenderBlockRequest
(*RenderBlockResponse)(nil), // 1: abi.v1.RenderBlockResponse (*RenderBlockResponse)(nil), // 1: abi.v1.RenderBlockResponse
(*PoweredBlock)(nil), // 2: abi.v1.PoweredBlock (*PoweredBlock)(nil), // 2: abi.v1.PoweredBlock
(*RenderTemplateRequest)(nil), // 3: abi.v1.RenderTemplateRequest (*RenderTemplateRequest)(nil), // 3: abi.v1.RenderTemplateRequest
(*RenderTemplateResponse)(nil), // 4: abi.v1.RenderTemplateResponse (*RenderTemplateResponse)(nil), // 4: abi.v1.RenderTemplateResponse
(*RenderTagRequest)(nil), // 5: abi.v1.RenderTagRequest (*TemplateDocument)(nil), // 5: abi.v1.TemplateDocument
(*RenderTagResponse)(nil), // 6: abi.v1.RenderTagResponse (*RenderTagRequest)(nil), // 6: abi.v1.RenderTagRequest
(*ApplyFilterRequest)(nil), // 7: abi.v1.ApplyFilterRequest (*RenderTagResponse)(nil), // 7: abi.v1.RenderTagResponse
(*ApplyFilterResponse)(nil), // 8: abi.v1.ApplyFilterResponse (*ApplyFilterRequest)(nil), // 8: abi.v1.ApplyFilterRequest
(*RenderContext)(nil), // 9: abi.v1.RenderContext (*ApplyFilterResponse)(nil), // 9: abi.v1.ApplyFilterResponse
(*RequestInfo)(nil), // 10: abi.v1.RequestInfo (*RenderContext)(nil), // 10: abi.v1.RenderContext
(*PageContext)(nil), // 11: abi.v1.PageContext (*RequestInfo)(nil), // 11: abi.v1.RequestInfo
(*PostContext)(nil), // 12: abi.v1.PostContext (*PageContext)(nil), // 12: abi.v1.PageContext
(*AuthorContext)(nil), // 13: abi.v1.AuthorContext (*PostContext)(nil), // 13: abi.v1.PostContext
(*CategoryContext)(nil), // 14: abi.v1.CategoryContext (*AuthorContext)(nil), // 14: abi.v1.AuthorContext
(*MasterPageContext)(nil), // 15: abi.v1.MasterPageContext (*CategoryContext)(nil), // 15: abi.v1.CategoryContext
(*HumanProofBanner)(nil), // 16: abi.v1.HumanProofBanner (*MasterPageContext)(nil), // 16: abi.v1.MasterPageContext
(*DetailRow)(nil), // 17: abi.v1.DetailRow (*HumanProofBanner)(nil), // 17: abi.v1.HumanProofBanner
(*BlockContext)(nil), // 18: abi.v1.BlockContext (*DetailRow)(nil), // 18: abi.v1.DetailRow
nil, // 19: abi.v1.RenderContext.InjectedSlotsEntry (*BlockContext)(nil), // 19: abi.v1.BlockContext
nil, // 20: abi.v1.RequestInfo.HeadersEntry nil, // 20: abi.v1.TemplateDocument.HtmlAttrsEntry
nil, // 21: abi.v1.RequestInfo.CookiesEntry nil, // 21: abi.v1.RenderContext.InjectedSlotsEntry
nil, // 22: abi.v1.BlockContext.QueryEntry nil, // 22: abi.v1.RequestInfo.HeadersEntry
nil, // 23: abi.v1.BlockContext.CookiesEntry nil, // 23: abi.v1.RequestInfo.CookiesEntry
nil, // 24: abi.v1.BlockContext.HeadersEntry nil, // 24: abi.v1.BlockContext.QueryEntry
(*timestamppb.Timestamp)(nil), // 25: google.protobuf.Timestamp 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{ 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 2, // 1: abi.v1.RenderBlockResponse.powered:type_name -> abi.v1.PoweredBlock
9, // 2: abi.v1.RenderTemplateRequest.render_context:type_name -> abi.v1.RenderContext 10, // 2: abi.v1.RenderTemplateRequest.render_context:type_name -> abi.v1.RenderContext
9, // 3: abi.v1.RenderTagRequest.render_context:type_name -> abi.v1.RenderContext 5, // 3: abi.v1.RenderTemplateResponse.document:type_name -> abi.v1.TemplateDocument
10, // 4: abi.v1.RenderContext.request:type_name -> abi.v1.RequestInfo 20, // 4: abi.v1.TemplateDocument.html_attrs:type_name -> abi.v1.TemplateDocument.HtmlAttrsEntry
18, // 5: abi.v1.RenderContext.block_context:type_name -> abi.v1.BlockContext 10, // 5: abi.v1.RenderTagRequest.render_context:type_name -> abi.v1.RenderContext
11, // 6: abi.v1.RenderContext.page:type_name -> abi.v1.PageContext 11, // 6: abi.v1.RenderContext.request:type_name -> abi.v1.RequestInfo
12, // 7: abi.v1.RenderContext.post:type_name -> abi.v1.PostContext 19, // 7: abi.v1.RenderContext.block_context:type_name -> abi.v1.BlockContext
13, // 8: abi.v1.RenderContext.author:type_name -> abi.v1.AuthorContext 12, // 8: abi.v1.RenderContext.page:type_name -> abi.v1.PageContext
14, // 9: abi.v1.RenderContext.category:type_name -> abi.v1.CategoryContext 13, // 9: abi.v1.RenderContext.post:type_name -> abi.v1.PostContext
15, // 10: abi.v1.RenderContext.master_page:type_name -> abi.v1.MasterPageContext 14, // 10: abi.v1.RenderContext.author:type_name -> abi.v1.AuthorContext
19, // 11: abi.v1.RenderContext.injected_slots:type_name -> abi.v1.RenderContext.InjectedSlotsEntry 15, // 11: abi.v1.RenderContext.category:type_name -> abi.v1.CategoryContext
16, // 12: abi.v1.RenderContext.human_proof_banner:type_name -> abi.v1.HumanProofBanner 16, // 12: abi.v1.RenderContext.master_page:type_name -> abi.v1.MasterPageContext
17, // 13: abi.v1.RenderContext.detail_row:type_name -> abi.v1.DetailRow 21, // 13: abi.v1.RenderContext.injected_slots:type_name -> abi.v1.RenderContext.InjectedSlotsEntry
20, // 14: abi.v1.RequestInfo.headers:type_name -> abi.v1.RequestInfo.HeadersEntry 17, // 14: abi.v1.RenderContext.human_proof_banner:type_name -> abi.v1.HumanProofBanner
21, // 15: abi.v1.RequestInfo.cookies:type_name -> abi.v1.RequestInfo.CookiesEntry 18, // 15: abi.v1.RenderContext.detail_row:type_name -> abi.v1.DetailRow
25, // 16: abi.v1.PostContext.published_at:type_name -> google.protobuf.Timestamp 22, // 16: abi.v1.RequestInfo.headers:type_name -> abi.v1.RequestInfo.HeadersEntry
25, // 17: abi.v1.BlockContext.now:type_name -> google.protobuf.Timestamp 23, // 17: abi.v1.RequestInfo.cookies:type_name -> abi.v1.RequestInfo.CookiesEntry
22, // 18: abi.v1.BlockContext.query:type_name -> abi.v1.BlockContext.QueryEntry 27, // 18: abi.v1.PostContext.published_at:type_name -> google.protobuf.Timestamp
23, // 19: abi.v1.BlockContext.cookies:type_name -> abi.v1.BlockContext.CookiesEntry 27, // 19: abi.v1.BlockContext.now:type_name -> google.protobuf.Timestamp
24, // 20: abi.v1.BlockContext.headers:type_name -> abi.v1.BlockContext.HeadersEntry 24, // 20: abi.v1.BlockContext.query:type_name -> abi.v1.BlockContext.QueryEntry
21, // [21:21] is the sub-list for method output_type 25, // 21: abi.v1.BlockContext.cookies:type_name -> abi.v1.BlockContext.CookiesEntry
21, // [21:21] is the sub-list for method input_type 26, // 22: abi.v1.BlockContext.headers:type_name -> abi.v1.BlockContext.HeadersEntry
21, // [21:21] is the sub-list for extension type_name 23, // [23:23] is the sub-list for method output_type
21, // [21:21] is the sub-list for extension extendee 23, // [23:23] is the sub-list for method input_type
0, // [0:21] is the sub-list for field type_name 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() } func init() { file_v1_render_proto_init() }
@ -1992,7 +2098,7 @@ func file_v1_render_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_render_proto_rawDesc), len(file_v1_render_proto_rawDesc)), RawDescriptor: unsafe.Slice(unsafe.StringData(file_v1_render_proto_rawDesc), len(file_v1_render_proto_rawDesc)),
NumEnums: 0, NumEnums: 0,
NumMessages: 25, NumMessages: 27,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },