From ec9d0aadd3bed2240031327cd20bac430876ec42 Mon Sep 17 00:00:00 2001 From: "Constantine.mirin" Date: Fri, 19 Jun 2026 14:41:36 +0200 Subject: [PATCH 01/40] feat(sdk): generate Python SDK + emit vocab constants for TS and Python MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The repo is the SDK repo; the vocabulary/enum constants exist so SDK CONSUMERS use typed constants instead of magic strings. Only Go had them, and Python was missing entirely. This closes both gaps: - Python base SDK: add protocolbuffers/python + pyi (type stubs) + connectrpc/python (Connect service stubs) to buf.gen.yaml → gen/python, with a pyproject.toml (messages are the only hard dep; connect + protovalidate are extras). - Multi-language vocab: extend the single protoc-gen-rampvocab plugin to emit Go, TS, and Python from ONE pass over the (ramp.v1.vocab)/(ramp.v1.vocab_enum) options (out: ../gen → go/vocab, ts/vocab, python/vocab). The descriptor-reading core is unchanged; only per-language identifier casing + rendering differ. Because all three come from the same tokens in the same pass, they cannot drift from each other — no cross-language parity check is needed, and the existing regenerate-and-diff gate guards all of it for free. Go vocab output is byte-identical (refactor preserved it). TS exposes vocab via a wildcard subpath export so a new axis is published automatically. Python uses UPPER_SNAKE constants + an ALL tuple + is_registered(); verified importable. --- cmd/protoc-gen-rampvocab/main.go | 192 ++- cmd/protoc-gen-rampvocab/main_test.go | 40 + gen/python/README.md | 25 + gen/python/comp/v1/comp_pb2.py | 72 + gen/python/comp/v1/comp_pb2.pyi | 369 +++++ gen/python/pyproject.toml | 39 + gen/python/ramp/v1/ramp_connect.py | 800 +++++++++ gen/python/ramp/v1/ramp_pb2.py | 296 ++++ gen/python/ramp/v1/ramp_pb2.pyi | 1458 +++++++++++++++++ gen/python/ramp/v1/vocab_pb2.py | 36 + gen/python/ramp/v1/vocab_pb2.pyi | 9 + .../__pycache__/pricingunits.cpython-312.pyc | Bin 0 -> 1029 bytes gen/python/vocab/functiontokens.py | 63 + gen/python/vocab/geographytokens.py | 23 + gen/python/vocab/pricingunits.py | 49 + gen/python/vocab/quotametrics.py | 33 + gen/python/vocab/usertypes.py | 29 + gen/ts/package.json | 3 +- gen/ts/vocab/functiontokens.ts | 64 + gen/ts/vocab/geographytokens.ts | 24 + gen/ts/vocab/pricingunits.ts | 50 + gen/ts/vocab/quotametrics.ts | 34 + gen/ts/vocab/usertypes.ts | 30 + proto/buf.gen.yaml | 16 +- 24 files changed, 3726 insertions(+), 28 deletions(-) create mode 100644 gen/python/README.md create mode 100644 gen/python/comp/v1/comp_pb2.py create mode 100644 gen/python/comp/v1/comp_pb2.pyi create mode 100644 gen/python/pyproject.toml create mode 100644 gen/python/ramp/v1/ramp_connect.py create mode 100644 gen/python/ramp/v1/ramp_pb2.py create mode 100644 gen/python/ramp/v1/ramp_pb2.pyi create mode 100644 gen/python/ramp/v1/vocab_pb2.py create mode 100644 gen/python/ramp/v1/vocab_pb2.pyi create mode 100644 gen/python/vocab/__pycache__/pricingunits.cpython-312.pyc create mode 100644 gen/python/vocab/functiontokens.py create mode 100644 gen/python/vocab/geographytokens.py create mode 100644 gen/python/vocab/pricingunits.py create mode 100644 gen/python/vocab/quotametrics.py create mode 100644 gen/python/vocab/usertypes.py create mode 100644 gen/ts/vocab/functiontokens.ts create mode 100644 gen/ts/vocab/geographytokens.ts create mode 100644 gen/ts/vocab/pricingunits.ts create mode 100644 gen/ts/vocab/quotametrics.ts create mode 100644 gen/ts/vocab/usertypes.ts diff --git a/cmd/protoc-gen-rampvocab/main.go b/cmd/protoc-gen-rampvocab/main.go index 7a79404c..141923a2 100644 --- a/cmd/protoc-gen-rampvocab/main.go +++ b/cmd/protoc-gen-rampvocab/main.go @@ -273,15 +273,48 @@ func (r extResolver) FindExtensionByNumber(message protoreflect.FullName, field return nil, protoregistry.NotFound } +// langSpec describes how one target language renders a vocab axis. The shared +// core — resolver, option reading, axis maps, token extraction, collision +// detection — is language-agnostic; only these per-language bits differ. +// Emitting every language from ONE plugin pass over ONE option set is what makes +// the three SDKs unable to drift from each other (no cross-language parity check +// is needed: all are produced from the same tokens in the same pass). +type langSpec struct { + name string + filename func(pkg string) string // path relative to the plugin out dir (../gen) + identName func(token string) (string, error) + render func(g *protogen.GeneratedFile, pkg, source string, entries []constEntry) +} + +var langs = []langSpec{ + {name: "go", filename: func(p string) string { return "go/vocab/" + p + "/" + p + ".go" }, identName: constName, render: renderGo}, + {name: "ts", filename: func(p string) string { return "ts/vocab/" + p + ".ts" }, identName: constName, render: renderTS}, + {name: "python", filename: func(p string) string { return "python/vocab/" + p + ".py" }, identName: pyConstName, render: renderPy}, +} + +// emit writes the vocab package for one axis in every target language. Paths are +// relative to the plugin's out dir (../gen), so files land in gen/go/vocab, +// gen/ts/vocab, and gen/python/vocab respectively. func emit(gen *protogen.Plugin, pkg, source string, tokens []string) error { - entries, err := constEntries(tokens) - if err != nil { - return fmt.Errorf("package %s (%s): %w", pkg, source, err) + for _, l := range langs { + entries, err := constEntriesFor(tokens, l.identName) + if err != nil { + return fmt.Errorf("%s vocab package %s (%s): %w", l.name, pkg, source, err) + } + g := gen.NewGeneratedFile(l.filename(pkg), protogen.GoImportPath("")) + l.render(g, pkg, source, entries) } + return nil +} - filename := fmt.Sprintf("%s/%s.go", pkg, pkg) - g := gen.NewGeneratedFile(filename, protogen.GoImportPath("")) +// sortedByToken returns entries token-sorted, for stable membership-set output. +func sortedByToken(entries []constEntry) []constEntry { + sorted := append([]constEntry(nil), entries...) + sort.Slice(sorted, func(i, j int) bool { return sorted[i].token < sorted[j].token }) + return sorted +} +func renderGo(g *protogen.GeneratedFile, pkg, source string, entries []constEntry) { g.P("// Code generated by protoc-gen-rampvocab. DO NOT EDIT.") g.P("//") g.P("// Source vocabulary: on ", source, ".") @@ -290,16 +323,12 @@ func emit(gen *protogen.Plugin, pkg, source string, tokens []string) error { g.P() g.P("package ", pkg) g.P() - - // const block — PascalCase constant name → token string. g.P("const (") for _, e := range entries { g.P("\t", e.ident, " = ", fmt.Sprintf("%q", e.token)) } g.P(")") g.P() - - // All slice — registered tokens in declaration order. g.P("// All lists every registered token in registration order.") g.P("var All = []string{") for _, e := range entries { @@ -307,26 +336,71 @@ func emit(gen *protogen.Plugin, pkg, source string, tokens []string) error { } g.P("}") g.P() - - // registered set for O(1) membership (token-sorted for stable output). g.P("var registered = map[string]struct{}{") - sorted := append([]constEntry(nil), entries...) - sort.Slice(sorted, func(i, j int) bool { return sorted[i].token < sorted[j].token }) - for _, e := range sorted { + for _, e := range sortedByToken(entries) { g.P("\t", e.ident, ": {},") } g.P("}") g.P() - - // IsRegistered membership check. g.P("// IsRegistered reports whether s is a registered bare token. Namespaced") g.P("// (vendor:token) values are NOT registered tokens and return false.") g.P("func IsRegistered(s string) bool {") g.P("\t_, ok := registered[s]") g.P("\treturn ok") g.P("}") +} - return nil +func renderTS(g *protogen.GeneratedFile, pkg, source string, entries []constEntry) { + g.P("// Code generated by protoc-gen-rampvocab. DO NOT EDIT.") + g.P("//") + g.P("// Source vocabulary: on ", source, ".") + g.P("// The token list is authored solely in that option; these constants and") + g.P("// isRegistered derive from it and cannot drift.") + g.P() + for _, e := range entries { + g.P("export const ", e.ident, " = ", fmt.Sprintf("%q", e.token), ";") + } + g.P() + g.P("// All lists every registered token in registration order.") + g.P("export const All = [") + for _, e := range entries { + g.P(" ", e.ident, ",") + } + g.P("] as const;") + g.P() + g.P("const registered: ReadonlySet = new Set(All);") + g.P() + g.P("// isRegistered reports whether s is a registered bare token. Namespaced") + g.P("// (vendor:token) values are NOT registered tokens and return false.") + g.P("export function isRegistered(s: string): boolean {") + g.P(" return registered.has(s);") + g.P("}") +} + +func renderPy(g *protogen.GeneratedFile, pkg, source string, entries []constEntry) { + g.P("# Code generated by protoc-gen-rampvocab. DO NOT EDIT.") + g.P("#") + g.P("# Source vocabulary: on ", source, ".") + g.P("# The token list is authored solely in that option; these constants and") + g.P("# is_registered derive from it and cannot drift.") + g.P() + for _, e := range entries { + g.P(e.ident, " = ", fmt.Sprintf("%q", e.token)) + } + g.P() + g.P("# ALL lists every registered token in registration order.") + g.P("ALL = (") + for _, e := range entries { + g.P(" ", e.ident, ",") + } + g.P(")") + g.P() + g.P("_REGISTERED = frozenset(ALL)") + g.P() + g.P() + g.P("def is_registered(s: str) -> bool:") + g.P(` """Return True if s is a registered bare token (namespaced vendor:token values return False)."""`) + g.P(" return s in _REGISTERED") } // constEntry pairs a generated identifier with its source token. @@ -335,15 +409,16 @@ type constEntry struct { token string } -// constEntries converts tokens to (ident, token) pairs in declaration order, -// erroring if any token does not yield a valid identifier (constName) or if two -// tokens map to the same identifier. Codegen fails loudly rather than emitting a -// broken or silently-shadowed constant. -func constEntries(tokens []string) ([]constEntry, error) { +// constEntriesFor converts tokens to (ident, token) pairs in declaration order +// using identName, erroring if any token does not yield a valid identifier or if +// two tokens map to the same one. Codegen fails loudly rather than emitting a +// broken or silently-shadowed constant. Collision detection is per-language: two +// tokens may collide in one language's identifier scheme but not another's. +func constEntriesFor(tokens []string, identName func(string) (string, error)) ([]constEntry, error) { entries := make([]constEntry, 0, len(tokens)) byIdent := make(map[string]string, len(tokens)) for _, tok := range tokens { - id, err := constName(tok) + id, err := identName(tok) if err != nil { return nil, err } @@ -356,6 +431,12 @@ func constEntries(tokens []string) ([]constEntry, error) { return entries, nil } +// constEntries builds Go-identifier entries (used by the Go emitter and tests); +// other languages call constEntriesFor with their own identName. +func constEntries(tokens []string) ([]constEntry, error) { + return constEntriesFor(tokens, constName) +} + // reservedIdents are identifiers the emitted package already defines; a token // must not map onto one of them. var reservedIdents = map[string]bool{ @@ -411,7 +492,8 @@ func constName(token string) (string, error) { } // isExportedIdent reports whether s is a legal exported Go identifier over the -// ASCII token alphabet: an uppercase first letter, then letters/digits. +// ASCII token alphabet: an uppercase first letter, then letters/digits. The same +// rule applies to the TypeScript const names (TS uses the same PascalCase). func isExportedIdent(s string) bool { if s == "" { return false @@ -429,3 +511,65 @@ func isExportedIdent(s string) bool { } return true } + +// pyConstNameSpecial / pyReservedIdents are the Python (UPPER_SNAKE) twins of +// constNameSpecial / reservedIdents above. ALL is the emitted tuple; the +// is_registered function is lowercase, so it never collides with an UPPER_SNAKE +// constant and need not be reserved. +var pyConstNameSpecial = map[string]string{ + "*": "WORLDWIDE", + "all": "ALL_USES", // bare "ALL" would shadow the emitted ALL tuple +} +var pyReservedIdents = map[string]bool{"ALL": true} + +// pyConstName converts a vocabulary token to an UPPER_SNAKE_CASE Python constant: +// "accesses" → "ACCESSES", "units-manufactured" → "UNITS_MANUFACTURED", +// "sq-km" → "SQ_KM", "*" → "WORLDWIDE". It errors (rather than emitting broken +// Python) on a token that cannot form a valid constant — e.g. a leading digit — +// or that collides with a reserved name; the fix is a pyConstNameSpecial mapping. +func pyConstName(token string) (string, error) { + if s, ok := pyConstNameSpecial[token]; ok { + if !isUpperSnakeIdent(s) { + return "", fmt.Errorf("pyConstNameSpecial[%q] = %q is not a valid UPPER_SNAKE identifier", token, s) + } + if pyReservedIdents[s] { + return "", fmt.Errorf("pyConstNameSpecial[%q] = %q collides with a reserved identifier", token, s) + } + return s, nil + } + parts := strings.FieldsFunc(token, func(r rune) bool { + return r == '-' || r == '_' || r == '.' + }) + for i, p := range parts { + parts[i] = strings.ToUpper(p) + } + id := strings.Join(parts, "_") + if !isUpperSnakeIdent(id) { + return "", fmt.Errorf("token %q does not yield a valid Python constant (got %q); add a pyConstNameSpecial mapping", token, id) + } + if pyReservedIdents[id] { + return "", fmt.Errorf("token %q maps to reserved identifier %q; add a pyConstNameSpecial mapping", token, id) + } + return id, nil +} + +// isUpperSnakeIdent reports whether s is a legal UPPER_SNAKE Python identifier +// over the ASCII token alphabet: an uppercase first letter, then uppercase +// letters / digits / underscores. +func isUpperSnakeIdent(s string) bool { + if s == "" { + return false + } + if s[0] < 'A' || s[0] > 'Z' { + return false + } + for i := 1; i < len(s); i++ { + c := s[i] + switch { + case c >= 'A' && c <= 'Z', c >= '0' && c <= '9', c == '_': + default: + return false + } + } + return true +} diff --git a/cmd/protoc-gen-rampvocab/main_test.go b/cmd/protoc-gen-rampvocab/main_test.go index 58c6d77b..f908284f 100644 --- a/cmd/protoc-gen-rampvocab/main_test.go +++ b/cmd/protoc-gen-rampvocab/main_test.go @@ -60,11 +60,51 @@ func TestConstNameSpecialValidation(t *testing.T) { } } +func TestPyConstName(t *testing.T) { + cases := []struct { + token string + want string + wantErr bool + }{ + {token: "accesses", want: "ACCESSES"}, + {token: "units-manufactured", want: "UNITS_MANUFACTURED"}, + {token: "sq-km", want: "SQ_KM"}, + {token: "news_publisher", want: "NEWS_PUBLISHER"}, + // special-cased tokens + {token: "*", want: "WORLDWIDE"}, + {token: "all", want: "ALL_USES"}, // bare ALL would shadow the emitted ALL tuple + // invalid → error + {token: "", wantErr: true}, // empty + {token: "3d-model", wantErr: true}, // leading digit + } + for _, c := range cases { + got, err := pyConstName(c.token) + if c.wantErr { + if err == nil { + t.Errorf("pyConstName(%q) = %q, want error", c.token, got) + } + continue + } + if err != nil { + t.Errorf("pyConstName(%q) unexpected error: %v", c.token, err) + continue + } + if got != c.want { + t.Errorf("pyConstName(%q) = %q, want %q", c.token, got, c.want) + } + } +} + func TestConstEntriesCollision(t *testing.T) { // "ai-train" and "ai_train" both PascalCase to "AiTrain". if _, err := constEntries([]string{"ai-train", "ai_train"}); err == nil { t.Fatal("expected collision error for ai-train / ai_train") } + // The same tokens UPPER_SNAKE to "AI_TRAIN" — the per-language collision + // check must catch it under the Python identifier scheme too. + if _, err := constEntriesFor([]string{"ai-train", "ai_train"}, pyConstName); err == nil { + t.Fatal("expected collision error for ai-train / ai_train under pyConstName") + } } func TestConstEntriesOK(t *testing.T) { diff --git a/gen/python/README.md b/gen/python/README.md new file mode 100644 index 00000000..25afc426 --- /dev/null +++ b/gen/python/README.md @@ -0,0 +1,25 @@ +# RAMP — generated Python SDK + +Generated from [`proto/`](../../proto) by `buf generate`. **Do not edit by hand** — +regenerate with `cd proto && buf generate` and commit the result (the CI drift gate +enforces this). + +Contents: +- `ramp/v1/`, `comp/v1/` — protobuf messages/enums (`*_pb2.py`) and type stubs (`*_pb2.pyi`). +- `ramp/v1/ramp_connect.py` — Connect service client/handler stubs. +- `vocab/` — registered vocabulary constants per axis (`pricingunits`, `quotametrics`, + `functiontokens`, `geographytokens`, `usertypes`), each with typed constants, an + `ALL` tuple, and `is_registered()`. Authored solely from the `(ramp.v1.vocab)` / + `(ramp.v1.vocab_enum)` proto options — the same single source as the Go and TS SDKs. + +```python +from ramp.v1 import ramp_pb2 +from vocab import pricingunits + +offer = ramp_pb2.Offer() +assert pricingunits.is_registered("tokens") # registered bare token +assert not pricingunits.is_registered("acme:foo") # vendor:namespaced → not a registered token +``` + +Install (from this directory): `pip install .` — add the `connect` extra for service +stubs (`pip install ".[connect]"`) or `validation` for runtime protovalidate checks. diff --git a/gen/python/comp/v1/comp_pb2.py b/gen/python/comp/v1/comp_pb2.py new file mode 100644 index 00000000..d26950ed --- /dev/null +++ b/gen/python/comp/v1/comp_pb2.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: comp/v1/comp.proto +# Protobuf Python Version: 7.35.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 35, + 1, + '', + 'comp/v1/comp.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12\x63omp/v1/comp.proto\x12\x07\x63omp.v1\x1a\x1cgoogle/protobuf/struct.proto\"\xb3\x01\n\x08\x41ISystem\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x13\n\x02ua\x18\x02 \x01(\tH\x00R\x02ua\x88\x01\x01\x12\x13\n\x02id\x18\x03 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x30\n\x08\x61isysuse\x18\x04 \x01(\x0b\x32\x14.comp.v1.AISystemUseR\x08\x61isysuse\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x05\n\x03_uaB\x05\n\x03_id\"\xc5\x02\n\x0b\x41ISystemUse\x12\x10\n\x03lid\x18\x01 \x01(\tR\x03lid\x12+\n\x06\x61iauth\x18\x02 \x01(\x0e\x32\x13.comp.v1.AuthMethodR\x06\x61iauth\x12\x10\n\x03uri\x18\x03 \x03(\tR\x03uri\x12-\n\x05scope\x18\x04 \x01(\x0e\x32\x12.comp.v1.ScopeTypeH\x00R\x05scope\x88\x01\x01\x12-\n\x08\x66unction\x18\x05 \x03(\x0e\x32\x11.comp.v1.FunctionR\x08\x66unction\x12*\n\x05subfn\x18\x06 \x03(\x0e\x32\x14.comp.v1.SubFunctionR\x05subfn\x12\x1b\n\x06resdis\x18\x07 \x01(\x05H\x01R\x06resdis\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x08\n\x06_scopeB\t\n\x07_resdis\"\xc7\x03\n\x07Package\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\x1b\n\x06seller\x18\x03 \x01(\tH\x01R\x06seller\x88\x01\x01\x12\x1f\n\x08packager\x18\x04 \x01(\tH\x02R\x08packager\x88\x01\x01\x12#\n\nlicenseurl\x18\x05 \x01(\tH\x03R\nlicenseurl\x88\x01\x01\x12\x1f\n\x08\x63itation\x18\x06 \x01(\x05H\x04R\x08\x63itation\x88\x01\x01\x12)\n\x05scope\x18\x07 \x01(\x0b\x32\x0e.comp.v1.ScopeH\x05R\x05scope\x88\x01\x01\x12\x35\n\tretrieval\x18\x08 \x01(\x0b\x32\x12.comp.v1.RetrievalH\x06R\tretrieval\x88\x01\x01\x12*\n\x07license\x18\t \x03(\x0b\x32\x10.comp.v1.LicenseR\x07license\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x08\n\x06_titleB\t\n\x07_sellerB\x0b\n\t_packagerB\r\n\x0b_licenseurlB\x0b\n\t_citationB\x08\n\x06_scopeB\x0c\n\n_retrieval\"\x9d\x03\n\x07License\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12\x17\n\x04turl\x18\x02 \x01(\tH\x01R\x04turl\x88\x01\x01\x12%\n\x03use\x18\x03 \x03(\x0e\x32\x13.comp.v1.LicenseUseR\x03use\x12\x18\n\x07\x63ountry\x18\x04 \x03(\tR\x07\x63ountry\x12\x1d\n\x07maxword\x18\x05 \x01(\x05H\x02R\x07maxword\x88\x01\x01\x12\x1f\n\x08\x63itation\x18\x06 \x01(\x05H\x03R\x08\x63itation\x88\x01\x01\x12\x19\n\x05price\x18\x07 \x01(\x01H\x04R\x05price\x88\x01\x01\x12\x1f\n\x08revshare\x18\x08 \x01(\x01H\x05R\x08revshare\x88\x01\x01\x12\x15\n\x03\x63ur\x18\t \x01(\tH\x06R\x03\x63ur\x88\x01\x01\x12\x15\n\x03\x64ur\x18\n \x01(\x05H\x07R\x03\x64ur\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x05\n\x03_idB\x07\n\x05_turlB\n\n\x08_maxwordB\x0b\n\t_citationB\x08\n\x06_priceB\x0b\n\t_revshareB\x06\n\x04_curB\x06\n\x04_dur\"\xcb\x02\n\x05Scope\x12-\n\x05scope\x18\x01 \x01(\x0e\x32\x12.comp.v1.ScopeTypeH\x00R\x05scope\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x05H\x01R\x03max\x88\x01\x01\x12*\n\x05\x63type\x18\x03 \x03(\x0e\x32\x14.comp.v1.ContentTypeR\x05\x63type\x12!\n\x04text\x18\x04 \x03(\x0b\x32\r.comp.v1.TextR\x04text\x12$\n\x05video\x18\x05 \x03(\x0b\x32\x0e.comp.v1.VideoR\x05video\x12$\n\x05image\x18\x06 \x03(\x0b\x32\x0e.comp.v1.ImageR\x05image\x12$\n\x05\x61udio\x18\x07 \x03(\x0b\x32\x0e.comp.v1.AudioR\x05\x61udio\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x08\n\x06_scopeB\x06\n\x04_max\"\x8b\x04\n\x04Text\x12\x19\n\x05title\x18\x01 \x01(\tH\x00R\x05title\x88\x01\x01\x12\x1c\n\twordcount\x18\x02 \x03(\x05R\twordcount\x12\x1d\n\x07pubdate\x18\x03 \x01(\tH\x01R\x07pubdate\x88\x01\x01\x12!\n\tpublished\x18\x04 \x01(\x05H\x02R\tpublished\x88\x01\x01\x12\x1b\n\x06update\x18\x05 \x01(\tH\x03R\x06update\x88\x01\x01\x12\x16\n\x06\x61uthor\x18\x06 \x03(\tR\x06\x61uthor\x12#\n\nsourcetype\x18\x07 \x01(\x05H\x04R\nsourcetype\x88\x01\x01\x12#\n\nprovenance\x18\x08 \x01(\x05H\x05R\nprovenance\x88\x01\x01\x12\x1d\n\x07provent\x18\t \x01(\tH\x06R\x07provent\x88\x01\x01\x12!\n\tauthority\x18\n \x01(\x01H\x07R\tauthority\x88\x01\x01\x12%\n\x0boriginality\x18\x0b \x01(\x01H\x08R\x0boriginality\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x08\n\x06_titleB\n\n\x08_pubdateB\x0c\n\n_publishedB\t\n\x07_updateB\r\n\x0b_sourcetypeB\r\n\x0b_provenanceB\n\n\x08_proventB\x0c\n\n_authorityB\x0e\n\x0c_originality\"\x9f\x04\n\x05Video\x12\x14\n\x05title\x18\x01 \x03(\tR\x05title\x12\x10\n\x03\x64ur\x18\x02 \x03(\x05R\x03\x64ur\x12\x17\n\x04\x63lip\x18\x03 \x01(\x05H\x00R\x04\x63lip\x88\x01\x01\x12\x1c\n\twordcount\x18\x04 \x03(\x05R\twordcount\x12#\n\ntranscript\x18\x05 \x01(\x05H\x01R\ntranscript\x88\x01\x01\x12\x1d\n\x07pubdate\x18\x06 \x01(\tH\x02R\x07pubdate\x88\x01\x01\x12!\n\tpublished\x18\x07 \x01(\x05H\x03R\tpublished\x88\x01\x01\x12\x1b\n\x06update\x18\x08 \x01(\tH\x04R\x06update\x88\x01\x01\x12\x16\n\x06\x61uthor\x18\t \x03(\tR\x06\x61uthor\x12#\n\nsourcetype\x18\n \x01(\x05H\x05R\nsourcetype\x88\x01\x01\x12#\n\nprovenance\x18\x0b \x01(\x05H\x06R\nprovenance\x88\x01\x01\x12\x1d\n\x07provent\x18\x0c \x01(\tH\x07R\x07provent\x88\x01\x01\x12\x17\n\x04\x63\x32pa\x18\r \x01(\tH\x08R\x04\x63\x32pa\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x07\n\x05_clipB\r\n\x0b_transcriptB\n\n\x08_pubdateB\x0c\n\n_publishedB\t\n\x07_updateB\r\n\x0b_sourcetypeB\r\n\x0b_provenanceB\n\n\x08_proventB\x07\n\x05_c2pa\"\xe3\x03\n\x05Image\x12\x14\n\x05title\x18\x01 \x03(\tR\x05title\x12\x1d\n\x07pubdate\x18\x02 \x01(\tH\x00R\x07pubdate\x88\x01\x01\x12!\n\tpublished\x18\x03 \x01(\x05H\x01R\tpublished\x88\x01\x01\x12\x1b\n\x06update\x18\x04 \x01(\tH\x02R\x06update\x88\x01\x01\x12\x16\n\x06\x61uthor\x18\x05 \x03(\tR\x06\x61uthor\x12#\n\nsourcetype\x18\x06 \x01(\x05H\x03R\nsourcetype\x88\x01\x01\x12#\n\nprovenance\x18\x07 \x01(\x05H\x04R\nprovenance\x88\x01\x01\x12\x1d\n\x07provent\x18\x08 \x01(\tH\x05R\x07provent\x88\x01\x01\x12\x15\n\x03\x61lt\x18\t \x01(\tH\x06R\x03\x61lt\x88\x01\x01\x12\x1d\n\x07\x63\x61ption\x18\n \x01(\tH\x07R\x07\x63\x61ption\x88\x01\x01\x12\x17\n\x04\x63\x32pa\x18\x0b \x01(\tH\x08R\x04\x63\x32pa\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\n\n\x08_pubdateB\x0c\n\n_publishedB\t\n\x07_updateB\r\n\x0b_sourcetypeB\r\n\x0b_provenanceB\n\n\x08_proventB\x06\n\x04_altB\n\n\x08_captionB\x07\n\x05_c2pa\"\xfd\x03\n\x05\x41udio\x12\x14\n\x05title\x18\x01 \x03(\tR\x05title\x12\x10\n\x03\x64ur\x18\x02 \x03(\x05R\x03\x64ur\x12\x1c\n\twordcount\x18\x03 \x03(\x05R\twordcount\x12#\n\ntranscript\x18\x04 \x01(\x05H\x00R\ntranscript\x88\x01\x01\x12\x1d\n\x07pubdate\x18\x05 \x01(\tH\x01R\x07pubdate\x88\x01\x01\x12!\n\tpublished\x18\x06 \x01(\x05H\x02R\tpublished\x88\x01\x01\x12\x1b\n\x06update\x18\x07 \x01(\tH\x03R\x06update\x88\x01\x01\x12\x16\n\x06\x61uthor\x18\x08 \x03(\tR\x06\x61uthor\x12#\n\nsourcetype\x18\t \x01(\x05H\x04R\nsourcetype\x88\x01\x01\x12#\n\nprovenance\x18\n \x01(\x05H\x05R\nprovenance\x88\x01\x01\x12\x1d\n\x07provent\x18\x0b \x01(\tH\x06R\x07provent\x88\x01\x01\x12\x17\n\x04\x63\x32pa\x18\x0c \x01(\tH\x07R\x04\x63\x32pa\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\r\n\x0b_transcriptB\n\n\x08_pubdateB\x0c\n\n_publishedB\t\n\x07_updateB\r\n\x0b_sourcetypeB\r\n\x0b_provenanceB\n\n\x08_proventB\x07\n\x05_c2pa\"\xf5\x01\n\tRetrieval\x12/\n\x04\x61uth\x18\x01 \x01(\x0e\x32\x16.comp.v1.RetrievalAuthH\x00R\x04\x61uth\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x02 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12*\n\x04type\x18\x03 \x03(\x0e\x32\x16.comp.v1.RetrievalTypeR\x04type\x12\x1d\n\x07ratelmt\x18\x04 \x01(\x05H\x02R\x07ratelmt\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x07\n\x05_authB\x0b\n\t_endpointB\n\n\x08_ratelmt*\x9c\x01\n\nAuthMethod\x12\x1a\n\x16\x41UTH_METHOD_USER_AGENT\x10\x00\x12\x12\n\x0e\x41UTH_METHOD_IP\x10\x01\x12\x15\n\x11\x41UTH_METHOD_TOKEN\x10\x02\x12\x16\n\x12\x41UTH_METHOD_WEBBOT\x10\x03\x12\x18\n\x14\x41UTH_METHOD_AGENT_ID\x10\x04\x12\x15\n\x11\x41UTH_METHOD_OTHER\x10\x05*\xb4\x01\n\tScopeType\x12\x1a\n\x16SCOPE_TYPE_FULL_CORPUS\x10\x00\x12\x16\n\x12SCOPE_TYPE_SECTION\x10\x01\x12\x19\n\x15SCOPE_TYPE_DATE_RANGE\x10\x02\x12\x14\n\x10SCOPE_TYPE_GENRE\x10\x03\x12\x14\n\x10SCOPE_TYPE_TOPIC\x10\x04\x12\x16\n\x12SCOPE_TYPE_CURATED\x10\x05\x12\x14\n\x10SCOPE_TYPE_OTHER\x10\x06*\x8b\x01\n\x08\x46unction\x12\x10\n\x0c\x46UNCTION_ALL\x10\x00\x12\x13\n\x0f\x46UNCTION_AI_ALL\x10\x01\x12\x15\n\x11\x46UNCTION_AI_TRAIN\x10\x02\x12\x15\n\x11\x46UNCTION_AI_INPUT\x10\x03\x12\x15\n\x11\x46UNCTION_AI_INDEX\x10\x04\x12\x13\n\x0f\x46UNCTION_SEARCH\x10\x05*\xaf\x01\n\x0bSubFunction\x12\x19\n\x15SUB_FUNCTION_TRAINING\x10\x00\x12\x14\n\x10SUB_FUNCTION_RAG\x10\x01\x12\x1a\n\x16SUB_FUNCTION_GROUNDING\x10\x02\x12\x1b\n\x17SUB_FUNCTION_AGENT_VIEW\x10\x03\x12\x1e\n\x1aSUB_FUNCTION_AGENT_ACTIONS\x10\x04\x12\x16\n\x12SUB_FUNCTION_OTHER\x10\x05*\x83\x02\n\nLicenseUse\x12 \n\x1cLICENSE_USE_TRAINING_DISPLAY\x10\x00\x12(\n$LICENSE_USE_RAG_DISPLAY_UNRESTRICTED\x10\x01\x12%\n!LICENSE_USE_RAG_DISPLAY_MAX_WORDS\x10\x02\x12\'\n#LICENSE_USE_RAG_DISPLAY_ATTRIBUTION\x10\x03\x12\x1e\n\x1aLICENSE_USE_RAG_NO_DISPLAY\x10\x04\x12\x1a\n\x16LICENSE_USE_AGENT_VIEW\x10\x05\x12\x1d\n\x19LICENSE_USE_AGENT_ACTIONS\x10\x06*\x9a\x01\n\x0b\x43ontentType\x12\x15\n\x11\x43ONTENT_TYPE_TEXT\x10\x00\x12\x16\n\x12\x43ONTENT_TYPE_VIDEO\x10\x01\x12\x16\n\x12\x43ONTENT_TYPE_IMAGE\x10\x02\x12\x16\n\x12\x43ONTENT_TYPE_AUDIO\x10\x03\x12\x14\n\x10\x43ONTENT_TYPE_ALL\x10\x04\x12\x16\n\x12\x43ONTENT_TYPE_OTHER\x10\x05*w\n\rRetrievalAuth\x12\x17\n\x13RETRIEVAL_AUTH_NONE\x10\x00\x12\x1a\n\x16RETRIEVAL_AUTH_API_KEY\x10\x01\x12\x19\n\x15RETRIEVAL_AUTH_OAUTH2\x10\x02\x12\x16\n\x12RETRIEVAL_AUTH_SSL\x10\x03*\xd7\x01\n\rRetrievalType\x12\x17\n\x13RETRIEVAL_TYPE_HTML\x10\x00\x12\x16\n\x12RETRIEVAL_TYPE_RSS\x10\x01\x12\x16\n\x12RETRIEVAL_TYPE_API\x10\x02\x12\x16\n\x12RETRIEVAL_TYPE_MCP\x10\x03\x12\x18\n\x14RETRIEVAL_TYPE_NLWEB\x10\x04\x12\x16\n\x12RETRIEVAL_TYPE_XML\x10\x05\x12\x19\n\x15RETRIEVAL_TYPE_NEWSML\x10\x06\x12\x18\n\x14RETRIEVAL_TYPE_OTHER\x10\x07\x42\x8e\x01\n\x0b\x63om.comp.v1B\tCompProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/comp/v1;compv1\xa2\x02\x03\x43XX\xaa\x02\x07\x43omp.V1\xca\x02\x07\x43omp\\V1\xe2\x02\x13\x43omp\\V1\\GPBMetadata\xea\x02\x08\x43omp::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'comp.v1.comp_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\013com.comp.v1B\tCompProtoP\001Z7github.com/RAMP-Protocol/protocol/gen/go/comp/v1;compv1\242\002\003CXX\252\002\007Comp.V1\312\002\007Comp\\V1\342\002\023Comp\\V1\\GPBMetadata\352\002\010Comp::V1' + _globals['_AUTHMETHOD']._serialized_start=4098 + _globals['_AUTHMETHOD']._serialized_end=4254 + _globals['_SCOPETYPE']._serialized_start=4257 + _globals['_SCOPETYPE']._serialized_end=4437 + _globals['_FUNCTION']._serialized_start=4440 + _globals['_FUNCTION']._serialized_end=4579 + _globals['_SUBFUNCTION']._serialized_start=4582 + _globals['_SUBFUNCTION']._serialized_end=4757 + _globals['_LICENSEUSE']._serialized_start=4760 + _globals['_LICENSEUSE']._serialized_end=5019 + _globals['_CONTENTTYPE']._serialized_start=5022 + _globals['_CONTENTTYPE']._serialized_end=5176 + _globals['_RETRIEVALAUTH']._serialized_start=5178 + _globals['_RETRIEVALAUTH']._serialized_end=5297 + _globals['_RETRIEVALTYPE']._serialized_start=5300 + _globals['_RETRIEVALTYPE']._serialized_end=5515 + _globals['_AISYSTEM']._serialized_start=62 + _globals['_AISYSTEM']._serialized_end=241 + _globals['_AISYSTEMUSE']._serialized_start=244 + _globals['_AISYSTEMUSE']._serialized_end=569 + _globals['_PACKAGE']._serialized_start=572 + _globals['_PACKAGE']._serialized_end=1027 + _globals['_LICENSE']._serialized_start=1030 + _globals['_LICENSE']._serialized_end=1443 + _globals['_SCOPE']._serialized_start=1446 + _globals['_SCOPE']._serialized_end=1777 + _globals['_TEXT']._serialized_start=1780 + _globals['_TEXT']._serialized_end=2303 + _globals['_VIDEO']._serialized_start=2306 + _globals['_VIDEO']._serialized_end=2849 + _globals['_IMAGE']._serialized_start=2852 + _globals['_IMAGE']._serialized_end=3335 + _globals['_AUDIO']._serialized_start=3338 + _globals['_AUDIO']._serialized_end=3847 + _globals['_RETRIEVAL']._serialized_start=3850 + _globals['_RETRIEVAL']._serialized_end=4095 +# @@protoc_insertion_point(module_scope) diff --git a/gen/python/comp/v1/comp_pb2.pyi b/gen/python/comp/v1/comp_pb2.pyi new file mode 100644 index 00000000..7f27918a --- /dev/null +++ b/gen/python/comp/v1/comp_pb2.pyi @@ -0,0 +1,369 @@ +from google.protobuf import struct_pb2 as _struct_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from collections.abc import Iterable as _Iterable, Mapping as _Mapping +from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class AuthMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + AUTH_METHOD_USER_AGENT: _ClassVar[AuthMethod] + AUTH_METHOD_IP: _ClassVar[AuthMethod] + AUTH_METHOD_TOKEN: _ClassVar[AuthMethod] + AUTH_METHOD_WEBBOT: _ClassVar[AuthMethod] + AUTH_METHOD_AGENT_ID: _ClassVar[AuthMethod] + AUTH_METHOD_OTHER: _ClassVar[AuthMethod] + +class ScopeType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SCOPE_TYPE_FULL_CORPUS: _ClassVar[ScopeType] + SCOPE_TYPE_SECTION: _ClassVar[ScopeType] + SCOPE_TYPE_DATE_RANGE: _ClassVar[ScopeType] + SCOPE_TYPE_GENRE: _ClassVar[ScopeType] + SCOPE_TYPE_TOPIC: _ClassVar[ScopeType] + SCOPE_TYPE_CURATED: _ClassVar[ScopeType] + SCOPE_TYPE_OTHER: _ClassVar[ScopeType] + +class Function(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + FUNCTION_ALL: _ClassVar[Function] + FUNCTION_AI_ALL: _ClassVar[Function] + FUNCTION_AI_TRAIN: _ClassVar[Function] + FUNCTION_AI_INPUT: _ClassVar[Function] + FUNCTION_AI_INDEX: _ClassVar[Function] + FUNCTION_SEARCH: _ClassVar[Function] + +class SubFunction(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SUB_FUNCTION_TRAINING: _ClassVar[SubFunction] + SUB_FUNCTION_RAG: _ClassVar[SubFunction] + SUB_FUNCTION_GROUNDING: _ClassVar[SubFunction] + SUB_FUNCTION_AGENT_VIEW: _ClassVar[SubFunction] + SUB_FUNCTION_AGENT_ACTIONS: _ClassVar[SubFunction] + SUB_FUNCTION_OTHER: _ClassVar[SubFunction] + +class LicenseUse(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + LICENSE_USE_TRAINING_DISPLAY: _ClassVar[LicenseUse] + LICENSE_USE_RAG_DISPLAY_UNRESTRICTED: _ClassVar[LicenseUse] + LICENSE_USE_RAG_DISPLAY_MAX_WORDS: _ClassVar[LicenseUse] + LICENSE_USE_RAG_DISPLAY_ATTRIBUTION: _ClassVar[LicenseUse] + LICENSE_USE_RAG_NO_DISPLAY: _ClassVar[LicenseUse] + LICENSE_USE_AGENT_VIEW: _ClassVar[LicenseUse] + LICENSE_USE_AGENT_ACTIONS: _ClassVar[LicenseUse] + +class ContentType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CONTENT_TYPE_TEXT: _ClassVar[ContentType] + CONTENT_TYPE_VIDEO: _ClassVar[ContentType] + CONTENT_TYPE_IMAGE: _ClassVar[ContentType] + CONTENT_TYPE_AUDIO: _ClassVar[ContentType] + CONTENT_TYPE_ALL: _ClassVar[ContentType] + CONTENT_TYPE_OTHER: _ClassVar[ContentType] + +class RetrievalAuth(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + RETRIEVAL_AUTH_NONE: _ClassVar[RetrievalAuth] + RETRIEVAL_AUTH_API_KEY: _ClassVar[RetrievalAuth] + RETRIEVAL_AUTH_OAUTH2: _ClassVar[RetrievalAuth] + RETRIEVAL_AUTH_SSL: _ClassVar[RetrievalAuth] + +class RetrievalType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + RETRIEVAL_TYPE_HTML: _ClassVar[RetrievalType] + RETRIEVAL_TYPE_RSS: _ClassVar[RetrievalType] + RETRIEVAL_TYPE_API: _ClassVar[RetrievalType] + RETRIEVAL_TYPE_MCP: _ClassVar[RetrievalType] + RETRIEVAL_TYPE_NLWEB: _ClassVar[RetrievalType] + RETRIEVAL_TYPE_XML: _ClassVar[RetrievalType] + RETRIEVAL_TYPE_NEWSML: _ClassVar[RetrievalType] + RETRIEVAL_TYPE_OTHER: _ClassVar[RetrievalType] +AUTH_METHOD_USER_AGENT: AuthMethod +AUTH_METHOD_IP: AuthMethod +AUTH_METHOD_TOKEN: AuthMethod +AUTH_METHOD_WEBBOT: AuthMethod +AUTH_METHOD_AGENT_ID: AuthMethod +AUTH_METHOD_OTHER: AuthMethod +SCOPE_TYPE_FULL_CORPUS: ScopeType +SCOPE_TYPE_SECTION: ScopeType +SCOPE_TYPE_DATE_RANGE: ScopeType +SCOPE_TYPE_GENRE: ScopeType +SCOPE_TYPE_TOPIC: ScopeType +SCOPE_TYPE_CURATED: ScopeType +SCOPE_TYPE_OTHER: ScopeType +FUNCTION_ALL: Function +FUNCTION_AI_ALL: Function +FUNCTION_AI_TRAIN: Function +FUNCTION_AI_INPUT: Function +FUNCTION_AI_INDEX: Function +FUNCTION_SEARCH: Function +SUB_FUNCTION_TRAINING: SubFunction +SUB_FUNCTION_RAG: SubFunction +SUB_FUNCTION_GROUNDING: SubFunction +SUB_FUNCTION_AGENT_VIEW: SubFunction +SUB_FUNCTION_AGENT_ACTIONS: SubFunction +SUB_FUNCTION_OTHER: SubFunction +LICENSE_USE_TRAINING_DISPLAY: LicenseUse +LICENSE_USE_RAG_DISPLAY_UNRESTRICTED: LicenseUse +LICENSE_USE_RAG_DISPLAY_MAX_WORDS: LicenseUse +LICENSE_USE_RAG_DISPLAY_ATTRIBUTION: LicenseUse +LICENSE_USE_RAG_NO_DISPLAY: LicenseUse +LICENSE_USE_AGENT_VIEW: LicenseUse +LICENSE_USE_AGENT_ACTIONS: LicenseUse +CONTENT_TYPE_TEXT: ContentType +CONTENT_TYPE_VIDEO: ContentType +CONTENT_TYPE_IMAGE: ContentType +CONTENT_TYPE_AUDIO: ContentType +CONTENT_TYPE_ALL: ContentType +CONTENT_TYPE_OTHER: ContentType +RETRIEVAL_AUTH_NONE: RetrievalAuth +RETRIEVAL_AUTH_API_KEY: RetrievalAuth +RETRIEVAL_AUTH_OAUTH2: RetrievalAuth +RETRIEVAL_AUTH_SSL: RetrievalAuth +RETRIEVAL_TYPE_HTML: RetrievalType +RETRIEVAL_TYPE_RSS: RetrievalType +RETRIEVAL_TYPE_API: RetrievalType +RETRIEVAL_TYPE_MCP: RetrievalType +RETRIEVAL_TYPE_NLWEB: RetrievalType +RETRIEVAL_TYPE_XML: RetrievalType +RETRIEVAL_TYPE_NEWSML: RetrievalType +RETRIEVAL_TYPE_OTHER: RetrievalType + +class AISystem(_message.Message): + __slots__ = ("name", "ua", "id", "aisysuse", "ext") + NAME_FIELD_NUMBER: _ClassVar[int] + UA_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + AISYSUSE_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + name: str + ua: str + id: str + aisysuse: AISystemUse + ext: _struct_pb2.Struct + def __init__(self, name: _Optional[str] = ..., ua: _Optional[str] = ..., id: _Optional[str] = ..., aisysuse: _Optional[_Union[AISystemUse, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class AISystemUse(_message.Message): + __slots__ = ("lid", "aiauth", "uri", "scope", "function", "subfn", "resdis", "ext") + LID_FIELD_NUMBER: _ClassVar[int] + AIAUTH_FIELD_NUMBER: _ClassVar[int] + URI_FIELD_NUMBER: _ClassVar[int] + SCOPE_FIELD_NUMBER: _ClassVar[int] + FUNCTION_FIELD_NUMBER: _ClassVar[int] + SUBFN_FIELD_NUMBER: _ClassVar[int] + RESDIS_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + lid: str + aiauth: AuthMethod + uri: _containers.RepeatedScalarFieldContainer[str] + scope: ScopeType + function: _containers.RepeatedScalarFieldContainer[Function] + subfn: _containers.RepeatedScalarFieldContainer[SubFunction] + resdis: int + ext: _struct_pb2.Struct + def __init__(self, lid: _Optional[str] = ..., aiauth: _Optional[_Union[AuthMethod, str]] = ..., uri: _Optional[_Iterable[str]] = ..., scope: _Optional[_Union[ScopeType, str]] = ..., function: _Optional[_Iterable[_Union[Function, str]]] = ..., subfn: _Optional[_Iterable[_Union[SubFunction, str]]] = ..., resdis: _Optional[int] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class Package(_message.Message): + __slots__ = ("id", "title", "seller", "packager", "licenseurl", "citation", "scope", "retrieval", "license", "ext") + ID_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + SELLER_FIELD_NUMBER: _ClassVar[int] + PACKAGER_FIELD_NUMBER: _ClassVar[int] + LICENSEURL_FIELD_NUMBER: _ClassVar[int] + CITATION_FIELD_NUMBER: _ClassVar[int] + SCOPE_FIELD_NUMBER: _ClassVar[int] + RETRIEVAL_FIELD_NUMBER: _ClassVar[int] + LICENSE_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + id: str + title: str + seller: str + packager: str + licenseurl: str + citation: int + scope: Scope + retrieval: Retrieval + license: _containers.RepeatedCompositeFieldContainer[License] + ext: _struct_pb2.Struct + def __init__(self, id: _Optional[str] = ..., title: _Optional[str] = ..., seller: _Optional[str] = ..., packager: _Optional[str] = ..., licenseurl: _Optional[str] = ..., citation: _Optional[int] = ..., scope: _Optional[_Union[Scope, _Mapping]] = ..., retrieval: _Optional[_Union[Retrieval, _Mapping]] = ..., license: _Optional[_Iterable[_Union[License, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class License(_message.Message): + __slots__ = ("id", "turl", "use", "country", "maxword", "citation", "price", "revshare", "cur", "dur", "ext") + ID_FIELD_NUMBER: _ClassVar[int] + TURL_FIELD_NUMBER: _ClassVar[int] + USE_FIELD_NUMBER: _ClassVar[int] + COUNTRY_FIELD_NUMBER: _ClassVar[int] + MAXWORD_FIELD_NUMBER: _ClassVar[int] + CITATION_FIELD_NUMBER: _ClassVar[int] + PRICE_FIELD_NUMBER: _ClassVar[int] + REVSHARE_FIELD_NUMBER: _ClassVar[int] + CUR_FIELD_NUMBER: _ClassVar[int] + DUR_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + id: str + turl: str + use: _containers.RepeatedScalarFieldContainer[LicenseUse] + country: _containers.RepeatedScalarFieldContainer[str] + maxword: int + citation: int + price: float + revshare: float + cur: str + dur: int + ext: _struct_pb2.Struct + def __init__(self, id: _Optional[str] = ..., turl: _Optional[str] = ..., use: _Optional[_Iterable[_Union[LicenseUse, str]]] = ..., country: _Optional[_Iterable[str]] = ..., maxword: _Optional[int] = ..., citation: _Optional[int] = ..., price: _Optional[float] = ..., revshare: _Optional[float] = ..., cur: _Optional[str] = ..., dur: _Optional[int] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class Scope(_message.Message): + __slots__ = ("scope", "max", "ctype", "text", "video", "image", "audio", "ext") + SCOPE_FIELD_NUMBER: _ClassVar[int] + MAX_FIELD_NUMBER: _ClassVar[int] + CTYPE_FIELD_NUMBER: _ClassVar[int] + TEXT_FIELD_NUMBER: _ClassVar[int] + VIDEO_FIELD_NUMBER: _ClassVar[int] + IMAGE_FIELD_NUMBER: _ClassVar[int] + AUDIO_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + scope: ScopeType + max: int + ctype: _containers.RepeatedScalarFieldContainer[ContentType] + text: _containers.RepeatedCompositeFieldContainer[Text] + video: _containers.RepeatedCompositeFieldContainer[Video] + image: _containers.RepeatedCompositeFieldContainer[Image] + audio: _containers.RepeatedCompositeFieldContainer[Audio] + ext: _struct_pb2.Struct + def __init__(self, scope: _Optional[_Union[ScopeType, str]] = ..., max: _Optional[int] = ..., ctype: _Optional[_Iterable[_Union[ContentType, str]]] = ..., text: _Optional[_Iterable[_Union[Text, _Mapping]]] = ..., video: _Optional[_Iterable[_Union[Video, _Mapping]]] = ..., image: _Optional[_Iterable[_Union[Image, _Mapping]]] = ..., audio: _Optional[_Iterable[_Union[Audio, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class Text(_message.Message): + __slots__ = ("title", "wordcount", "pubdate", "published", "update", "author", "sourcetype", "provenance", "provent", "authority", "originality", "ext") + TITLE_FIELD_NUMBER: _ClassVar[int] + WORDCOUNT_FIELD_NUMBER: _ClassVar[int] + PUBDATE_FIELD_NUMBER: _ClassVar[int] + PUBLISHED_FIELD_NUMBER: _ClassVar[int] + UPDATE_FIELD_NUMBER: _ClassVar[int] + AUTHOR_FIELD_NUMBER: _ClassVar[int] + SOURCETYPE_FIELD_NUMBER: _ClassVar[int] + PROVENANCE_FIELD_NUMBER: _ClassVar[int] + PROVENT_FIELD_NUMBER: _ClassVar[int] + AUTHORITY_FIELD_NUMBER: _ClassVar[int] + ORIGINALITY_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + title: str + wordcount: _containers.RepeatedScalarFieldContainer[int] + pubdate: str + published: int + update: str + author: _containers.RepeatedScalarFieldContainer[str] + sourcetype: int + provenance: int + provent: str + authority: float + originality: float + ext: _struct_pb2.Struct + def __init__(self, title: _Optional[str] = ..., wordcount: _Optional[_Iterable[int]] = ..., pubdate: _Optional[str] = ..., published: _Optional[int] = ..., update: _Optional[str] = ..., author: _Optional[_Iterable[str]] = ..., sourcetype: _Optional[int] = ..., provenance: _Optional[int] = ..., provent: _Optional[str] = ..., authority: _Optional[float] = ..., originality: _Optional[float] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class Video(_message.Message): + __slots__ = ("title", "dur", "clip", "wordcount", "transcript", "pubdate", "published", "update", "author", "sourcetype", "provenance", "provent", "c2pa", "ext") + TITLE_FIELD_NUMBER: _ClassVar[int] + DUR_FIELD_NUMBER: _ClassVar[int] + CLIP_FIELD_NUMBER: _ClassVar[int] + WORDCOUNT_FIELD_NUMBER: _ClassVar[int] + TRANSCRIPT_FIELD_NUMBER: _ClassVar[int] + PUBDATE_FIELD_NUMBER: _ClassVar[int] + PUBLISHED_FIELD_NUMBER: _ClassVar[int] + UPDATE_FIELD_NUMBER: _ClassVar[int] + AUTHOR_FIELD_NUMBER: _ClassVar[int] + SOURCETYPE_FIELD_NUMBER: _ClassVar[int] + PROVENANCE_FIELD_NUMBER: _ClassVar[int] + PROVENT_FIELD_NUMBER: _ClassVar[int] + C2PA_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + title: _containers.RepeatedScalarFieldContainer[str] + dur: _containers.RepeatedScalarFieldContainer[int] + clip: int + wordcount: _containers.RepeatedScalarFieldContainer[int] + transcript: int + pubdate: str + published: int + update: str + author: _containers.RepeatedScalarFieldContainer[str] + sourcetype: int + provenance: int + provent: str + c2pa: str + ext: _struct_pb2.Struct + def __init__(self, title: _Optional[_Iterable[str]] = ..., dur: _Optional[_Iterable[int]] = ..., clip: _Optional[int] = ..., wordcount: _Optional[_Iterable[int]] = ..., transcript: _Optional[int] = ..., pubdate: _Optional[str] = ..., published: _Optional[int] = ..., update: _Optional[str] = ..., author: _Optional[_Iterable[str]] = ..., sourcetype: _Optional[int] = ..., provenance: _Optional[int] = ..., provent: _Optional[str] = ..., c2pa: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class Image(_message.Message): + __slots__ = ("title", "pubdate", "published", "update", "author", "sourcetype", "provenance", "provent", "alt", "caption", "c2pa", "ext") + TITLE_FIELD_NUMBER: _ClassVar[int] + PUBDATE_FIELD_NUMBER: _ClassVar[int] + PUBLISHED_FIELD_NUMBER: _ClassVar[int] + UPDATE_FIELD_NUMBER: _ClassVar[int] + AUTHOR_FIELD_NUMBER: _ClassVar[int] + SOURCETYPE_FIELD_NUMBER: _ClassVar[int] + PROVENANCE_FIELD_NUMBER: _ClassVar[int] + PROVENT_FIELD_NUMBER: _ClassVar[int] + ALT_FIELD_NUMBER: _ClassVar[int] + CAPTION_FIELD_NUMBER: _ClassVar[int] + C2PA_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + title: _containers.RepeatedScalarFieldContainer[str] + pubdate: str + published: int + update: str + author: _containers.RepeatedScalarFieldContainer[str] + sourcetype: int + provenance: int + provent: str + alt: str + caption: str + c2pa: str + ext: _struct_pb2.Struct + def __init__(self, title: _Optional[_Iterable[str]] = ..., pubdate: _Optional[str] = ..., published: _Optional[int] = ..., update: _Optional[str] = ..., author: _Optional[_Iterable[str]] = ..., sourcetype: _Optional[int] = ..., provenance: _Optional[int] = ..., provent: _Optional[str] = ..., alt: _Optional[str] = ..., caption: _Optional[str] = ..., c2pa: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class Audio(_message.Message): + __slots__ = ("title", "dur", "wordcount", "transcript", "pubdate", "published", "update", "author", "sourcetype", "provenance", "provent", "c2pa", "ext") + TITLE_FIELD_NUMBER: _ClassVar[int] + DUR_FIELD_NUMBER: _ClassVar[int] + WORDCOUNT_FIELD_NUMBER: _ClassVar[int] + TRANSCRIPT_FIELD_NUMBER: _ClassVar[int] + PUBDATE_FIELD_NUMBER: _ClassVar[int] + PUBLISHED_FIELD_NUMBER: _ClassVar[int] + UPDATE_FIELD_NUMBER: _ClassVar[int] + AUTHOR_FIELD_NUMBER: _ClassVar[int] + SOURCETYPE_FIELD_NUMBER: _ClassVar[int] + PROVENANCE_FIELD_NUMBER: _ClassVar[int] + PROVENT_FIELD_NUMBER: _ClassVar[int] + C2PA_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + title: _containers.RepeatedScalarFieldContainer[str] + dur: _containers.RepeatedScalarFieldContainer[int] + wordcount: _containers.RepeatedScalarFieldContainer[int] + transcript: int + pubdate: str + published: int + update: str + author: _containers.RepeatedScalarFieldContainer[str] + sourcetype: int + provenance: int + provent: str + c2pa: str + ext: _struct_pb2.Struct + def __init__(self, title: _Optional[_Iterable[str]] = ..., dur: _Optional[_Iterable[int]] = ..., wordcount: _Optional[_Iterable[int]] = ..., transcript: _Optional[int] = ..., pubdate: _Optional[str] = ..., published: _Optional[int] = ..., update: _Optional[str] = ..., author: _Optional[_Iterable[str]] = ..., sourcetype: _Optional[int] = ..., provenance: _Optional[int] = ..., provent: _Optional[str] = ..., c2pa: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... + +class Retrieval(_message.Message): + __slots__ = ("auth", "endpoint", "type", "ratelmt", "ext") + AUTH_FIELD_NUMBER: _ClassVar[int] + ENDPOINT_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + RATELMT_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + auth: RetrievalAuth + endpoint: str + type: _containers.RepeatedScalarFieldContainer[RetrievalType] + ratelmt: int + ext: _struct_pb2.Struct + def __init__(self, auth: _Optional[_Union[RetrievalAuth, str]] = ..., endpoint: _Optional[str] = ..., type: _Optional[_Iterable[_Union[RetrievalType, str]]] = ..., ratelmt: _Optional[int] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... diff --git a/gen/python/pyproject.toml b/gen/python/pyproject.toml new file mode 100644 index 00000000..39e266c6 --- /dev/null +++ b/gen/python/pyproject.toml @@ -0,0 +1,39 @@ +# Packaging for the generated RAMP Python SDK (mirrors gen/ts/package.json for TS). +# The code under this directory is generated by `buf generate` from proto/ — do not +# edit it by hand. Only this file and README.md are authored. +[build-system] +requires = ["setuptools>=68"] +build-backend = "setuptools.build_meta" + +[project] +name = "ramp-protocol" +version = "0.1.0" +description = "Generated Python SDK for the RAMP protocol: protobuf messages, Connect service stubs, and registered vocabulary constants." +readme = "README.md" +requires-python = ">=3.9" +license = { text = "Apache-2.0" } +# Messages/enums are the only hard dependency — they import just google.protobuf. +dependencies = [ + "protobuf>=5.27", +] + +[project.optional-dependencies] +# Service client/handler stubs (ramp/v1/ramp_connect.py) import the `connectrpc` +# runtime, published as connect-python. Optional so `pip install ramp-protocol` +# works for message-only use. (Confirm the exact PyPI version when publishing.) +connect = ["connect-python>=0.4"] +# Runtime evaluation of the embedded protovalidate CEL rules — optional; consumers +# that only construct/parse messages do not need it. +validation = ["protovalidate>=0.7"] + +[project.urls] +Homepage = "https://ramp-protocol.org" +Source = "https://github.com/RAMP-Protocol/protocol" + +[tool.setuptools.packages.find] +where = ["."] +# PEP 420 namespace packages — the protobuf/connect plugins emit no __init__.py. +# Imports mirror the proto package: `ramp.v1.ramp_pb2`, `comp.v1.comp_pb2`, and +# the vocabulary constants at `vocab.pricingunits` (etc.). +namespaces = true +include = ["ramp*", "comp*", "vocab*"] diff --git a/gen/python/ramp/v1/ramp_connect.py b/gen/python/ramp/v1/ramp_connect.py new file mode 100644 index 00000000..24bf261f --- /dev/null +++ b/gen/python/ramp/v1/ramp_connect.py @@ -0,0 +1,800 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: ramp/v1/ramp.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.codec import Codec +from connectrpc.compression import Compression +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import ramp.v1.ramp_pb2 as ramp_dot_v1_dot_ramp__pb2 + + +class ExchangeService(Protocol): + async def discover_resources(self, request: ramp_dot_v1_dot_ramp__pb2.ResourceQuery, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.ResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def execute_transaction(self, request: ramp_dot_v1_dot_ramp__pb2.TransactionRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.TransactionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def report_usage(self, request: ramp_dot_v1_dot_ramp__pb2.UsageReport, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.UsageReportResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def dispute_transaction(self, request: ramp_dot_v1_dot_ramp__pb2.DisputeRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DisputeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def request_domain_verification(self, request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def confirm_domain_verification(self, request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class ExchangeServiceASGIApplication(ConnectASGIApplication[ExchangeService]): + def __init__(self, service: ExchangeService | AsyncGenerator[ExchangeService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/ramp.v1.ExchangeService/DiscoverResources": Endpoint.unary( + method=MethodInfo( + name="DiscoverResources", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.ResourceQuery, + output=ramp_dot_v1_dot_ramp__pb2.ResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.discover_resources, + ), + "/ramp.v1.ExchangeService/ExecuteTransaction": Endpoint.unary( + method=MethodInfo( + name="ExecuteTransaction", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.TransactionRequest, + output=ramp_dot_v1_dot_ramp__pb2.TransactionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.execute_transaction, + ), + "/ramp.v1.ExchangeService/ReportUsage": Endpoint.unary( + method=MethodInfo( + name="ReportUsage", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.UsageReport, + output=ramp_dot_v1_dot_ramp__pb2.UsageReportResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.report_usage, + ), + "/ramp.v1.ExchangeService/DisputeTransaction": Endpoint.unary( + method=MethodInfo( + name="DisputeTransaction", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DisputeRequest, + output=ramp_dot_v1_dot_ramp__pb2.DisputeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.dispute_transaction, + ), + "/ramp.v1.ExchangeService/RequestDomainVerification": Endpoint.unary( + method=MethodInfo( + name="RequestDomainVerification", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, + output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.request_domain_verification, + ), + "/ramp.v1.ExchangeService/ConfirmDomainVerification": Endpoint.unary( + method=MethodInfo( + name="ConfirmDomainVerification", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, + output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.confirm_domain_verification, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/ramp.v1.ExchangeService" + + +class ExchangeServiceClient(ConnectClient): + async def discover_resources( + self, + request: ramp_dot_v1_dot_ramp__pb2.ResourceQuery, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.ResourceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DiscoverResources", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.ResourceQuery, + output=ramp_dot_v1_dot_ramp__pb2.ResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def execute_transaction( + self, + request: ramp_dot_v1_dot_ramp__pb2.TransactionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.TransactionResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ExecuteTransaction", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.TransactionRequest, + output=ramp_dot_v1_dot_ramp__pb2.TransactionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def report_usage( + self, + request: ramp_dot_v1_dot_ramp__pb2.UsageReport, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.UsageReportResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ReportUsage", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.UsageReport, + output=ramp_dot_v1_dot_ramp__pb2.UsageReportResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def dispute_transaction( + self, + request: ramp_dot_v1_dot_ramp__pb2.DisputeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.DisputeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DisputeTransaction", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DisputeRequest, + output=ramp_dot_v1_dot_ramp__pb2.DisputeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def request_domain_verification( + self, + request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RequestDomainVerification", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, + output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def confirm_domain_verification( + self, + request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ConfirmDomainVerification", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, + output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + +class CatalogService(Protocol): + async def push_resources(self, request: ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def remove_resources(self, request: ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def refresh_catalog(self, request: ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class CatalogServiceASGIApplication(ConnectASGIApplication[CatalogService]): + def __init__(self, service: CatalogService | AsyncGenerator[CatalogService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/ramp.v1.CatalogService/PushResources": Endpoint.unary( + method=MethodInfo( + name="PushResources", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, + output=ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.push_resources, + ), + "/ramp.v1.CatalogService/RemoveResources": Endpoint.unary( + method=MethodInfo( + name="RemoveResources", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, + output=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.remove_resources, + ), + "/ramp.v1.CatalogService/RefreshCatalog": Endpoint.unary( + method=MethodInfo( + name="RefreshCatalog", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, + output=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.refresh_catalog, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/ramp.v1.CatalogService" + + +class CatalogServiceClient(ConnectClient): + async def push_resources( + self, + request: ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="PushResources", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, + output=ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def remove_resources( + self, + request: ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RemoveResources", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, + output=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def refresh_catalog( + self, + request: ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RefreshCatalog", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, + output=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + +class BrokerService(Protocol): + async def resolve(self, request: ramp_dot_v1_dot_ramp__pb2.RAMPRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RAMPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class BrokerServiceASGIApplication(ConnectASGIApplication[BrokerService]): + def __init__(self, service: BrokerService | AsyncGenerator[BrokerService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/ramp.v1.BrokerService/Resolve": Endpoint.unary( + method=MethodInfo( + name="Resolve", + service_name="ramp.v1.BrokerService", + input=ramp_dot_v1_dot_ramp__pb2.RAMPRequest, + output=ramp_dot_v1_dot_ramp__pb2.RAMPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.resolve, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/ramp.v1.BrokerService" + + +class BrokerServiceClient(ConnectClient): + async def resolve( + self, + request: ramp_dot_v1_dot_ramp__pb2.RAMPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.RAMPResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Resolve", + service_name="ramp.v1.BrokerService", + input=ramp_dot_v1_dot_ramp__pb2.RAMPRequest, + output=ramp_dot_v1_dot_ramp__pb2.RAMPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + + + + +class ExchangeServiceSync(Protocol): + def discover_resources(self, request: ramp_dot_v1_dot_ramp__pb2.ResourceQuery, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.ResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def execute_transaction(self, request: ramp_dot_v1_dot_ramp__pb2.TransactionRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.TransactionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def report_usage(self, request: ramp_dot_v1_dot_ramp__pb2.UsageReport, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.UsageReportResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def dispute_transaction(self, request: ramp_dot_v1_dot_ramp__pb2.DisputeRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DisputeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def request_domain_verification(self, request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def confirm_domain_verification(self, request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class ExchangeServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: ExchangeServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/ramp.v1.ExchangeService/DiscoverResources": EndpointSync.unary( + method=MethodInfo( + name="DiscoverResources", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.ResourceQuery, + output=ramp_dot_v1_dot_ramp__pb2.ResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.discover_resources, + ), + "/ramp.v1.ExchangeService/ExecuteTransaction": EndpointSync.unary( + method=MethodInfo( + name="ExecuteTransaction", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.TransactionRequest, + output=ramp_dot_v1_dot_ramp__pb2.TransactionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.execute_transaction, + ), + "/ramp.v1.ExchangeService/ReportUsage": EndpointSync.unary( + method=MethodInfo( + name="ReportUsage", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.UsageReport, + output=ramp_dot_v1_dot_ramp__pb2.UsageReportResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.report_usage, + ), + "/ramp.v1.ExchangeService/DisputeTransaction": EndpointSync.unary( + method=MethodInfo( + name="DisputeTransaction", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DisputeRequest, + output=ramp_dot_v1_dot_ramp__pb2.DisputeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.dispute_transaction, + ), + "/ramp.v1.ExchangeService/RequestDomainVerification": EndpointSync.unary( + method=MethodInfo( + name="RequestDomainVerification", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, + output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.request_domain_verification, + ), + "/ramp.v1.ExchangeService/ConfirmDomainVerification": EndpointSync.unary( + method=MethodInfo( + name="ConfirmDomainVerification", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, + output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.confirm_domain_verification, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/ramp.v1.ExchangeService" + + +class ExchangeServiceClientSync(ConnectClientSync): + def discover_resources( + self, + request: ramp_dot_v1_dot_ramp__pb2.ResourceQuery, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.ResourceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DiscoverResources", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.ResourceQuery, + output=ramp_dot_v1_dot_ramp__pb2.ResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def execute_transaction( + self, + request: ramp_dot_v1_dot_ramp__pb2.TransactionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.TransactionResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ExecuteTransaction", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.TransactionRequest, + output=ramp_dot_v1_dot_ramp__pb2.TransactionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def report_usage( + self, + request: ramp_dot_v1_dot_ramp__pb2.UsageReport, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.UsageReportResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ReportUsage", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.UsageReport, + output=ramp_dot_v1_dot_ramp__pb2.UsageReportResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def dispute_transaction( + self, + request: ramp_dot_v1_dot_ramp__pb2.DisputeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.DisputeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DisputeTransaction", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DisputeRequest, + output=ramp_dot_v1_dot_ramp__pb2.DisputeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def request_domain_verification( + self, + request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RequestDomainVerification", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, + output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def confirm_domain_verification( + self, + request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ConfirmDomainVerification", + service_name="ramp.v1.ExchangeService", + input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, + output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + +class CatalogServiceSync(Protocol): + def push_resources(self, request: ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def remove_resources(self, request: ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def refresh_catalog(self, request: ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class CatalogServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: CatalogServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/ramp.v1.CatalogService/PushResources": EndpointSync.unary( + method=MethodInfo( + name="PushResources", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, + output=ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.push_resources, + ), + "/ramp.v1.CatalogService/RemoveResources": EndpointSync.unary( + method=MethodInfo( + name="RemoveResources", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, + output=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.remove_resources, + ), + "/ramp.v1.CatalogService/RefreshCatalog": EndpointSync.unary( + method=MethodInfo( + name="RefreshCatalog", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, + output=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.refresh_catalog, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/ramp.v1.CatalogService" + + +class CatalogServiceClientSync(ConnectClientSync): + def push_resources( + self, + request: ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="PushResources", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, + output=ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def remove_resources( + self, + request: ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RemoveResources", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, + output=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def refresh_catalog( + self, + request: ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RefreshCatalog", + service_name="ramp.v1.CatalogService", + input=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, + output=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + +class BrokerServiceSync(Protocol): + def resolve(self, request: ramp_dot_v1_dot_ramp__pb2.RAMPRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RAMPResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class BrokerServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: BrokerServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: + super().__init__( + endpoints={ + "/ramp.v1.BrokerService/Resolve": EndpointSync.unary( + method=MethodInfo( + name="Resolve", + service_name="ramp.v1.BrokerService", + input=ramp_dot_v1_dot_ramp__pb2.RAMPRequest, + output=ramp_dot_v1_dot_ramp__pb2.RAMPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.resolve, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + compressions=compressions, + codecs=codecs, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/ramp.v1.BrokerService" + + +class BrokerServiceClientSync(ConnectClientSync): + def resolve( + self, + request: ramp_dot_v1_dot_ramp__pb2.RAMPRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> ramp_dot_v1_dot_ramp__pb2.RAMPResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Resolve", + service_name="ramp.v1.BrokerService", + input=ramp_dot_v1_dot_ramp__pb2.RAMPRequest, + output=ramp_dot_v1_dot_ramp__pb2.RAMPResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + diff --git a/gen/python/ramp/v1/ramp_pb2.py b/gen/python/ramp/v1/ramp_pb2.py new file mode 100644 index 00000000..02146bed --- /dev/null +++ b/gen/python/ramp/v1/ramp_pb2.py @@ -0,0 +1,296 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: ramp/v1/ramp.proto +# Protobuf Python Version: 7.35.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 35, + 1, + '', + 'ramp/v1/ramp.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 +from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 +from ramp.v1 import vocab_pb2 as ramp_dot_v1_dot_vocab__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12ramp/v1/ramp.proto\x12\x07ramp.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x13ramp/v1/vocab.proto\"\xb5\x02\n\x15\x41\x63\x63\x65ptableRestriction\x12,\n\x04\x61xis\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04\x61xis\x12\xed\x01\n\x06values\x18\x02 \x03(\tB\xd4\x01\xbaH\xd0\x01\x92\x01\x02\x10@\xba\x01\xc7\x01\n$acceptable_restriction.values.format\x12Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\x06values\"\xa1\x03\n\rResourceQuery\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12:\n\x08\x64\x65\x61\x64line\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x08\x64\x65\x61\x64line\x88\x01\x01\x12-\n\x12supported_profiles\x18\x07 \x03(\tR\x11supportedProfiles\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_deadline\"\xb9\x02\n\x10ResourceResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x65xchange\x18\x03 \x01(\tR\x08\x65xchange\x12&\n\x06offers\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12\x36\n\x0coffer_groups\x18\x05 \x03(\x0b\x32\x13.ramp.v1.OfferGroupR\x0bofferGroups\x12:\n\nrate_limit\x18\x06 \x01(\x0b\x32\x16.ramp.v1.RateLimitInfoH\x00R\trateLimit\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_rate_limit\"\xcc\x02\n\nOfferGroup\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12&\n\x06offers\x18\x02 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12H\n\x10\x64iscovery_method\x18\x03 \x01(\x0e\x32\x18.ramp.v1.DiscoveryMethodH\x00R\x0f\x64iscoveryMethod\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x04 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x01R\rabsenceReason\x88\x01\x01\x12I\n\x13restriction_filters\x18\x05 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x12restrictionFiltersB\x13\n\x11_discovery_methodB\x11\n\x0f_absence_reason\"\xbd\x01\n\rRateLimitInfo\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x1c\n\tremaining\x18\x02 \x01(\x05R\tremaining\x12\x35\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07resetAt\x12\x36\n\x06window\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x42\t\n\x07_window\"\x97\x02\n\x15SubscriptionQuotaInfo\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1f\n\x0bquota_limit\x18\x02 \x01(\x05R\nquotaLimit\x12\x1d\n\nquota_used\x18\x03 \x01(\x05R\tquotaUsed\x12\'\n\x0fquota_remaining\x18\x04 \x01(\x05R\x0equotaRemaining\x12<\n\tresets_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x08resetsAt\x88\x01\x01\x12\x17\n\x04unit\x18\x06 \x01(\tH\x01R\x04unit\x88\x01\x01\x42\x0c\n\n_resets_atB\x07\n\x05_unit\"\xdb\x07\n\x05Offer\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12*\n\x07pricing\x18\x03 \x01(\x0b\x32\x10.ramp.v1.PricingR\x07pricing\x12@\n\x0f\x64\x65livery_method\x18\x04 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12?\n\treporting\x18\x05 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\treporting\x88\x01\x01\x12>\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12:\n\x08identity\x18\x07 \x01(\x0b\x32\x19.ramp.v1.ResourceIdentityH\x03R\x08identity\x88\x01\x01\x12\x1c\n\tsignature\x18\t \x01(\tR\tsignature\x12/\n\x13signature_algorithm\x18\n \x01(\tR\x12signatureAlgorithm\x12,\n\x0fsubscription_id\x18\x0b \x01(\tH\x04R\x0esubscriptionId\x88\x01\x01\x12%\n\x0eiab_categories\x18\r \x03(\tR\riabCategories\x12@\n\x0c\x61ttestations\x18\x0e \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12=\n\ndata_as_of\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\x08\x64\x61taAsOf\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12,\n\x08previews\x18\x12 \x03(\x0b\x32\x10.ramp.v1.PreviewR\x08previews\x12*\n\x05terms\x18\x13 \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x08\n\x06_titleB\x0c\n\n_reportingB\r\n\x0b_expires_atB\x0b\n\t_identityB\x12\n\x10_subscription_idB\r\n\x0b_data_as_of\"\xab\x07\n\x10ResourceIdentity\x12(\n\rcanonical_url\x18\x01 \x01(\tH\x00R\x0c\x63\x61nonicalUrl\x88\x01\x01\x12\x15\n\x03\x64oi\x18\x02 \x01(\tH\x01R\x03\x64oi\x88\x01\x01\x12 \n\tiptc_guid\x18\x03 \x01(\tH\x02R\x08iptcGuid\x88\x01\x01\x12\x17\n\x04isni\x18\x04 \x01(\tH\x03R\x04isni\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x05 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x06 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12L\n\x13resource_mutability\x18\x08 \x01(\x0e\x32\x1b.ramp.v1.ResourceMutabilityR\x12resourceMutability\x12(\n\rc2pa_manifest\x18\x07 \x01(\tH\x06R\x0c\x63\x32paManifest\x88\x01\x01\x12\x39\n\x0b\x63\x32pa_status\x18\t \x01(\x0e\x32\x13.ramp.v1.C2PAStatusH\x07R\nc2paStatus\x88\x01\x01\x12&\n\x0csoft_binding\x18\n \x01(\tH\x08R\x0bsoftBinding\x88\x01\x01\x12\x33\n\x13soft_binding_method\x18\x0b \x01(\tH\tR\x11softBindingMethod\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\xd1\x01\xbaH\xcd\x01\x1a\xca\x01\n/resource_identity.resource_mutability_specified\x12?resource_mutability must not be RESOURCE_MUTABILITY_UNSPECIFIED\x1aVthis.resource_mutability != ramp.v1.ResourceMutability.RESOURCE_MUTABILITY_UNSPECIFIEDB\x10\n\x0e_canonical_urlB\x06\n\x04_doiB\x0c\n\n_iptc_guidB\x07\n\x05_isniB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\x10\n\x0e_c2pa_manifestB\x0e\n\x0c_c2pa_statusB\x0f\n\r_soft_bindingB\x16\n\x14_soft_binding_method\"\xe1\x01\n\x13ResourceAttestation\x12\x1a\n\x08verifier\x18\x01 \x01(\tR\x08verifier\x12\x10\n\x03kid\x18\x02 \x01(\tR\x03kid\x12;\n\x0b\x61ttested_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nattestedAt\x12\x10\n\x03uri\x18\x04 \x01(\tR\x03uri\x12/\n\x06\x63laims\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63laims\x12\x1c\n\tsignature\x18\x06 \x01(\tR\tsignature\"\xd4\x04\n\x07License\x12\x15\n\x03uri\x18\x01 \x01(\tH\x00R\x03uri\x88\x01\x01\x12\x13\n\x02id\x18\x02 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x17\n\x04name\x18\x03 \x01(\tH\x02R\x04name\x88\x01\x01\x12!\n\timmutable\x18\x04 \x01(\x08H\x03R\timmutable\x88\x01\x01\x12\xad\x02\n\nuri_digest\x18\x05 \x01(\tB\x88\x02\xbaH\x84\x02\xba\x01\x80\x02\n\x19license.uri_digest.format\x12Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\x1a\x86\x01this == \'\' || this.matches(\'^sha256:[0-9a-f]{64}$\') || this.matches(\'^sha384:[0-9a-f]{96}$\') || this.matches(\'^sha512:[0-9a-f]{128}$\')H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n license.digest_required_with_uri\x12*uri_digest is required whenever uri is set\x1a\'this.uri == \'\' || this.uri_digest != \'\'B\x06\n\x04_uriB\x05\n\x03_idB\x07\n\x05_nameB\x0c\n\n_immutableB\r\n\x0b_uri_digest\"\xe4\x06\n\x0bRestriction\x12,\n\x04kind\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04kind\x12\xeb\x01\n\tpermitted\x18\x02 \x03(\tB\xcc\x01\xbaH\xc8\x01\x92\x01\x02\x10@\xba\x01\xbf\x01\n\x1crestriction.permitted.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\tpermitted\x12\xee\x01\n\nprohibited\x18\x03 \x03(\tB\xcd\x01\xbaH\xc9\x01\x92\x01\x02\x10@\xba\x01\xc0\x01\n\x1drestriction.prohibited.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\nprohibited\x12\x1a\n\x08\x61\x64visory\x18\x04 \x01(\x08R\x08\x61\x64visory:\xab\x02\xbaH\xa7\x02\x1a\x93\x01\n)restriction.permitted_prohibited_disjoint\x12\x36\x61 token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\x1a\x8e\x01\n\x1arestriction.kind_specified\x12-kind must not be RESTRICTION_KIND_UNSPECIFIED\x1a\x41this.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED\"\xd4\x04\n\x05Quota\x12\xf1\x02\n\x06metric\x18\x01 \x01(\tB\xd8\x02\xbaH\xe5\x01r\x02\x18@\xba\x01\xdd\x01\n\x13quota.metric.format\x12\x63metric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a\x61this != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\x0bimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x0cinput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06\x63opies\x8a\xb5\x18\x05seatsR\x06metric\x12\x1d\n\x05limit\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x05limit\x12,\n\x06window\x18\x03 \x01(\x0e\x32\x14.ramp.v1.QuotaWindowR\x06window:\x89\x01\xbaH\x85\x01\x1a\x82\x01\n\x16quota.window_specified\x12+window must not be QUOTA_WINDOW_UNSPECIFIED\x1a;this.window != ramp.v1.QuotaWindow.QUOTA_WINDOW_UNSPECIFIED\"\xb0\x06\n\nObligation\x12+\n\x04kind\x18\x01 \x01(\x0e\x32\x17.ramp.v1.ObligationKindR\x04kind\x12\x34\n\x07trigger\x18\x02 \x01(\x0e\x32\x1a.ramp.v1.ObligationTriggerR\x07trigger\x12:\n\rscope_license\x18\x03 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x0cscopeLicense\x88\x01\x01\x12\x1b\n\x06\x64\x65tail\x18\x04 \x01(\tH\x01R\x06\x64\x65tail\x88\x01\x01:\xc8\x04\xbaH\xc4\x04\x1a\x95\x02\n-obligation.share_alike.requires_scope_license\x12\x44SHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))\x1a\x8a\x01\n\x19obligation.kind_specified\x12,kind must not be OBLIGATION_KIND_UNSPECIFIED\x1a?this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_UNSPECIFIED\x1a\x9c\x01\n\x1cobligation.trigger_specified\x12\x32trigger must not be OBLIGATION_TRIGGER_UNSPECIFIED\x1aHthis.trigger != ramp.v1.ObligationTrigger.OBLIGATION_TRIGGER_UNSPECIFIEDB\x10\n\x0e_scope_licenseB\t\n\x07_detail\"\xe6\x07\n\x0bLicenseTerm\x12/\n\x07license\x18\x01 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x07license\x88\x01\x01\x12\x34\n\tsemantics\x18\x02 \x01(\x0e\x32\x16.ramp.v1.TermSemanticsR\tsemantics\x12\x38\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x14.ramp.v1.RestrictionR\x0crestrictions\x12&\n\x06quotas\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.QuotaR\x06quotas\x12\x35\n\x0bobligations\x18\x05 \x03(\x0b\x32\x13.ramp.v1.ObligationR\x0bobligations\x12\x37\n\x07pricing\x18\x06 \x01(\x0b\x32\x10.ramp.v1.PricingB\x06\xbaH\x03\xc8\x01\x01H\x01R\x07pricing\x88\x01\x01\x12 \n\x06scopes\x18\x07 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\"\n\npart_label\x18\x08 \x01(\tH\x02R\tpartLabel\x88\x01\x01:\xb0\x04\xbaH\xac\x04\x1a\xe2\x01\n(license_term.reference_only.requires_uri\x12>REFERENCE_ONLY terms must carry a license with a non-empty uri\x1avthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\x1a\xa9\x01\n%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)\x1a\x98\x01\n license_term.semantics_specified\x12\x30semantics must not be TERM_SEMANTICS_UNSPECIFIED\x1a\x42this.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_UNSPECIFIEDB\n\n\x08_licenseB\n\n\x08_pricingB\r\n\x0b_part_label\"\xd7\x01\n\x07Preview\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n\nmedia_type\x18\x02 \x01(\tR\tmediaType\x12\x19\n\x05width\x18\x03 \x01(\x05H\x00R\x05width\x88\x01\x01\x12\x1b\n\x06height\x18\x04 \x01(\x05H\x01R\x06height\x88\x01\x01\x12\x1f\n\x08\x64uration\x18\x05 \x01(\x05H\x02R\x08\x64uration\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\tH\x03R\x04size\x88\x01\x01\x42\x08\n\x06_widthB\t\n\x07_heightB\x0b\n\t_durationB\x07\n\x05_size\"\xf7\t\n\x07Pricing\x12+\n\x05model\x18\x01 \x01(\x0e\x32\x15.ramp.v1.PricingModelR\x05model\x12\x12\n\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x04 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x05 \x01(\x05H\x01R\x11\x65stimatedQuantity\x88\x01\x01\x12;\n\x17license_duration_months\x18\x07 \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\xb8\x03\n\x04unit\x18\x08 \x01(\tB\x9e\x03\xbaH\xe9\x01r\x02\x18@\xba\x01\xe1\x01\n\x13pricing.unit.format\x12iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\x8a\xb5\x18\x07\x66\x65tches\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05\x63\x61lls\x8a\xb5\x18\x05pages\x8a\xb5\x18\x07seconds\x8a\xb5\x18\x07minutes\x8a\xb5\x18\x07records\x8a\xb5\x18\x07streams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\ncharacters\x8a\xb5\x18\x05\x62ytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-kmH\x03R\x04unit\x88\x01\x01\x12\x39\n\x08metering\x18\t \x01(\x0e\x32\x18.ramp.v1.PricingMeteringH\x04R\x08metering\x88\x01\x01:\xae\x03\xbaH\xaa\x03\x1a\x97\x01\n\x1epricing.per_unit.requires_unit\x12\'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\x1a\x86\x01\n\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0\x1a\x84\x01\n\x17pricing.model_specified\x12+model must not be PRICING_MODEL_UNSPECIFIED\x1a\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\texpiresAt\x88\x01\x01\x12.\n\x13\x61gent_identity_hash\x18\n \x01(\tR\x11\x61gentIdentityHash\x12\x32\n\x12retrieval_endpoint\x18\x12 \x01(\tH\x06R\x11retrievalEndpoint\x88\x01\x01\x12,\n\x0fsubscription_id\x18\x0c \x01(\tH\x07R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x10 \x01(\x0b\x32\r.ramp.v1.CostH\x08R\x15subscriptionUnitValue\x88\x01\x01\x12\x34\n\x05items\x18\r \x03(\x0b\x32\x1e.ramp.v1.TransactionResultItemR\x05items\x12\x31\n\ntotal_cost\x18\x0e \x01(\x0b\x32\r.ramp.v1.CostH\tR\ttotalCost\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_transaction_idB\r\n\x0b_billing_idB\x11\n\x0f_resource_titleB\x07\n\x05_costB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\r\n\x0b_total_cost\"\xf3\x06\n\x15TransactionResultItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12%\n\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x03 \x01(\tR\tbillingId\x12*\n\x0eresource_title\x18\x04 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x05 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12,\n\x0fsubscription_id\x18\x06 \x01(\tH\x01R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x0b \x01(\x0b\x32\r.ramp.v1.CostH\x02R\x15subscriptionUnitValue\x88\x01\x01\x12?\n\rdenial_reason\x18\x07 \x01(\x0e\x32\x15.ramp.v1.DenialReasonH\x03R\x0c\x64\x65nialReason\x88\x01\x01\x12O\n\x16restriction_mismatches\x18\r \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12>\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\x0c \x01(\tH\x05R\x11retrievalEndpoint\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x06R\x13reportingObligation\x88\x01\x01\x42\x11\n\x0f_resource_titleB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\x10\n\x0e_denial_reasonB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x17\n\x15_reporting_obligation\"j\n\x04\x43ost\x12\x16\n\x06\x61mount\x18\x01 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x02 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x03 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x42\x0c\n\n_unit_cost\"\xe2\x01\n\x14PushResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x30\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x16.ramp.v1.ResourceEntryR\x07\x65ntries\x12\x1b\n\tcaller_id\x18\x04 \x01(\tR\x08\x63\x61llerId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xb3\x06\n\rResourceEntry\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\"\n\ncontent_id\x18\x03 \x01(\tH\x00R\tcontentId\x88\x01\x01\x12\x19\n\x05title\x18\x04 \x01(\tH\x01R\x05title\x88\x01\x01\x12\"\n\nword_count\x18\x05 \x01(\x05H\x02R\twordCount\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x06 \x01(\x05H\x03R\x11\x65stimatedQuantity\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x07 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x08 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12\x35\n\x06source\x18\t \x01(\x0e\x32\x18.ramp.v1.IngestionSourceH\x06R\x06source\x88\x01\x01\x12\x30\n\x11provenance_source\x18\n \x01(\tH\x07R\x10provenanceSource\x88\x01\x01\x12R\n\x14provenance_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x08R\x13provenanceTimestamp\x88\x01\x01\x12@\n\x0c\x61ttestations\x18\x0c \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12*\n\x05terms\x18\r \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_content_idB\x08\n\x06_titleB\r\n\x0b_word_countB\x15\n\x13_estimated_quantityB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\t\n\x07_sourceB\x14\n\x12_provenance_sourceB\x17\n\x15_provenance_timestamp\"\xcb\x01\n\x15PushResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x05R\x08\x61\x63\x63\x65pted\x12\x1a\n\x08rejected\x18\x03 \x01(\x05R\x08rejected\x12\x1a\n\x08warnings\x18\x04 \x03(\tR\x08warnings\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"]\n\x16RemoveResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\"E\n\x17RemoveResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07removed\x18\x02 \x01(\x05R\x07removed\"F\n\x15RefreshCatalogRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\"D\n\x16RefreshCatalogResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07started\x18\x02 \x01(\x08R\x07started\"\x99\x02\n\x13ReportingObligation\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\x12\x36\n\x06window\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x03 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12\'\n\x0frequired_fields\x18\x04 \x03(\tR\x0erequiredFields\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_windowB\x0b\n\t_endpoint\"\xa0\x03\n\x0bUsageReport\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12$\n\x05usage\x18\x05 \x01(\x0b\x32\x0e.ramp.v1.UsageR\x05usage\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1f\n\x08\x65xchange\x18\x08 \x01(\tH\x00R\x08\x65xchange\x88\x01\x01\x12+\n\x06\x61ssets\x18\t \x03(\x0b\x32\x13.ramp.v1.UsageAssetR\x06\x61ssets\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_exchange\"\xd1\x01\n\x11\x41ttributionDetail\x12(\n\rdisplayed_url\x18\x01 \x01(\tH\x00R\x0c\x64isplayedUrl\x88\x01\x01\x12\x34\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x17.ramp.v1.CitationFormatH\x01R\x06\x66ormat\x88\x01\x01\x12+\n\x0fvisible_to_user\x18\x03 \x01(\x08H\x02R\rvisibleToUser\x88\x01\x01\x42\x10\n\x0e_displayed_urlB\t\n\x07_formatB\x12\n\x10_visible_to_user\"\xf0\x04\n\x05Usage\x12\x1a\n\x08\x66unction\x18\x01 \x03(\tR\x08\x66unction\x12\x14\n\x05subfn\x18\x02 \x03(\tR\x05subfn\x12+\n\x11\x63onsumed_quantity\x18\x03 \x01(\x05R\x10\x63onsumedQuantity\x12/\n\x11\x64isplayed_to_user\x18\x04 \x01(\x08H\x00R\x0f\x64isplayedToUser\x88\x01\x01\x12\x30\n\x11\x63itation_included\x18\x05 \x01(\x08H\x01R\x10\x63itationIncluded\x88\x01\x01\x12<\n\x0b\x61ttribution\x18\x06 \x03(\x0b\x32\x1a.ramp.v1.AttributionDetailR\x0b\x61ttribution\x12\xa8\x02\n\rconsumed_unit\x18\x08 \x01(\tB\xfd\x01\xbaH\xf9\x01r\x02\x18@\xba\x01\xf1\x01\n\x1ausage.consumed_unit.format\x12rconsumed_unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')H\x02R\x0c\x63onsumedUnit\x88\x01\x01\x42\x14\n\x12_displayed_to_userB\x14\n\x12_citation_includedB\x10\n\x0e_consumed_unit\"v\n\nUsageAsset\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\"\n\npackage_id\x18\x03 \x01(\tH\x01R\tpackageId\x88\x01\x01\x42\x08\n\x06_titleB\r\n\x0b_package_id\"\x92\x01\n\x13UsageReportResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\treport_id\x18\x03 \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xa7\x04\n\x0bRAMPRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12\x42\n\x0b\x63onstraints\x18\x04 \x01(\x0b\x32\x1b.ramp.v1.RequestConstraintsH\x00R\x0b\x63onstraints\x88\x01\x01\x12-\n\x12supported_profiles\x18\x05 \x03(\tR\x11supportedProfiles\x12\x19\n\x05query\x18\x06 \x01(\tH\x01R\x05query\x88\x01\x01\x12\x43\n\x0esearch_filters\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02R\rsearchFilters\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_constraintsB\x08\n\x06_queryB\x11\n\x0f_search_filters\"\xca\x05\n\x12RequestConstraints\x12\x1c\n\texchanges\x18\x01 \x03(\tR\texchanges\x12/\n\tmax_price\x18\x02 \x01(\x0b\x32\r.ramp.v1.CostH\x00R\x08maxPrice\x88\x01\x01\x12\'\n\rmax_unit_cost\x18\x03 \x01(\x01H\x01R\x0bmaxUnitCost\x88\x01\x01\x12H\n\x13\x64\x65livery_preference\x18\x04 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x12\x64\x65liveryPreference\x12\x30\n\x11reporting_capable\x18\x05 \x01(\x08H\x02R\x10reportingCapable\x88\x01\x01\x12/\n\x13preferred_exchanges\x18\x06 \x03(\tR\x12preferredExchanges\x12&\n\x0c\x62udget_scope\x18\x07 \x01(\tH\x03R\x0b\x62udgetScope\x88\x01\x01\x12\x37\n\rperiod_budget\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostH\x04R\x0cperiodBudget\x88\x01\x01\x12\x43\n\rbudget_period\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationH\x05R\x0c\x62udgetPeriod\x88\x01\x01\x12@\n\x0cmax_data_age\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x06R\nmaxDataAge\x88\x01\x01\x12\x1e\n\x08max_hops\x18\x0b \x01(\x05H\x07R\x07maxHops\x88\x01\x01\x42\x0c\n\n_max_priceB\x10\n\x0e_max_unit_costB\x14\n\x12_reporting_capableB\x0f\n\r_budget_scopeB\x10\n\x0e_period_budgetB\x10\n\x0e_budget_periodB\x0f\n\r_max_data_ageB\x0b\n\t_max_hops\"\xb0\x01\n\nJsonWebKey\x12\x10\n\x03kid\x18\x01 \x01(\tR\x03kid\x12\x10\n\x03kty\x18\x02 \x01(\tR\x03kty\x12\x10\n\x03\x63rv\x18\x03 \x01(\tR\x03\x63rv\x12\x10\n\x03use\x18\x04 \x01(\tR\x03use\x12\x10\n\x03\x61lg\x18\x05 \x01(\tR\x03\x61lg\x12\x0c\n\x01x\x18\x06 \x01(\tR\x01x\x12\x1d\n\nnot_before\x18\x07 \x01(\tR\tnotBefore\x12\x1b\n\tnot_after\x18\x08 \x01(\tR\x08notAfter\"\xdf\r\n\x11WellKnownManifest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12!\n\x04role\x18\x02 \x01(\x0e\x32\r.ramp.v1.RoleR\x04role\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x1d\n\x07\x63ontact\x18\x04 \x01(\tH\x00R\x07\x63ontact\x88\x01\x01\x12\x34\n\x0bpublic_keys\x18\x05 \x03(\x0b\x32\x13.ramp.v1.JsonWebKeyR\npublicKeys\x12.\n\x10invalidation_url\x18\x06 \x01(\tH\x01R\x0finvalidationUrl\x88\x01\x01\x12\x39\n\texchanges\x18\x07 \x03(\x0b\x32\x1b.ramp.v1.AuthorizedExchangeR\texchanges\x12N\n\x14\x63\x61talog_contributors\x18\x08 \x03(\x0b\x32\x1b.ramp.v1.CatalogContributorR\x13\x63\x61talogContributors\x12\x17\n\x04name\x18\t \x01(\tH\x02R\x04name\x88\x01\x01\x12\x1f\n\x08operator\x18\n \x01(\tH\x03R\x08operator\x88\x01\x01\x12,\n\x0foperator_domain\x18\x0b \x01(\tH\x04R\x0eoperatorDomain\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x0c \x01(\tH\x05R\x08\x65ndpoint\x88\x01\x01\x12,\n\x0fhealth_endpoint\x18\r \x01(\tH\x06R\x0ehealthEndpoint\x88\x01\x01\x12.\n\x10\x63\x61talog_endpoint\x18\x0e \x01(\tH\x07R\x0f\x63\x61talogEndpoint\x88\x01\x01\x12>\n\x1bprotocol_versions_supported\x18\x10 \x03(\tR\x19protocolVersionsSupported\x12O\n\x18pricing_models_supported\x18\x11 \x03(\x0e\x32\x15.ramp.v1.PricingModelR\x16pricingModelsSupported\x12U\n\x1a\x64\x65livery_methods_supported\x18\x12 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x18\x64\x65liveryMethodsSupported\x12\x34\n\x16hash_methods_supported\x18\x13 \x03(\tR\x14hashMethodsSupported\x12-\n\x12\x61\x63\x63\x65pted_verifiers\x18\x14 \x03(\tR\x11\x61\x63\x63\x65ptedVerifiers\x12 \n\tterms_uri\x18\x15 \x01(\tH\x08R\x08termsUri\x88\x01\x01\x12$\n\x0bprivacy_uri\x18\x16 \x01(\tH\tR\nprivacyUri\x88\x01\x01\x12-\n\x12supported_profiles\x18\x17 \x03(\tR\x11supportedProfiles\x12I\n\x16supported_auth_methods\x18\x18 \x03(\x0e\x32\x13.ramp.v1.AuthMethodR\x14supportedAuthMethods\x12$\n\x0boidc_issuer\x18\x19 \x01(\tH\nR\noidcIssuer\x88\x01\x01\x12\x33\n\x13gnap_grant_endpoint\x18\x1a \x01(\tH\x0bR\x11gnapGrantEndpoint\x88\x01\x01\x12(\n\rbase_currency\x18\x1b \x01(\tH\x0cR\x0c\x62\x61seCurrency\x88\x01\x01\x12\x37\n\x15max_intermediary_hops\x18\x1c \x01(\x05H\rR\x13maxIntermediaryHops\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:x\xbaHu\x1as\n\"well_known_manifest.role_specified\x12!role must not be ROLE_UNSPECIFIED\x1a*this.role != ramp.v1.Role.ROLE_UNSPECIFIEDB\n\n\x08_contactB\x13\n\x11_invalidation_urlB\x07\n\x05_nameB\x0b\n\t_operatorB\x12\n\x10_operator_domainB\x0b\n\t_endpointB\x12\n\x10_health_endpointB\x13\n\x11_catalog_endpointB\x0c\n\n_terms_uriB\x0e\n\x0c_privacy_uriB\x0e\n\x0c_oidc_issuerB\x16\n\x14_gnap_grant_endpointB\x10\n\x0e_base_currencyB\x18\n\x16_max_intermediary_hops\"`\n\x13KeyInvalidationList\x12/\n\x05\x61s_of\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04\x61sOf\x12\x18\n\x07revoked\x18\x02 \x03(\tR\x07revoked\"P\n\x12\x43\x61talogContributor\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\"\n\x0crelationship\x18\x02 \x01(\tR\x0crelationship\"\xa0\x03\n\x12\x41uthorizedExchange\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12\x41\n\x0crelationship\x18\x03 \x01(\x0e\x32\x1d.ramp.v1.ProviderRelationshipR\x0crelationship\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\xc4\x01\xbaH\xc0\x01\x1a\xbd\x01\n*authorized_exchange.relationship_specified\x12:relationship must not be PROVIDER_RELATIONSHIP_UNSPECIFIED\x1aSthis.relationship != ramp.v1.ProviderRelationship.PROVIDER_RELATIONSHIP_UNSPECIFIED\"\xe8\x06\n\x0cRAMPResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12%\n\x0etransaction_id\x18\x04 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x05 \x01(\tR\tbillingId\x12\x1a\n\x08\x65xchange\x18\x06 \x01(\tR\x08\x65xchange\x12*\n\x0eresource_title\x18\x07 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\r \x01(\tH\x03R\x11retrievalEndpoint\x88\x01\x01\x12\x33\n\x13\x61gent_identity_hash\x18\x0e \x01(\tH\x04R\x11\x61gentIdentityHash\x88\x01\x01\x12\x31\n\nbroker_fee\x18\x0c \x01(\x0b\x32\r.ramp.v1.CostH\x05R\tbrokerFee\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x10 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x06R\rabsenceReason\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_resource_titleB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x16\n\x14_agent_identity_hashB\r\n\x0b_broker_feeB\x11\n\x0f_absence_reason\"\xab\x05\n\x0e\x44isputeRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12.\n\x06reason\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeReasonR\x06reason\x12%\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x37\n\x15received_content_hash\x18\x07 \x01(\tH\x01R\x13receivedContentHash\x88\x01\x01\x12\x35\n\x14received_hash_method\x18\x08 \x01(\tH\x02R\x12receivedHashMethod\x88\x01\x01\x12\x1b\n\treport_id\x18\t \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\x99\x01\xbaH\x95\x01\x1a\x92\x01\n dispute_request.reason_specified\x12-reason must not be DISPUTE_REASON_UNSPECIFIED\x1a?this.reason != ramp.v1.DisputeReason.DISPUTE_REASON_UNSPECIFIEDB\x0e\n\x0c_descriptionB\x18\n\x16_received_content_hashB\x17\n\x15_received_hash_method\"\x8d\x03\n\x0f\x44isputeResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\"\n\ndispute_id\x18\x02 \x01(\tH\x00R\tdisputeId\x88\x01\x01\x12Q\n\x14\x65stimated_resolution\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01R\x13\x65stimatedResolution\x88\x01\x01\x12.\n\x06status\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeStatusR\x06status\x12<\n\nresolution\x18\x06 \x01(\x0e\x32\x17.ramp.v1.ResolutionTypeH\x02R\nresolution\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_dispute_idB\x17\n\x15_estimated_resolutionB\r\n\x0b_resolution\"\xc3\x01\n\x19\x44omainVerificationRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12 \n\tcaller_id\x18\x03 \x01(\tH\x00R\x08\x63\x61llerId\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0c\n\n_caller_id\"\xf9\x01\n\x1b\x44omainVerificationChallenge\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12)\n\x10verification_url\x18\x04 \x01(\tR\x0fverificationUrl\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\x91\x02\n\x1e\x44omainVerificationConfirmation\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12$\n\x0bsigning_key\x18\x04 \x01(\tH\x00R\nsigningKey\x88\x01\x01\x12\x1e\n\x08\x63\x64n_type\x18\x05 \x01(\tH\x01R\x07\x63\x64nType\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_signing_keyB\x0b\n\t_cdn_type\"\xf3\x01\n\x18\x44omainVerificationResult\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x06key_id\x18\x02 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12@\n\x0bvalid_until\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nvalidUntil\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_key_idB\x0e\n\x0c_valid_until\"\x88\x06\n\x0b\x45rrorDetail\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12>\n\x08metadata\x18\x03 \x03(\x0b\x32\".ramp.v1.ErrorDetail.MetadataEntryR\x08metadata\x12K\n\x12transaction_denial\x18\n \x01(\x0b\x32\x1a.ramp.v1.TransactionDenialH\x00R\x11transactionDenial\x12H\n\x11\x63\x61talog_rejection\x18\x0b \x01(\x0b\x32\x19.ramp.v1.CatalogRejectionH\x00R\x10\x63\x61talogRejection\x12Q\n\x14registration_failure\x18\x0c \x01(\x0b\x32\x1c.ramp.v1.RegistrationFailureH\x00R\x13registrationFailure\x12\x42\n\x0f\x64ispute_failure\x18\r \x01(\x0b\x32\x17.ramp.v1.DisputeFailureH\x00R\x0e\x64isputeFailure\x12\x64\n\x1b\x64omain_verification_failure\x18\x0e \x01(\x0b\x32\".ramp.v1.DomainVerificationFailureH\x00R\x19\x64omainVerificationFailure\x12U\n\x16retrieval_auth_failure\x18\x0f \x01(\x0b\x32\x1d.ramp.v1.RetrievalAuthFailureH\x00R\x14retrievalAuthFailure\x12U\n\x16usage_report_rejection\x18\x10 \x01(\x0b\x32\x1d.ramp.v1.UsageReportRejectionH\x00R\x14usageReportRejection\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06reason\"\xcc\x01\n\x11TransactionDenial\x12\x39\n\x06reason\x18\x01 \x01(\x0e\x32\x15.ramp.v1.DenialReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12O\n\x16restriction_mismatches\x18\x02 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x42\x0b\n\t_offer_id\"~\n\x10\x43\x61talogRejection\x12\x43\n\x06reason\x18\x01 \x01(\x0e\x32\x1f.ramp.v1.CatalogRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12%\n\x0erejected_paths\x18\x02 \x03(\tR\rrejectedPaths\"]\n\x13RegistrationFailure\x12\x46\n\x06reason\x18\x01 \x01(\x0e\x32\".ramp.v1.RegistrationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"S\n\x0e\x44isputeFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32\x1d.ramp.v1.DisputeFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"i\n\x19\x44omainVerificationFailure\x12L\n\x06reason\x18\x01 \x01(\x0e\x32(.ramp.v1.DomainVerificationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14RetrievalAuthFailure\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.RetrievalAuthFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14UsageReportRejection\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.UsageReportRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason*\xb6\x01\n\x0f\x44iscoveryMethod\x12 \n\x1c\x44ISCOVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x44ISCOVERY_METHOD_EXCHANGE\x10\x01\x12\x1b\n\x17\x44ISCOVERY_METHOD_SEARCH\x10\x02\x12#\n\x1f\x44ISCOVERY_METHOD_RECOMMENDATION\x10\x03\x12 \n\x1c\x44ISCOVERY_METHOD_SYNDICATION\x10\x04*\xf9\x02\n\x12OfferAbsenceReason\x12$\n OFFER_ABSENCE_REASON_UNSPECIFIED\x10\x00\x12\'\n#OFFER_ABSENCE_REASON_NOT_IN_CATALOG\x10\x01\x12(\n$OFFER_ABSENCE_REASON_CONTENT_BLOCKED\x10\x02\x12-\n)OFFER_ABSENCE_REASON_RESTRICTION_FILTERED\x10\x03\x12\x30\n,OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE\x10\x04\x12\'\n#OFFER_ABSENCE_REASON_NOT_AUTHORIZED\x10\x05\x12+\n\'OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT\x10\x06\x12\x33\n/OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION\x10\x07*q\n\rTermSemantics\x12\x1e\n\x1aTERM_SEMANTICS_UNSPECIFIED\x10\x00\x12\x1d\n\x19TERM_SEMANTICS_ENUMERATED\x10\x01\x12!\n\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xb2\x04\n\x0fRestrictionKind\x12 \n\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xac\x02\n\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x8c\x02\x92\xb5\x18\x03\x61ll\x92\xb5\x18\x06\x61i-all\x92\xb5\x18\x08\x61i-train\x92\xb5\x18\x08\x61i-input\x92\xb5\x18\x08\x61i-index\x92\xb5\x18\x06search\x92\xb5\x18\x05\x63rawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\ncommercial\x92\xb5\x18\x0b\x61\x64vertising\x92\xb5\x18\teditorial\x92\xb5\x18\x08research\x92\xb5\x18\treproduce\x92\xb5\x18\ndistribute\x92\xb5\x18\x06modify\x92\xb5\x18\x07\x64isplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\x0bmanufacture\x92\xb5\x18\x04sell\x12\x32\n\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a\x12\x92\xb5\x18\x01*\x92\xb5\x18\x02\x45U\x92\xb5\x18\x03\x45\x45\x41\x12~\n\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1a^\x92\xb5\x18\nindividual\x92\xb5\x18\x08\x61\x63\x61\x64\x65mic\x92\xb5\x18\nnon_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\x0b\x62roadcaster\x92\xb5\x18\x11\x63ommercial_entity\x12\x1a\n\x16RESTRICTION_KIND_OTHER\x10\x04*\x8e\x01\n\x0bQuotaWindow\x12\x1c\n\x18QUOTA_WINDOW_UNSPECIFIED\x10\x00\x12\x17\n\x13QUOTA_WINDOW_HOURLY\x10\x01\x12\x16\n\x12QUOTA_WINDOW_DAILY\x10\x02\x12\x18\n\x14QUOTA_WINDOW_MONTHLY\x10\x03\x12\x16\n\x12QUOTA_WINDOW_TOTAL\x10\x04*\xf2\x01\n\x0eObligationKind\x12\x1f\n\x1bOBLIGATION_KIND_UNSPECIFIED\x10\x00\x12\x1f\n\x1bOBLIGATION_KIND_ATTRIBUTION\x10\x01\x12 \n\x1cOBLIGATION_KIND_CONTRIBUTION\x10\x02\x12\x1f\n\x1bOBLIGATION_KIND_SHARE_ALIKE\x10\x03\x12$\n OBLIGATION_KIND_NETWORK_COPYLEFT\x10\x04\x12\x1a\n\x16OBLIGATION_KIND_NOTICE\x10\x05\x12\x19\n\x15OBLIGATION_KIND_OTHER\x10\x06*\xcf\x01\n\x11ObligationTrigger\x12\"\n\x1eOBLIGATION_TRIGGER_UNSPECIFIED\x10\x00\x12\x1d\n\x19OBLIGATION_TRIGGER_ON_USE\x10\x01\x12&\n\"OBLIGATION_TRIGGER_ON_DISTRIBUTION\x10\x02\x12)\n%OBLIGATION_TRIGGER_ON_NETWORK_SERVICE\x10\x03\x12$\n OBLIGATION_TRIGGER_ON_DERIVATIVE\x10\x04*y\n\x0cPricingModel\x12\x1d\n\x19PRICING_MODEL_UNSPECIFIED\x10\x00\x12\x16\n\x12PRICING_MODEL_FREE\x10\x01\x12\x1a\n\x16PRICING_MODEL_PER_UNIT\x10\x02\x12\x16\n\x12PRICING_MODEL_FLAT\x10\x03*u\n\x0fPricingMetering\x12\x1b\n\x17PRICING_METERING_ONLINE\x10\x00\x12\x19\n\x15PRICING_METERING_NONE\x10\x01\x12*\n&PRICING_METERING_OFFLINE_SELF_REPORTED\x10\x02*\x8e\x01\n\x0e\x44\x65liveryMethod\x12\x1f\n\x1b\x44\x45LIVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x44\x45LIVERY_METHOD_DIRECT\x10\x01\x12 \n\x1c\x44\x45LIVERY_METHOD_INSTRUCTIONS\x10\x02\x12\x1d\n\x19\x44\x45LIVERY_METHOD_STREAMING\x10\x03*\xbf\x01\n\rRequesterType\x12\x1e\n\x1aREQUESTER_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14REQUESTER_TYPE_AGENT\x10\x01\x12\x1d\n\x19REQUESTER_TYPE_HUMAN_TOOL\x10\x02\x12\x1a\n\x16REQUESTER_TYPE_SERVICE\x10\x03\x12\x1c\n\x18REQUESTER_TYPE_DELEGATED\x10\x04\x12\x1b\n\x17REQUESTER_TYPE_RESEARCH\x10\x05*\x8a\x01\n\nC2PAStatus\x12\x1b\n\x17\x43\x32PA_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x43\x32PA_STATUS_TRUSTED\x10\x01\x12\x15\n\x11\x43\x32PA_STATUS_VALID\x10\x02\x12\x17\n\x13\x43\x32PA_STATUS_INVALID\x10\x03\x12\x16\n\x12\x43\x32PA_STATUS_ABSENT\x10\x04*\x98\x01\n\x12ResourceMutability\x12#\n\x1fRESOURCE_MUTABILITY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aRESOURCE_MUTABILITY_STATIC\x10\x01\x12\x1f\n\x1bRESOURCE_MUTABILITY_DYNAMIC\x10\x02\x12\x1c\n\x18RESOURCE_MUTABILITY_LIVE\x10\x03*\xef\x05\n\x0c\x44\x65nialReason\x12\x1d\n\x19\x44\x45NIAL_REASON_UNSPECIFIED\x10\x00\x12&\n\"DENIAL_REASON_BILLING_REF_INACTIVE\x10\x01\x12&\n\"DENIAL_REASON_INSUFFICIENT_BALANCE\x10\x02\x12\x1e\n\x1a\x44\x45NIAL_REASON_RATE_LIMITED\x10\x03\x12%\n!DENIAL_REASON_CONTENT_UNAVAILABLE\x10\x04\x12+\n\'DENIAL_REASON_RESTRICTION_NOT_SATISFIED\x10\x05\x12#\n\x1f\x44\x45NIAL_REASON_REPORTING_OVERDUE\x10\x06\x12\x1f\n\x1b\x44\x45NIAL_REASON_OFFER_EXPIRED\x10\x07\x12#\n\x1f\x44\x45NIAL_REASON_SIGNATURE_INVALID\x10\x08\x12 \n\x1c\x44\x45NIAL_REASON_QUOTA_EXCEEDED\x10\t\x12$\n DENIAL_REASON_DELEGATION_INVALID\x10\n\x12$\n DENIAL_REASON_SCOPE_INSUFFICIENT\x10\x0b\x12%\n!DENIAL_REASON_ENTITLEMENT_MISSING\x10\x0c\x12\'\n#DENIAL_REASON_ENTITLEMENT_MALFORMED\x10\r\x12%\n!DENIAL_REASON_ENTITLEMENT_EXPIRED\x10\x0e\x12)\n%DENIAL_REASON_ENTITLEMENT_WRONG_BUYER\x10\x0f\x12%\n!DENIAL_REASON_SUBSCRIPTION_LAPSED\x10\x10\x12)\n%DENIAL_REASON_ENTITLEMENT_NOT_GRANTED\x10\x11\x12/\n+DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION\x10\x12*\x8c\x02\n\x0fIngestionSource\x12 \n\x1cINGESTION_SOURCE_UNSPECIFIED\x10\x00\x12!\n\x1dINGESTION_SOURCE_RAMP_SITEMAP\x10\x01\x12\x18\n\x14INGESTION_SOURCE_RSL\x10\x02\x12\x1c\n\x18INGESTION_SOURCE_SITEMAP\x10\x03\x12\x1f\n\x1bINGESTION_SOURCE_HTML_CRAWL\x10\x04\x12\x1c\n\x18INGESTION_SOURCE_CMS_API\x10\x05\x12\x1b\n\x17INGESTION_SOURCE_MANUAL\x10\x06\x12 \n\x1cINGESTION_SOURCE_CATALOG_API\x10\x07*d\n\x0e\x43itationFormat\x12\x18\n\x14\x43ITATION_FORMAT_LINK\x10\x00\x12\x1c\n\x18\x43ITATION_FORMAT_FOOTNOTE\x10\x01\x12\x1a\n\x16\x43ITATION_FORMAT_INLINE\x10\x02*d\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x0e\n\nROLE_AGENT\x10\x01\x12\x11\n\rROLE_EXCHANGE\x10\x02\x12\x0f\n\x0bROLE_BROKER\x10\x03\x12\x12\n\x0eROLE_PUBLISHER\x10\x04*\x83\x01\n\x14ProviderRelationship\x12%\n!PROVIDER_RELATIONSHIP_UNSPECIFIED\x10\x00\x12 \n\x1cPROVIDER_RELATIONSHIP_DIRECT\x10\x01\x12\"\n\x1ePROVIDER_RELATIONSHIP_RESELLER\x10\x02*\x95\x01\n\nAuthMethod\x12\x1b\n\x17\x41UTH_METHOD_UNSPECIFIED\x10\x00\x12\x14\n\x10\x41UTH_METHOD_GNAP\x10\x01\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_DPOP\x10\x02\x12\x1c\n\x18\x41UTH_METHOD_OAUTH_BEARER\x10\x03\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_MTLS\x10\x04*\xea\x01\n\rDisputeReason\x12\x1e\n\x1a\x44ISPUTE_REASON_UNSPECIFIED\x10\x00\x12#\n\x1f\x44ISPUTE_REASON_CONTENT_MISMATCH\x10\x01\x12\"\n\x1e\x44ISPUTE_REASON_DELIVERY_FAILED\x10\x02\x12 \n\x1c\x44ISPUTE_REASON_WRONG_CONTENT\x10\x03\x12\'\n#DISPUTE_REASON_EXPIRED_BEFORE_FETCH\x10\x04\x12%\n!DISPUTE_REASON_INCOMPLETE_CONTENT\x10\x05*\xbe\x02\n\rDisputeStatus\x12\x1e\n\x1a\x44ISPUTE_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14\x44ISPUTE_STATUS_FILED\x10\x01\x12 \n\x1c\x44ISPUTE_STATUS_AUTO_RESOLVED\x10\x02\x12\"\n\x1e\x44ISPUTE_STATUS_EVIDENCE_NEEDED\x10\x03\x12\x1f\n\x1b\x44ISPUTE_STATUS_UNDER_REVIEW\x10\x04\x12\x1c\n\x18\x44ISPUTE_STATUS_ESCALATED\x10\x05\x12\x1b\n\x17\x44ISPUTE_STATUS_RESOLVED\x10\x06\x12\x1b\n\x17\x44ISPUTE_STATUS_APPEALED\x10\x07\x12\x1a\n\x16\x44ISPUTE_STATUS_SETTLED\x10\x08\x12\x18\n\x14\x44ISPUTE_STATUS_FINAL\x10\t*\xae\x01\n\x0eResolutionType\x12\x1f\n\x1bRESOLUTION_TYPE_UNSPECIFIED\x10\x00\x12\x1a\n\x16RESOLUTION_TYPE_CREDIT\x10\x01\x12\x1e\n\x1aRESOLUTION_TYPE_REDELIVERY\x10\x02\x12\x1c\n\x18RESOLUTION_TYPE_REJECTED\x10\x03\x12!\n\x1dRESOLUTION_TYPE_INVESTIGATION\x10\x04*\x95\x03\n\x16\x43\x61talogRejectionReason\x12(\n$CATALOG_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x34\n0CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR\x10\x01\x12,\n(CATALOG_REJECTION_REASON_TENANT_MISMATCH\x10\x02\x12\x30\n,CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED\x10\x03\x12.\n*CATALOG_REJECTION_REASON_SIGNATURE_INVALID\x10\x04\x12,\n(CATALOG_REJECTION_REASON_MALFORMED_ENTRY\x10\x05\x12\x30\n,CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN\x10\x06\x12+\n\'CATALOG_REJECTION_REASON_QUOTA_EXCEEDED\x10\x07*\xc1\x02\n\x19RegistrationFailureReason\x12+\n\'REGISTRATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x33\n/REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED\x10\x01\x12+\n\'REGISTRATION_FAILURE_REASON_INVALID_KEY\x10\x02\x12\x31\n-REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID\x10\x03\x12\x32\n.REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED\x10\x04\x12.\n*REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED\x10\x05*\x95\x02\n\x14\x44isputeFailureReason\x12&\n\"DISPUTE_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x30\n,DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'DISPUTE_FAILURE_REASON_REPORT_NOT_FILED\x10\x02\x12)\n%DISPUTE_FAILURE_REASON_WINDOW_EXPIRED\x10\x03\x12$\n DISPUTE_FAILURE_REASON_DUPLICATE\x10\x04\x12%\n!DISPUTE_FAILURE_REASON_INELIGIBLE\x10\x05*\xbb\x03\n\x1f\x44omainVerificationFailureReason\x12\x32\n.DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12:\n6DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND\x10\x01\x12\x39\n5DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH\x10\x02\x12\x38\n4DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED\x10\x03\x12\x33\n/DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED\x10\x04\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED\x10\x05\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED\x10\x06*\xd9\x05\n\x1aRetrievalAuthFailureReason\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED\x10\x00\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED\x10\x01\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING\x10\x02\x12\x34\n0RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING\x10\x03\x12\x38\n4RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH\x10\x04\x12\x33\n/RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING\x10\x05\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING\x10\x06\x12\x30\n,RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH\x10\x07\x12\x35\n1RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH\x10\x08\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING\x10\t\x12\x36\n2RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING\x10\n\x12/\n+RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED\x10\x0b\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID\x10\x0c*\xcb\x02\n\x1aUsageReportRejectionReason\x12-\n)USAGE_REPORT_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x37\n3USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'USAGE_REPORT_REJECTION_REASON_DUPLICATE\x10\x02\x12\x30\n,USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED\x10\x03\x12\x39\n5USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS\x10\x04\x12+\n\'USAGE_REPORT_REJECTION_REASON_MALFORMED\x10\x05\x32\x86\x04\n\x0f\x45xchangeService\x12\x46\n\x11\x44iscoverResources\x12\x16.ramp.v1.ResourceQuery\x1a\x19.ramp.v1.ResourceResponse\x12O\n\x12\x45xecuteTransaction\x12\x1b.ramp.v1.TransactionRequest\x1a\x1c.ramp.v1.TransactionResponse\x12\x41\n\x0bReportUsage\x12\x14.ramp.v1.UsageReport\x1a\x1c.ramp.v1.UsageReportResponse\x12G\n\x12\x44isputeTransaction\x12\x17.ramp.v1.DisputeRequest\x1a\x18.ramp.v1.DisputeResponse\x12\x65\n\x19RequestDomainVerification\x12\".ramp.v1.DomainVerificationRequest\x1a$.ramp.v1.DomainVerificationChallenge\x12g\n\x19\x43onfirmDomainVerification\x12\'.ramp.v1.DomainVerificationConfirmation\x1a!.ramp.v1.DomainVerificationResult2\x89\x02\n\x0e\x43\x61talogService\x12N\n\rPushResources\x12\x1d.ramp.v1.PushResourcesRequest\x1a\x1e.ramp.v1.PushResourcesResponse\x12T\n\x0fRemoveResources\x12\x1f.ramp.v1.RemoveResourcesRequest\x1a .ramp.v1.RemoveResourcesResponse\x12Q\n\x0eRefreshCatalog\x12\x1e.ramp.v1.RefreshCatalogRequest\x1a\x1f.ramp.v1.RefreshCatalogResponse2G\n\rBrokerService\x12\x36\n\x07Resolve\x12\x14.ramp.v1.RAMPRequest\x1a\x15.ramp.v1.RAMPResponseB\x8e\x01\n\x0b\x63om.ramp.v1B\tRampProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ramp.v1.ramp_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\013com.ramp.v1B\tRampProtoP\001Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\242\002\003RXX\252\002\007Ramp.V1\312\002\007Ramp\\V1\342\002\023Ramp\\V1\\GPBMetadata\352\002\010Ramp::V1' + _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_FUNCTION"]._loaded_options = None + _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_FUNCTION"]._serialized_options = b'\222\265\030\003all\222\265\030\006ai-all\222\265\030\010ai-train\222\265\030\010ai-input\222\265\030\010ai-index\222\265\030\006search\222\265\030\005crawl\222\265\030\024text-and-data-mining\222\265\030\003tts\222\265\030\ncommercial\222\265\030\013advertising\222\265\030\teditorial\222\265\030\010research\222\265\030\treproduce\222\265\030\ndistribute\222\265\030\006modify\222\265\030\007display\222\265\030\004sync\222\265\030\tbroadcast\222\265\030\006stream\222\265\030\005print\222\265\030\013manufacture\222\265\030\004sell' + _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_GEOGRAPHY"]._loaded_options = None + _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_GEOGRAPHY"]._serialized_options = b'\222\265\030\001*\222\265\030\002EU\222\265\030\003EEA' + _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_USER_TYPE"]._loaded_options = None + _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_USER_TYPE"]._serialized_options = b'\222\265\030\nindividual\222\265\030\010academic\222\265\030\nnon_profit\222\265\030\016news_publisher\222\265\030\013broadcaster\222\265\030\021commercial_entity' + _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._loaded_options = None + _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._serialized_options = b'\272H\320\001\222\001\002\020@\272\001\307\001\n$acceptable_restriction.values.format\022Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' + _globals['_RESOURCEQUERY'].fields_by_name['uris']._loaded_options = None + _globals['_RESOURCEQUERY'].fields_by_name['uris']._serialized_options = b'\272H\006\222\001\003\020\200\002' + _globals['_RESOURCEIDENTITY']._loaded_options = None + _globals['_RESOURCEIDENTITY']._serialized_options = b'\272H\315\001\032\312\001\n/resource_identity.resource_mutability_specified\022?resource_mutability must not be RESOURCE_MUTABILITY_UNSPECIFIED\032Vthis.resource_mutability != ramp.v1.ResourceMutability.RESOURCE_MUTABILITY_UNSPECIFIED' + _globals['_LICENSE'].fields_by_name['uri_digest']._loaded_options = None + _globals['_LICENSE'].fields_by_name['uri_digest']._serialized_options = b'\272H\204\002\272\001\200\002\n\031license.uri_digest.format\022Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\032\206\001this == \'\' || this.matches(\'^sha256:[0-9a-f]{64}$\') || this.matches(\'^sha384:[0-9a-f]{96}$\') || this.matches(\'^sha512:[0-9a-f]{128}$\')' + _globals['_LICENSE']._loaded_options = None + _globals['_LICENSE']._serialized_options = b'\272Hy\032w\n license.digest_required_with_uri\022*uri_digest is required whenever uri is set\032\'this.uri == \'\' || this.uri_digest != \'\'' + _globals['_RESTRICTION'].fields_by_name['permitted']._loaded_options = None + _globals['_RESTRICTION'].fields_by_name['permitted']._serialized_options = b'\272H\310\001\222\001\002\020@\272\001\277\001\n\034restriction.permitted.format\022Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' + _globals['_RESTRICTION'].fields_by_name['prohibited']._loaded_options = None + _globals['_RESTRICTION'].fields_by_name['prohibited']._serialized_options = b'\272H\311\001\222\001\002\020@\272\001\300\001\n\035restriction.prohibited.format\022Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' + _globals['_RESTRICTION']._loaded_options = None + _globals['_RESTRICTION']._serialized_options = b'\272H\247\002\032\223\001\n)restriction.permitted_prohibited_disjoint\0226a token cannot appear in both permitted and prohibited\032.this.permitted.all(p, !(p in this.prohibited))\032\216\001\n\032restriction.kind_specified\022-kind must not be RESTRICTION_KIND_UNSPECIFIED\032Athis.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED' + _globals['_QUOTA'].fields_by_name['metric']._loaded_options = None + _globals['_QUOTA'].fields_by_name['metric']._serialized_options = b'\272H\345\001r\002\030@\272\001\335\001\n\023quota.metric.format\022cmetric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032athis != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\212\265\030\rdisplay-words\212\265\030\013impressions\212\265\030\006tokens\212\265\030\014input-tokens\212\265\030\022units-manufactured\212\265\030\010accesses\212\265\030\006copies\212\265\030\005seats' + _globals['_QUOTA'].fields_by_name['limit']._loaded_options = None + _globals['_QUOTA'].fields_by_name['limit']._serialized_options = b'\272H\004\"\002(\001' + _globals['_QUOTA']._loaded_options = None + _globals['_QUOTA']._serialized_options = b'\272H\205\001\032\202\001\n\026quota.window_specified\022+window must not be QUOTA_WINDOW_UNSPECIFIED\032;this.window != ramp.v1.QuotaWindow.QUOTA_WINDOW_UNSPECIFIED' + _globals['_OBLIGATION']._loaded_options = None + _globals['_OBLIGATION']._serialized_options = b'\272H\304\004\032\225\002\n-obligation.share_alike.requires_scope_license\022DSHARE_ALIKE requires scope_license to identify a license (id or uri)\032\235\001this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))\032\212\001\n\031obligation.kind_specified\022,kind must not be OBLIGATION_KIND_UNSPECIFIED\032?this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_UNSPECIFIED\032\234\001\n\034obligation.trigger_specified\0222trigger must not be OBLIGATION_TRIGGER_UNSPECIFIED\032Hthis.trigger != ramp.v1.ObligationTrigger.OBLIGATION_TRIGGER_UNSPECIFIED' + _globals['_LICENSETERM'].fields_by_name['pricing']._loaded_options = None + _globals['_LICENSETERM'].fields_by_name['pricing']._serialized_options = b'\272H\003\310\001\001' + _globals['_LICENSETERM'].fields_by_name['scopes']._loaded_options = None + _globals['_LICENSETERM'].fields_by_name['scopes']._serialized_options = b'\272H\005\222\001\002\020@' + _globals['_LICENSETERM']._loaded_options = None + _globals['_LICENSETERM']._serialized_options = b'\272H\254\004\032\342\001\n(license_term.reference_only.requires_uri\022>REFERENCE_ONLY terms must carry a license with a non-empty uri\032vthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\032\251\001\n%license_term.one_restriction_per_kind\022+at most one restriction is allowed per kind\032Sthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)\032\230\001\n license_term.semantics_specified\0220semantics must not be TERM_SEMANTICS_UNSPECIFIED\032Bthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_UNSPECIFIED' + _globals['_PRICING'].fields_by_name['unit']._loaded_options = None + _globals['_PRICING'].fields_by_name['unit']._serialized_options = b'\272H\351\001r\002\030@\272\001\341\001\n\023pricing.unit.format\022iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\212\265\030\007fetches\212\265\030\010accesses\212\265\030\006tokens\212\265\030\005calls\212\265\030\005pages\212\265\030\007seconds\212\265\030\007minutes\212\265\030\007records\212\265\030\007streams\212\265\030\006images\212\265\030\005seats\212\265\030\022units-manufactured\212\265\030\ncharacters\212\265\030\005bytes\212\265\030\005items\212\265\030\005sq-km' + _globals['_PRICING']._loaded_options = None + _globals['_PRICING']._serialized_options = b'\272H\252\003\032\227\001\n\036pricing.per_unit.requires_unit\022\'unit is required when model is PER_UNIT\032Lthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\032\206\001\n\026pricing.free.zero_rate\022!rate must be 0 when model is FREE\032Ithis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0\032\204\001\n\027pricing.model_specified\022+model must not be PRICING_MODEL_UNSPECIFIED\032 None: ... + +class ResourceQuery(_message.Message): + __slots__ = ("ver", "id", "requester", "uris", "acceptable_restrictions", "deadline", "supported_profiles", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + REQUESTER_FIELD_NUMBER: _ClassVar[int] + URIS_FIELD_NUMBER: _ClassVar[int] + ACCEPTABLE_RESTRICTIONS_FIELD_NUMBER: _ClassVar[int] + DEADLINE_FIELD_NUMBER: _ClassVar[int] + SUPPORTED_PROFILES_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + id: str + requester: Requester + uris: _containers.RepeatedScalarFieldContainer[str] + acceptable_restrictions: _containers.RepeatedCompositeFieldContainer[AcceptableRestriction] + deadline: _duration_pb2.Duration + supported_profiles: _containers.RepeatedScalarFieldContainer[str] + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., id: _Optional[str] = ..., requester: _Optional[_Union[Requester, _Mapping]] = ..., uris: _Optional[_Iterable[str]] = ..., acceptable_restrictions: _Optional[_Iterable[_Union[AcceptableRestriction, _Mapping]]] = ..., deadline: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., supported_profiles: _Optional[_Iterable[str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class ResourceResponse(_message.Message): + __slots__ = ("ver", "exchange", "offers", "offer_groups", "rate_limit", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + EXCHANGE_FIELD_NUMBER: _ClassVar[int] + OFFERS_FIELD_NUMBER: _ClassVar[int] + OFFER_GROUPS_FIELD_NUMBER: _ClassVar[int] + RATE_LIMIT_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + exchange: str + offers: _containers.RepeatedCompositeFieldContainer[Offer] + offer_groups: _containers.RepeatedCompositeFieldContainer[OfferGroup] + rate_limit: RateLimitInfo + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., exchange: _Optional[str] = ..., offers: _Optional[_Iterable[_Union[Offer, _Mapping]]] = ..., offer_groups: _Optional[_Iterable[_Union[OfferGroup, _Mapping]]] = ..., rate_limit: _Optional[_Union[RateLimitInfo, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class OfferGroup(_message.Message): + __slots__ = ("uri", "offers", "discovery_method", "absence_reason", "restriction_filters") + URI_FIELD_NUMBER: _ClassVar[int] + OFFERS_FIELD_NUMBER: _ClassVar[int] + DISCOVERY_METHOD_FIELD_NUMBER: _ClassVar[int] + ABSENCE_REASON_FIELD_NUMBER: _ClassVar[int] + RESTRICTION_FILTERS_FIELD_NUMBER: _ClassVar[int] + uri: str + offers: _containers.RepeatedCompositeFieldContainer[Offer] + discovery_method: DiscoveryMethod + absence_reason: OfferAbsenceReason + restriction_filters: _containers.RepeatedScalarFieldContainer[RestrictionKind] + def __init__(self, uri: _Optional[str] = ..., offers: _Optional[_Iterable[_Union[Offer, _Mapping]]] = ..., discovery_method: _Optional[_Union[DiscoveryMethod, str]] = ..., absence_reason: _Optional[_Union[OfferAbsenceReason, str]] = ..., restriction_filters: _Optional[_Iterable[_Union[RestrictionKind, str]]] = ...) -> None: ... + +class RateLimitInfo(_message.Message): + __slots__ = ("limit", "remaining", "reset_at", "window") + LIMIT_FIELD_NUMBER: _ClassVar[int] + REMAINING_FIELD_NUMBER: _ClassVar[int] + RESET_AT_FIELD_NUMBER: _ClassVar[int] + WINDOW_FIELD_NUMBER: _ClassVar[int] + limit: int + remaining: int + reset_at: _timestamp_pb2.Timestamp + window: _duration_pb2.Duration + def __init__(self, limit: _Optional[int] = ..., remaining: _Optional[int] = ..., reset_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., window: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ...) -> None: ... + +class SubscriptionQuotaInfo(_message.Message): + __slots__ = ("subscription_id", "quota_limit", "quota_used", "quota_remaining", "resets_at", "unit") + SUBSCRIPTION_ID_FIELD_NUMBER: _ClassVar[int] + QUOTA_LIMIT_FIELD_NUMBER: _ClassVar[int] + QUOTA_USED_FIELD_NUMBER: _ClassVar[int] + QUOTA_REMAINING_FIELD_NUMBER: _ClassVar[int] + RESETS_AT_FIELD_NUMBER: _ClassVar[int] + UNIT_FIELD_NUMBER: _ClassVar[int] + subscription_id: str + quota_limit: int + quota_used: int + quota_remaining: int + resets_at: _timestamp_pb2.Timestamp + unit: str + def __init__(self, subscription_id: _Optional[str] = ..., quota_limit: _Optional[int] = ..., quota_used: _Optional[int] = ..., quota_remaining: _Optional[int] = ..., resets_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., unit: _Optional[str] = ...) -> None: ... + +class Offer(_message.Message): + __slots__ = ("offer_id", "title", "pricing", "delivery_method", "reporting", "expires_at", "identity", "signature", "signature_algorithm", "subscription_id", "iab_categories", "attestations", "data_as_of", "subscription_quota", "previews", "terms", "ext", "ext_critical") + OFFER_ID_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + PRICING_FIELD_NUMBER: _ClassVar[int] + DELIVERY_METHOD_FIELD_NUMBER: _ClassVar[int] + REPORTING_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + IDENTITY_FIELD_NUMBER: _ClassVar[int] + SIGNATURE_FIELD_NUMBER: _ClassVar[int] + SIGNATURE_ALGORITHM_FIELD_NUMBER: _ClassVar[int] + SUBSCRIPTION_ID_FIELD_NUMBER: _ClassVar[int] + IAB_CATEGORIES_FIELD_NUMBER: _ClassVar[int] + ATTESTATIONS_FIELD_NUMBER: _ClassVar[int] + DATA_AS_OF_FIELD_NUMBER: _ClassVar[int] + SUBSCRIPTION_QUOTA_FIELD_NUMBER: _ClassVar[int] + PREVIEWS_FIELD_NUMBER: _ClassVar[int] + TERMS_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + offer_id: str + title: str + pricing: Pricing + delivery_method: DeliveryMethod + reporting: ReportingObligation + expires_at: _timestamp_pb2.Timestamp + identity: ResourceIdentity + signature: str + signature_algorithm: str + subscription_id: str + iab_categories: _containers.RepeatedScalarFieldContainer[str] + attestations: _containers.RepeatedCompositeFieldContainer[ResourceAttestation] + data_as_of: _timestamp_pb2.Timestamp + subscription_quota: _containers.RepeatedCompositeFieldContainer[SubscriptionQuotaInfo] + previews: _containers.RepeatedCompositeFieldContainer[Preview] + terms: _containers.RepeatedCompositeFieldContainer[LicenseTerm] + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, offer_id: _Optional[str] = ..., title: _Optional[str] = ..., pricing: _Optional[_Union[Pricing, _Mapping]] = ..., delivery_method: _Optional[_Union[DeliveryMethod, str]] = ..., reporting: _Optional[_Union[ReportingObligation, _Mapping]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., identity: _Optional[_Union[ResourceIdentity, _Mapping]] = ..., signature: _Optional[str] = ..., signature_algorithm: _Optional[str] = ..., subscription_id: _Optional[str] = ..., iab_categories: _Optional[_Iterable[str]] = ..., attestations: _Optional[_Iterable[_Union[ResourceAttestation, _Mapping]]] = ..., data_as_of: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., subscription_quota: _Optional[_Iterable[_Union[SubscriptionQuotaInfo, _Mapping]]] = ..., previews: _Optional[_Iterable[_Union[Preview, _Mapping]]] = ..., terms: _Optional[_Iterable[_Union[LicenseTerm, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class ResourceIdentity(_message.Message): + __slots__ = ("canonical_url", "doi", "iptc_guid", "isni", "content_hash", "hash_method", "resource_mutability", "c2pa_manifest", "c2pa_status", "soft_binding", "soft_binding_method", "ext", "ext_critical") + CANONICAL_URL_FIELD_NUMBER: _ClassVar[int] + DOI_FIELD_NUMBER: _ClassVar[int] + IPTC_GUID_FIELD_NUMBER: _ClassVar[int] + ISNI_FIELD_NUMBER: _ClassVar[int] + CONTENT_HASH_FIELD_NUMBER: _ClassVar[int] + HASH_METHOD_FIELD_NUMBER: _ClassVar[int] + RESOURCE_MUTABILITY_FIELD_NUMBER: _ClassVar[int] + C2PA_MANIFEST_FIELD_NUMBER: _ClassVar[int] + C2PA_STATUS_FIELD_NUMBER: _ClassVar[int] + SOFT_BINDING_FIELD_NUMBER: _ClassVar[int] + SOFT_BINDING_METHOD_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + canonical_url: str + doi: str + iptc_guid: str + isni: str + content_hash: str + hash_method: str + resource_mutability: ResourceMutability + c2pa_manifest: str + c2pa_status: C2PAStatus + soft_binding: str + soft_binding_method: str + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, canonical_url: _Optional[str] = ..., doi: _Optional[str] = ..., iptc_guid: _Optional[str] = ..., isni: _Optional[str] = ..., content_hash: _Optional[str] = ..., hash_method: _Optional[str] = ..., resource_mutability: _Optional[_Union[ResourceMutability, str]] = ..., c2pa_manifest: _Optional[str] = ..., c2pa_status: _Optional[_Union[C2PAStatus, str]] = ..., soft_binding: _Optional[str] = ..., soft_binding_method: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class ResourceAttestation(_message.Message): + __slots__ = ("verifier", "kid", "attested_at", "uri", "claims", "signature") + VERIFIER_FIELD_NUMBER: _ClassVar[int] + KID_FIELD_NUMBER: _ClassVar[int] + ATTESTED_AT_FIELD_NUMBER: _ClassVar[int] + URI_FIELD_NUMBER: _ClassVar[int] + CLAIMS_FIELD_NUMBER: _ClassVar[int] + SIGNATURE_FIELD_NUMBER: _ClassVar[int] + verifier: str + kid: str + attested_at: _timestamp_pb2.Timestamp + uri: str + claims: _struct_pb2.Struct + signature: str + def __init__(self, verifier: _Optional[str] = ..., kid: _Optional[str] = ..., attested_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., uri: _Optional[str] = ..., claims: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., signature: _Optional[str] = ...) -> None: ... + +class License(_message.Message): + __slots__ = ("uri", "id", "name", "immutable", "uri_digest") + URI_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + IMMUTABLE_FIELD_NUMBER: _ClassVar[int] + URI_DIGEST_FIELD_NUMBER: _ClassVar[int] + uri: str + id: str + name: str + immutable: bool + uri_digest: str + def __init__(self, uri: _Optional[str] = ..., id: _Optional[str] = ..., name: _Optional[str] = ..., immutable: _Optional[bool] = ..., uri_digest: _Optional[str] = ...) -> None: ... + +class Restriction(_message.Message): + __slots__ = ("kind", "permitted", "prohibited", "advisory") + KIND_FIELD_NUMBER: _ClassVar[int] + PERMITTED_FIELD_NUMBER: _ClassVar[int] + PROHIBITED_FIELD_NUMBER: _ClassVar[int] + ADVISORY_FIELD_NUMBER: _ClassVar[int] + kind: RestrictionKind + permitted: _containers.RepeatedScalarFieldContainer[str] + prohibited: _containers.RepeatedScalarFieldContainer[str] + advisory: bool + def __init__(self, kind: _Optional[_Union[RestrictionKind, str]] = ..., permitted: _Optional[_Iterable[str]] = ..., prohibited: _Optional[_Iterable[str]] = ..., advisory: _Optional[bool] = ...) -> None: ... + +class Quota(_message.Message): + __slots__ = ("metric", "limit", "window") + METRIC_FIELD_NUMBER: _ClassVar[int] + LIMIT_FIELD_NUMBER: _ClassVar[int] + WINDOW_FIELD_NUMBER: _ClassVar[int] + metric: str + limit: int + window: QuotaWindow + def __init__(self, metric: _Optional[str] = ..., limit: _Optional[int] = ..., window: _Optional[_Union[QuotaWindow, str]] = ...) -> None: ... + +class Obligation(_message.Message): + __slots__ = ("kind", "trigger", "scope_license", "detail") + KIND_FIELD_NUMBER: _ClassVar[int] + TRIGGER_FIELD_NUMBER: _ClassVar[int] + SCOPE_LICENSE_FIELD_NUMBER: _ClassVar[int] + DETAIL_FIELD_NUMBER: _ClassVar[int] + kind: ObligationKind + trigger: ObligationTrigger + scope_license: License + detail: str + def __init__(self, kind: _Optional[_Union[ObligationKind, str]] = ..., trigger: _Optional[_Union[ObligationTrigger, str]] = ..., scope_license: _Optional[_Union[License, _Mapping]] = ..., detail: _Optional[str] = ...) -> None: ... + +class LicenseTerm(_message.Message): + __slots__ = ("license", "semantics", "restrictions", "quotas", "obligations", "pricing", "scopes", "part_label") + LICENSE_FIELD_NUMBER: _ClassVar[int] + SEMANTICS_FIELD_NUMBER: _ClassVar[int] + RESTRICTIONS_FIELD_NUMBER: _ClassVar[int] + QUOTAS_FIELD_NUMBER: _ClassVar[int] + OBLIGATIONS_FIELD_NUMBER: _ClassVar[int] + PRICING_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + PART_LABEL_FIELD_NUMBER: _ClassVar[int] + license: License + semantics: TermSemantics + restrictions: _containers.RepeatedCompositeFieldContainer[Restriction] + quotas: _containers.RepeatedCompositeFieldContainer[Quota] + obligations: _containers.RepeatedCompositeFieldContainer[Obligation] + pricing: Pricing + scopes: _containers.RepeatedScalarFieldContainer[str] + part_label: str + def __init__(self, license: _Optional[_Union[License, _Mapping]] = ..., semantics: _Optional[_Union[TermSemantics, str]] = ..., restrictions: _Optional[_Iterable[_Union[Restriction, _Mapping]]] = ..., quotas: _Optional[_Iterable[_Union[Quota, _Mapping]]] = ..., obligations: _Optional[_Iterable[_Union[Obligation, _Mapping]]] = ..., pricing: _Optional[_Union[Pricing, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., part_label: _Optional[str] = ...) -> None: ... + +class Preview(_message.Message): + __slots__ = ("url", "media_type", "width", "height", "duration", "size") + URL_FIELD_NUMBER: _ClassVar[int] + MEDIA_TYPE_FIELD_NUMBER: _ClassVar[int] + WIDTH_FIELD_NUMBER: _ClassVar[int] + HEIGHT_FIELD_NUMBER: _ClassVar[int] + DURATION_FIELD_NUMBER: _ClassVar[int] + SIZE_FIELD_NUMBER: _ClassVar[int] + url: str + media_type: str + width: int + height: int + duration: int + size: str + def __init__(self, url: _Optional[str] = ..., media_type: _Optional[str] = ..., width: _Optional[int] = ..., height: _Optional[int] = ..., duration: _Optional[int] = ..., size: _Optional[str] = ...) -> None: ... + +class Pricing(_message.Message): + __slots__ = ("model", "rate", "currency", "unit_cost", "estimated_quantity", "license_duration_months", "unit", "metering") + MODEL_FIELD_NUMBER: _ClassVar[int] + RATE_FIELD_NUMBER: _ClassVar[int] + CURRENCY_FIELD_NUMBER: _ClassVar[int] + UNIT_COST_FIELD_NUMBER: _ClassVar[int] + ESTIMATED_QUANTITY_FIELD_NUMBER: _ClassVar[int] + LICENSE_DURATION_MONTHS_FIELD_NUMBER: _ClassVar[int] + UNIT_FIELD_NUMBER: _ClassVar[int] + METERING_FIELD_NUMBER: _ClassVar[int] + model: PricingModel + rate: float + currency: str + unit_cost: float + estimated_quantity: int + license_duration_months: int + unit: str + metering: PricingMetering + def __init__(self, model: _Optional[_Union[PricingModel, str]] = ..., rate: _Optional[float] = ..., currency: _Optional[str] = ..., unit_cost: _Optional[float] = ..., estimated_quantity: _Optional[int] = ..., license_duration_months: _Optional[int] = ..., unit: _Optional[str] = ..., metering: _Optional[_Union[PricingMetering, str]] = ...) -> None: ... + +class Requester(_message.Message): + __slots__ = ("id", "domain", "type", "name", "billing_ref", "scopes", "delegation", "ext", "ext_critical") + ID_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + BILLING_REF_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + DELEGATION_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + id: str + domain: str + type: RequesterType + name: str + billing_ref: str + scopes: _containers.RepeatedScalarFieldContainer[str] + delegation: Delegation + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, id: _Optional[str] = ..., domain: _Optional[str] = ..., type: _Optional[_Union[RequesterType, str]] = ..., name: _Optional[str] = ..., billing_ref: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., delegation: _Optional[_Union[Delegation, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class Delegation(_message.Message): + __slots__ = ("principal_domain", "principal_id", "scopes", "expires_at", "max_spend_cents", "max_accesses", "quota_period", "token", "token_format", "revocation_uri", "issuer", "ext", "ext_critical") + PRINCIPAL_DOMAIN_FIELD_NUMBER: _ClassVar[int] + PRINCIPAL_ID_FIELD_NUMBER: _ClassVar[int] + SCOPES_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + MAX_SPEND_CENTS_FIELD_NUMBER: _ClassVar[int] + MAX_ACCESSES_FIELD_NUMBER: _ClassVar[int] + QUOTA_PERIOD_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + TOKEN_FORMAT_FIELD_NUMBER: _ClassVar[int] + REVOCATION_URI_FIELD_NUMBER: _ClassVar[int] + ISSUER_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + principal_domain: str + principal_id: str + scopes: _containers.RepeatedScalarFieldContainer[str] + expires_at: _timestamp_pb2.Timestamp + max_spend_cents: int + max_accesses: int + quota_period: _duration_pb2.Duration + token: bytes + token_format: str + revocation_uri: str + issuer: str + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, principal_domain: _Optional[str] = ..., principal_id: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., max_spend_cents: _Optional[int] = ..., max_accesses: _Optional[int] = ..., quota_period: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., token: _Optional[bytes] = ..., token_format: _Optional[str] = ..., revocation_uri: _Optional[str] = ..., issuer: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class TransactionRequest(_message.Message): + __slots__ = ("ver", "idempotency_key", "offer_id", "requester", "offer_signature", "items", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + IDEMPOTENCY_KEY_FIELD_NUMBER: _ClassVar[int] + OFFER_ID_FIELD_NUMBER: _ClassVar[int] + REQUESTER_FIELD_NUMBER: _ClassVar[int] + OFFER_SIGNATURE_FIELD_NUMBER: _ClassVar[int] + ITEMS_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + idempotency_key: str + offer_id: str + requester: Requester + offer_signature: str + items: _containers.RepeatedCompositeFieldContainer[TransactionItem] + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., idempotency_key: _Optional[str] = ..., offer_id: _Optional[str] = ..., requester: _Optional[_Union[Requester, _Mapping]] = ..., offer_signature: _Optional[str] = ..., items: _Optional[_Iterable[_Union[TransactionItem, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class TransactionItem(_message.Message): + __slots__ = ("offer_id", "offer_signature") + OFFER_ID_FIELD_NUMBER: _ClassVar[int] + OFFER_SIGNATURE_FIELD_NUMBER: _ClassVar[int] + offer_id: str + offer_signature: str + def __init__(self, offer_id: _Optional[str] = ..., offer_signature: _Optional[str] = ...) -> None: ... + +class TransactionResponse(_message.Message): + __slots__ = ("ver", "transaction_id", "billing_id", "resource_title", "cost", "delivery_method", "reporting_obligation", "expires_at", "agent_identity_hash", "retrieval_endpoint", "subscription_id", "subscription_unit_value", "items", "total_cost", "subscription_quota", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] + BILLING_ID_FIELD_NUMBER: _ClassVar[int] + RESOURCE_TITLE_FIELD_NUMBER: _ClassVar[int] + COST_FIELD_NUMBER: _ClassVar[int] + DELIVERY_METHOD_FIELD_NUMBER: _ClassVar[int] + REPORTING_OBLIGATION_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + AGENT_IDENTITY_HASH_FIELD_NUMBER: _ClassVar[int] + RETRIEVAL_ENDPOINT_FIELD_NUMBER: _ClassVar[int] + SUBSCRIPTION_ID_FIELD_NUMBER: _ClassVar[int] + SUBSCRIPTION_UNIT_VALUE_FIELD_NUMBER: _ClassVar[int] + ITEMS_FIELD_NUMBER: _ClassVar[int] + TOTAL_COST_FIELD_NUMBER: _ClassVar[int] + SUBSCRIPTION_QUOTA_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + transaction_id: str + billing_id: str + resource_title: str + cost: Cost + delivery_method: DeliveryMethod + reporting_obligation: ReportingObligation + expires_at: _timestamp_pb2.Timestamp + agent_identity_hash: str + retrieval_endpoint: str + subscription_id: str + subscription_unit_value: Cost + items: _containers.RepeatedCompositeFieldContainer[TransactionResultItem] + total_cost: Cost + subscription_quota: _containers.RepeatedCompositeFieldContainer[SubscriptionQuotaInfo] + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., resource_title: _Optional[str] = ..., cost: _Optional[_Union[Cost, _Mapping]] = ..., delivery_method: _Optional[_Union[DeliveryMethod, str]] = ..., reporting_obligation: _Optional[_Union[ReportingObligation, _Mapping]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., agent_identity_hash: _Optional[str] = ..., retrieval_endpoint: _Optional[str] = ..., subscription_id: _Optional[str] = ..., subscription_unit_value: _Optional[_Union[Cost, _Mapping]] = ..., items: _Optional[_Iterable[_Union[TransactionResultItem, _Mapping]]] = ..., total_cost: _Optional[_Union[Cost, _Mapping]] = ..., subscription_quota: _Optional[_Iterable[_Union[SubscriptionQuotaInfo, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class TransactionResultItem(_message.Message): + __slots__ = ("offer_id", "transaction_id", "billing_id", "resource_title", "cost", "subscription_id", "subscription_unit_value", "denial_reason", "restriction_mismatches", "expires_at", "retrieval_endpoint", "delivery_method", "reporting_obligation") + OFFER_ID_FIELD_NUMBER: _ClassVar[int] + TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] + BILLING_ID_FIELD_NUMBER: _ClassVar[int] + RESOURCE_TITLE_FIELD_NUMBER: _ClassVar[int] + COST_FIELD_NUMBER: _ClassVar[int] + SUBSCRIPTION_ID_FIELD_NUMBER: _ClassVar[int] + SUBSCRIPTION_UNIT_VALUE_FIELD_NUMBER: _ClassVar[int] + DENIAL_REASON_FIELD_NUMBER: _ClassVar[int] + RESTRICTION_MISMATCHES_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + RETRIEVAL_ENDPOINT_FIELD_NUMBER: _ClassVar[int] + DELIVERY_METHOD_FIELD_NUMBER: _ClassVar[int] + REPORTING_OBLIGATION_FIELD_NUMBER: _ClassVar[int] + offer_id: str + transaction_id: str + billing_id: str + resource_title: str + cost: Cost + subscription_id: str + subscription_unit_value: Cost + denial_reason: DenialReason + restriction_mismatches: _containers.RepeatedScalarFieldContainer[RestrictionKind] + expires_at: _timestamp_pb2.Timestamp + retrieval_endpoint: str + delivery_method: DeliveryMethod + reporting_obligation: ReportingObligation + def __init__(self, offer_id: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., resource_title: _Optional[str] = ..., cost: _Optional[_Union[Cost, _Mapping]] = ..., subscription_id: _Optional[str] = ..., subscription_unit_value: _Optional[_Union[Cost, _Mapping]] = ..., denial_reason: _Optional[_Union[DenialReason, str]] = ..., restriction_mismatches: _Optional[_Iterable[_Union[RestrictionKind, str]]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., retrieval_endpoint: _Optional[str] = ..., delivery_method: _Optional[_Union[DeliveryMethod, str]] = ..., reporting_obligation: _Optional[_Union[ReportingObligation, _Mapping]] = ...) -> None: ... + +class Cost(_message.Message): + __slots__ = ("amount", "currency", "unit_cost") + AMOUNT_FIELD_NUMBER: _ClassVar[int] + CURRENCY_FIELD_NUMBER: _ClassVar[int] + UNIT_COST_FIELD_NUMBER: _ClassVar[int] + amount: float + currency: str + unit_cost: float + def __init__(self, amount: _Optional[float] = ..., currency: _Optional[str] = ..., unit_cost: _Optional[float] = ...) -> None: ... + +class PushResourcesRequest(_message.Message): + __slots__ = ("ver", "tenant_id", "entries", "caller_id", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + ENTRIES_FIELD_NUMBER: _ClassVar[int] + CALLER_ID_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + tenant_id: str + entries: _containers.RepeatedCompositeFieldContainer[ResourceEntry] + caller_id: str + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., tenant_id: _Optional[str] = ..., entries: _Optional[_Iterable[_Union[ResourceEntry, _Mapping]]] = ..., caller_id: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class ResourceEntry(_message.Message): + __slots__ = ("domain", "path", "content_id", "title", "word_count", "estimated_quantity", "content_hash", "hash_method", "source", "provenance_source", "provenance_timestamp", "attestations", "terms", "ext", "ext_critical") + DOMAIN_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + CONTENT_ID_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + WORD_COUNT_FIELD_NUMBER: _ClassVar[int] + ESTIMATED_QUANTITY_FIELD_NUMBER: _ClassVar[int] + CONTENT_HASH_FIELD_NUMBER: _ClassVar[int] + HASH_METHOD_FIELD_NUMBER: _ClassVar[int] + SOURCE_FIELD_NUMBER: _ClassVar[int] + PROVENANCE_SOURCE_FIELD_NUMBER: _ClassVar[int] + PROVENANCE_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + ATTESTATIONS_FIELD_NUMBER: _ClassVar[int] + TERMS_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + domain: str + path: str + content_id: str + title: str + word_count: int + estimated_quantity: int + content_hash: str + hash_method: str + source: IngestionSource + provenance_source: str + provenance_timestamp: _timestamp_pb2.Timestamp + attestations: _containers.RepeatedCompositeFieldContainer[ResourceAttestation] + terms: _containers.RepeatedCompositeFieldContainer[LicenseTerm] + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, domain: _Optional[str] = ..., path: _Optional[str] = ..., content_id: _Optional[str] = ..., title: _Optional[str] = ..., word_count: _Optional[int] = ..., estimated_quantity: _Optional[int] = ..., content_hash: _Optional[str] = ..., hash_method: _Optional[str] = ..., source: _Optional[_Union[IngestionSource, str]] = ..., provenance_source: _Optional[str] = ..., provenance_timestamp: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., attestations: _Optional[_Iterable[_Union[ResourceAttestation, _Mapping]]] = ..., terms: _Optional[_Iterable[_Union[LicenseTerm, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class PushResourcesResponse(_message.Message): + __slots__ = ("ver", "accepted", "rejected", "warnings", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + ACCEPTED_FIELD_NUMBER: _ClassVar[int] + REJECTED_FIELD_NUMBER: _ClassVar[int] + WARNINGS_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + accepted: int + rejected: int + warnings: _containers.RepeatedScalarFieldContainer[str] + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., accepted: _Optional[int] = ..., rejected: _Optional[int] = ..., warnings: _Optional[_Iterable[str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class RemoveResourcesRequest(_message.Message): + __slots__ = ("ver", "tenant_id", "paths") + VER_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + PATHS_FIELD_NUMBER: _ClassVar[int] + ver: str + tenant_id: str + paths: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., tenant_id: _Optional[str] = ..., paths: _Optional[_Iterable[str]] = ...) -> None: ... + +class RemoveResourcesResponse(_message.Message): + __slots__ = ("ver", "removed") + VER_FIELD_NUMBER: _ClassVar[int] + REMOVED_FIELD_NUMBER: _ClassVar[int] + ver: str + removed: int + def __init__(self, ver: _Optional[str] = ..., removed: _Optional[int] = ...) -> None: ... + +class RefreshCatalogRequest(_message.Message): + __slots__ = ("ver", "tenant_id") + VER_FIELD_NUMBER: _ClassVar[int] + TENANT_ID_FIELD_NUMBER: _ClassVar[int] + ver: str + tenant_id: str + def __init__(self, ver: _Optional[str] = ..., tenant_id: _Optional[str] = ...) -> None: ... + +class RefreshCatalogResponse(_message.Message): + __slots__ = ("ver", "started") + VER_FIELD_NUMBER: _ClassVar[int] + STARTED_FIELD_NUMBER: _ClassVar[int] + ver: str + started: bool + def __init__(self, ver: _Optional[str] = ..., started: _Optional[bool] = ...) -> None: ... + +class ReportingObligation(_message.Message): + __slots__ = ("required", "window", "endpoint", "required_fields", "ext", "ext_critical") + REQUIRED_FIELD_NUMBER: _ClassVar[int] + WINDOW_FIELD_NUMBER: _ClassVar[int] + ENDPOINT_FIELD_NUMBER: _ClassVar[int] + REQUIRED_FIELDS_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + required: bool + window: _duration_pb2.Duration + endpoint: str + required_fields: _containers.RepeatedScalarFieldContainer[str] + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, required: _Optional[bool] = ..., window: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., endpoint: _Optional[str] = ..., required_fields: _Optional[_Iterable[str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class UsageReport(_message.Message): + __slots__ = ("ver", "idempotency_key", "transaction_id", "billing_id", "usage", "timestamp", "exchange", "assets", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + IDEMPOTENCY_KEY_FIELD_NUMBER: _ClassVar[int] + TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] + BILLING_ID_FIELD_NUMBER: _ClassVar[int] + USAGE_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + EXCHANGE_FIELD_NUMBER: _ClassVar[int] + ASSETS_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + idempotency_key: str + transaction_id: str + billing_id: str + usage: Usage + timestamp: _timestamp_pb2.Timestamp + exchange: str + assets: _containers.RepeatedCompositeFieldContainer[UsageAsset] + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., idempotency_key: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., usage: _Optional[_Union[Usage, _Mapping]] = ..., timestamp: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., exchange: _Optional[str] = ..., assets: _Optional[_Iterable[_Union[UsageAsset, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class AttributionDetail(_message.Message): + __slots__ = ("displayed_url", "format", "visible_to_user") + DISPLAYED_URL_FIELD_NUMBER: _ClassVar[int] + FORMAT_FIELD_NUMBER: _ClassVar[int] + VISIBLE_TO_USER_FIELD_NUMBER: _ClassVar[int] + displayed_url: str + format: CitationFormat + visible_to_user: bool + def __init__(self, displayed_url: _Optional[str] = ..., format: _Optional[_Union[CitationFormat, str]] = ..., visible_to_user: _Optional[bool] = ...) -> None: ... + +class Usage(_message.Message): + __slots__ = ("function", "subfn", "consumed_quantity", "displayed_to_user", "citation_included", "attribution", "consumed_unit") + FUNCTION_FIELD_NUMBER: _ClassVar[int] + SUBFN_FIELD_NUMBER: _ClassVar[int] + CONSUMED_QUANTITY_FIELD_NUMBER: _ClassVar[int] + DISPLAYED_TO_USER_FIELD_NUMBER: _ClassVar[int] + CITATION_INCLUDED_FIELD_NUMBER: _ClassVar[int] + ATTRIBUTION_FIELD_NUMBER: _ClassVar[int] + CONSUMED_UNIT_FIELD_NUMBER: _ClassVar[int] + function: _containers.RepeatedScalarFieldContainer[str] + subfn: _containers.RepeatedScalarFieldContainer[str] + consumed_quantity: int + displayed_to_user: bool + citation_included: bool + attribution: _containers.RepeatedCompositeFieldContainer[AttributionDetail] + consumed_unit: str + def __init__(self, function: _Optional[_Iterable[str]] = ..., subfn: _Optional[_Iterable[str]] = ..., consumed_quantity: _Optional[int] = ..., displayed_to_user: _Optional[bool] = ..., citation_included: _Optional[bool] = ..., attribution: _Optional[_Iterable[_Union[AttributionDetail, _Mapping]]] = ..., consumed_unit: _Optional[str] = ...) -> None: ... + +class UsageAsset(_message.Message): + __slots__ = ("uri", "title", "package_id") + URI_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + PACKAGE_ID_FIELD_NUMBER: _ClassVar[int] + uri: str + title: str + package_id: str + def __init__(self, uri: _Optional[str] = ..., title: _Optional[str] = ..., package_id: _Optional[str] = ...) -> None: ... + +class UsageReportResponse(_message.Message): + __slots__ = ("ver", "report_id", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + REPORT_ID_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + report_id: str + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., report_id: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class RAMPRequest(_message.Message): + __slots__ = ("ver", "id", "requester", "uris", "acceptable_restrictions", "constraints", "supported_profiles", "query", "search_filters", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + REQUESTER_FIELD_NUMBER: _ClassVar[int] + URIS_FIELD_NUMBER: _ClassVar[int] + ACCEPTABLE_RESTRICTIONS_FIELD_NUMBER: _ClassVar[int] + CONSTRAINTS_FIELD_NUMBER: _ClassVar[int] + SUPPORTED_PROFILES_FIELD_NUMBER: _ClassVar[int] + QUERY_FIELD_NUMBER: _ClassVar[int] + SEARCH_FILTERS_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + id: str + requester: Requester + uris: _containers.RepeatedScalarFieldContainer[str] + acceptable_restrictions: _containers.RepeatedCompositeFieldContainer[AcceptableRestriction] + constraints: RequestConstraints + supported_profiles: _containers.RepeatedScalarFieldContainer[str] + query: str + search_filters: _struct_pb2.Struct + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., id: _Optional[str] = ..., requester: _Optional[_Union[Requester, _Mapping]] = ..., uris: _Optional[_Iterable[str]] = ..., acceptable_restrictions: _Optional[_Iterable[_Union[AcceptableRestriction, _Mapping]]] = ..., constraints: _Optional[_Union[RequestConstraints, _Mapping]] = ..., supported_profiles: _Optional[_Iterable[str]] = ..., query: _Optional[str] = ..., search_filters: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class RequestConstraints(_message.Message): + __slots__ = ("exchanges", "max_price", "max_unit_cost", "delivery_preference", "reporting_capable", "preferred_exchanges", "budget_scope", "period_budget", "budget_period", "max_data_age", "max_hops") + EXCHANGES_FIELD_NUMBER: _ClassVar[int] + MAX_PRICE_FIELD_NUMBER: _ClassVar[int] + MAX_UNIT_COST_FIELD_NUMBER: _ClassVar[int] + DELIVERY_PREFERENCE_FIELD_NUMBER: _ClassVar[int] + REPORTING_CAPABLE_FIELD_NUMBER: _ClassVar[int] + PREFERRED_EXCHANGES_FIELD_NUMBER: _ClassVar[int] + BUDGET_SCOPE_FIELD_NUMBER: _ClassVar[int] + PERIOD_BUDGET_FIELD_NUMBER: _ClassVar[int] + BUDGET_PERIOD_FIELD_NUMBER: _ClassVar[int] + MAX_DATA_AGE_FIELD_NUMBER: _ClassVar[int] + MAX_HOPS_FIELD_NUMBER: _ClassVar[int] + exchanges: _containers.RepeatedScalarFieldContainer[str] + max_price: Cost + max_unit_cost: float + delivery_preference: _containers.RepeatedScalarFieldContainer[DeliveryMethod] + reporting_capable: bool + preferred_exchanges: _containers.RepeatedScalarFieldContainer[str] + budget_scope: str + period_budget: Cost + budget_period: _duration_pb2.Duration + max_data_age: _duration_pb2.Duration + max_hops: int + def __init__(self, exchanges: _Optional[_Iterable[str]] = ..., max_price: _Optional[_Union[Cost, _Mapping]] = ..., max_unit_cost: _Optional[float] = ..., delivery_preference: _Optional[_Iterable[_Union[DeliveryMethod, str]]] = ..., reporting_capable: _Optional[bool] = ..., preferred_exchanges: _Optional[_Iterable[str]] = ..., budget_scope: _Optional[str] = ..., period_budget: _Optional[_Union[Cost, _Mapping]] = ..., budget_period: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., max_data_age: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., max_hops: _Optional[int] = ...) -> None: ... + +class JsonWebKey(_message.Message): + __slots__ = ("kid", "kty", "crv", "use", "alg", "x", "not_before", "not_after") + KID_FIELD_NUMBER: _ClassVar[int] + KTY_FIELD_NUMBER: _ClassVar[int] + CRV_FIELD_NUMBER: _ClassVar[int] + USE_FIELD_NUMBER: _ClassVar[int] + ALG_FIELD_NUMBER: _ClassVar[int] + X_FIELD_NUMBER: _ClassVar[int] + NOT_BEFORE_FIELD_NUMBER: _ClassVar[int] + NOT_AFTER_FIELD_NUMBER: _ClassVar[int] + kid: str + kty: str + crv: str + use: str + alg: str + x: str + not_before: str + not_after: str + def __init__(self, kid: _Optional[str] = ..., kty: _Optional[str] = ..., crv: _Optional[str] = ..., use: _Optional[str] = ..., alg: _Optional[str] = ..., x: _Optional[str] = ..., not_before: _Optional[str] = ..., not_after: _Optional[str] = ...) -> None: ... + +class WellKnownManifest(_message.Message): + __slots__ = ("ver", "role", "domain", "contact", "public_keys", "invalidation_url", "exchanges", "catalog_contributors", "name", "operator", "operator_domain", "endpoint", "health_endpoint", "catalog_endpoint", "protocol_versions_supported", "pricing_models_supported", "delivery_methods_supported", "hash_methods_supported", "accepted_verifiers", "terms_uri", "privacy_uri", "supported_profiles", "supported_auth_methods", "oidc_issuer", "gnap_grant_endpoint", "base_currency", "max_intermediary_hops", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FIELD_NUMBER: _ClassVar[int] + CONTACT_FIELD_NUMBER: _ClassVar[int] + PUBLIC_KEYS_FIELD_NUMBER: _ClassVar[int] + INVALIDATION_URL_FIELD_NUMBER: _ClassVar[int] + EXCHANGES_FIELD_NUMBER: _ClassVar[int] + CATALOG_CONTRIBUTORS_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + OPERATOR_FIELD_NUMBER: _ClassVar[int] + OPERATOR_DOMAIN_FIELD_NUMBER: _ClassVar[int] + ENDPOINT_FIELD_NUMBER: _ClassVar[int] + HEALTH_ENDPOINT_FIELD_NUMBER: _ClassVar[int] + CATALOG_ENDPOINT_FIELD_NUMBER: _ClassVar[int] + PROTOCOL_VERSIONS_SUPPORTED_FIELD_NUMBER: _ClassVar[int] + PRICING_MODELS_SUPPORTED_FIELD_NUMBER: _ClassVar[int] + DELIVERY_METHODS_SUPPORTED_FIELD_NUMBER: _ClassVar[int] + HASH_METHODS_SUPPORTED_FIELD_NUMBER: _ClassVar[int] + ACCEPTED_VERIFIERS_FIELD_NUMBER: _ClassVar[int] + TERMS_URI_FIELD_NUMBER: _ClassVar[int] + PRIVACY_URI_FIELD_NUMBER: _ClassVar[int] + SUPPORTED_PROFILES_FIELD_NUMBER: _ClassVar[int] + SUPPORTED_AUTH_METHODS_FIELD_NUMBER: _ClassVar[int] + OIDC_ISSUER_FIELD_NUMBER: _ClassVar[int] + GNAP_GRANT_ENDPOINT_FIELD_NUMBER: _ClassVar[int] + BASE_CURRENCY_FIELD_NUMBER: _ClassVar[int] + MAX_INTERMEDIARY_HOPS_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + role: Role + domain: str + contact: str + public_keys: _containers.RepeatedCompositeFieldContainer[JsonWebKey] + invalidation_url: str + exchanges: _containers.RepeatedCompositeFieldContainer[AuthorizedExchange] + catalog_contributors: _containers.RepeatedCompositeFieldContainer[CatalogContributor] + name: str + operator: str + operator_domain: str + endpoint: str + health_endpoint: str + catalog_endpoint: str + protocol_versions_supported: _containers.RepeatedScalarFieldContainer[str] + pricing_models_supported: _containers.RepeatedScalarFieldContainer[PricingModel] + delivery_methods_supported: _containers.RepeatedScalarFieldContainer[DeliveryMethod] + hash_methods_supported: _containers.RepeatedScalarFieldContainer[str] + accepted_verifiers: _containers.RepeatedScalarFieldContainer[str] + terms_uri: str + privacy_uri: str + supported_profiles: _containers.RepeatedScalarFieldContainer[str] + supported_auth_methods: _containers.RepeatedScalarFieldContainer[AuthMethod] + oidc_issuer: str + gnap_grant_endpoint: str + base_currency: str + max_intermediary_hops: int + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., role: _Optional[_Union[Role, str]] = ..., domain: _Optional[str] = ..., contact: _Optional[str] = ..., public_keys: _Optional[_Iterable[_Union[JsonWebKey, _Mapping]]] = ..., invalidation_url: _Optional[str] = ..., exchanges: _Optional[_Iterable[_Union[AuthorizedExchange, _Mapping]]] = ..., catalog_contributors: _Optional[_Iterable[_Union[CatalogContributor, _Mapping]]] = ..., name: _Optional[str] = ..., operator: _Optional[str] = ..., operator_domain: _Optional[str] = ..., endpoint: _Optional[str] = ..., health_endpoint: _Optional[str] = ..., catalog_endpoint: _Optional[str] = ..., protocol_versions_supported: _Optional[_Iterable[str]] = ..., pricing_models_supported: _Optional[_Iterable[_Union[PricingModel, str]]] = ..., delivery_methods_supported: _Optional[_Iterable[_Union[DeliveryMethod, str]]] = ..., hash_methods_supported: _Optional[_Iterable[str]] = ..., accepted_verifiers: _Optional[_Iterable[str]] = ..., terms_uri: _Optional[str] = ..., privacy_uri: _Optional[str] = ..., supported_profiles: _Optional[_Iterable[str]] = ..., supported_auth_methods: _Optional[_Iterable[_Union[AuthMethod, str]]] = ..., oidc_issuer: _Optional[str] = ..., gnap_grant_endpoint: _Optional[str] = ..., base_currency: _Optional[str] = ..., max_intermediary_hops: _Optional[int] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class KeyInvalidationList(_message.Message): + __slots__ = ("as_of", "revoked") + AS_OF_FIELD_NUMBER: _ClassVar[int] + REVOKED_FIELD_NUMBER: _ClassVar[int] + as_of: _timestamp_pb2.Timestamp + revoked: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, as_of: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., revoked: _Optional[_Iterable[str]] = ...) -> None: ... + +class CatalogContributor(_message.Message): + __slots__ = ("domain", "relationship") + DOMAIN_FIELD_NUMBER: _ClassVar[int] + RELATIONSHIP_FIELD_NUMBER: _ClassVar[int] + domain: str + relationship: str + def __init__(self, domain: _Optional[str] = ..., relationship: _Optional[str] = ...) -> None: ... + +class AuthorizedExchange(_message.Message): + __slots__ = ("domain", "endpoint", "relationship", "ext", "ext_critical") + DOMAIN_FIELD_NUMBER: _ClassVar[int] + ENDPOINT_FIELD_NUMBER: _ClassVar[int] + RELATIONSHIP_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + domain: str + endpoint: str + relationship: ProviderRelationship + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, domain: _Optional[str] = ..., endpoint: _Optional[str] = ..., relationship: _Optional[_Union[ProviderRelationship, str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class RAMPResponse(_message.Message): + __slots__ = ("ver", "transaction_id", "billing_id", "exchange", "resource_title", "cost", "delivery_method", "reporting_obligation", "expires_at", "retrieval_endpoint", "agent_identity_hash", "broker_fee", "absence_reason", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] + BILLING_ID_FIELD_NUMBER: _ClassVar[int] + EXCHANGE_FIELD_NUMBER: _ClassVar[int] + RESOURCE_TITLE_FIELD_NUMBER: _ClassVar[int] + COST_FIELD_NUMBER: _ClassVar[int] + DELIVERY_METHOD_FIELD_NUMBER: _ClassVar[int] + REPORTING_OBLIGATION_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + RETRIEVAL_ENDPOINT_FIELD_NUMBER: _ClassVar[int] + AGENT_IDENTITY_HASH_FIELD_NUMBER: _ClassVar[int] + BROKER_FEE_FIELD_NUMBER: _ClassVar[int] + ABSENCE_REASON_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + transaction_id: str + billing_id: str + exchange: str + resource_title: str + cost: Cost + delivery_method: DeliveryMethod + reporting_obligation: ReportingObligation + expires_at: _timestamp_pb2.Timestamp + retrieval_endpoint: str + agent_identity_hash: str + broker_fee: Cost + absence_reason: OfferAbsenceReason + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., exchange: _Optional[str] = ..., resource_title: _Optional[str] = ..., cost: _Optional[_Union[Cost, _Mapping]] = ..., delivery_method: _Optional[_Union[DeliveryMethod, str]] = ..., reporting_obligation: _Optional[_Union[ReportingObligation, _Mapping]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., retrieval_endpoint: _Optional[str] = ..., agent_identity_hash: _Optional[str] = ..., broker_fee: _Optional[_Union[Cost, _Mapping]] = ..., absence_reason: _Optional[_Union[OfferAbsenceReason, str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class DisputeRequest(_message.Message): + __slots__ = ("ver", "idempotency_key", "transaction_id", "billing_id", "reason", "description", "received_content_hash", "received_hash_method", "report_id", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + IDEMPOTENCY_KEY_FIELD_NUMBER: _ClassVar[int] + TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] + BILLING_ID_FIELD_NUMBER: _ClassVar[int] + REASON_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + RECEIVED_CONTENT_HASH_FIELD_NUMBER: _ClassVar[int] + RECEIVED_HASH_METHOD_FIELD_NUMBER: _ClassVar[int] + REPORT_ID_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + idempotency_key: str + transaction_id: str + billing_id: str + reason: DisputeReason + description: str + received_content_hash: str + received_hash_method: str + report_id: str + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., idempotency_key: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., reason: _Optional[_Union[DisputeReason, str]] = ..., description: _Optional[str] = ..., received_content_hash: _Optional[str] = ..., received_hash_method: _Optional[str] = ..., report_id: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class DisputeResponse(_message.Message): + __slots__ = ("ver", "dispute_id", "estimated_resolution", "status", "resolution", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + DISPUTE_ID_FIELD_NUMBER: _ClassVar[int] + ESTIMATED_RESOLUTION_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + RESOLUTION_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + dispute_id: str + estimated_resolution: _duration_pb2.Duration + status: DisputeStatus + resolution: ResolutionType + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., dispute_id: _Optional[str] = ..., estimated_resolution: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., status: _Optional[_Union[DisputeStatus, str]] = ..., resolution: _Optional[_Union[ResolutionType, str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class DomainVerificationRequest(_message.Message): + __slots__ = ("ver", "domain", "caller_id", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FIELD_NUMBER: _ClassVar[int] + CALLER_ID_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + domain: str + caller_id: str + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., domain: _Optional[str] = ..., caller_id: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class DomainVerificationChallenge(_message.Message): + __slots__ = ("ver", "token", "expires_at", "verification_url", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] + VERIFICATION_URL_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + token: str + expires_at: _timestamp_pb2.Timestamp + verification_url: str + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., token: _Optional[str] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., verification_url: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class DomainVerificationConfirmation(_message.Message): + __slots__ = ("ver", "domain", "token", "signing_key", "cdn_type", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + SIGNING_KEY_FIELD_NUMBER: _ClassVar[int] + CDN_TYPE_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + domain: str + token: str + signing_key: str + cdn_type: str + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., domain: _Optional[str] = ..., token: _Optional[str] = ..., signing_key: _Optional[str] = ..., cdn_type: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class DomainVerificationResult(_message.Message): + __slots__ = ("ver", "key_id", "valid_until", "ext", "ext_critical") + VER_FIELD_NUMBER: _ClassVar[int] + KEY_ID_FIELD_NUMBER: _ClassVar[int] + VALID_UNTIL_FIELD_NUMBER: _ClassVar[int] + EXT_FIELD_NUMBER: _ClassVar[int] + EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] + ver: str + key_id: str + valid_until: _timestamp_pb2.Timestamp + ext: _struct_pb2.Struct + ext_critical: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, ver: _Optional[str] = ..., key_id: _Optional[str] = ..., valid_until: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... + +class ErrorDetail(_message.Message): + __slots__ = ("message", "domain", "metadata", "transaction_denial", "catalog_rejection", "registration_failure", "dispute_failure", "domain_verification_failure", "retrieval_auth_failure", "usage_report_rejection") + class MetadataEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + MESSAGE_FIELD_NUMBER: _ClassVar[int] + DOMAIN_FIELD_NUMBER: _ClassVar[int] + METADATA_FIELD_NUMBER: _ClassVar[int] + TRANSACTION_DENIAL_FIELD_NUMBER: _ClassVar[int] + CATALOG_REJECTION_FIELD_NUMBER: _ClassVar[int] + REGISTRATION_FAILURE_FIELD_NUMBER: _ClassVar[int] + DISPUTE_FAILURE_FIELD_NUMBER: _ClassVar[int] + DOMAIN_VERIFICATION_FAILURE_FIELD_NUMBER: _ClassVar[int] + RETRIEVAL_AUTH_FAILURE_FIELD_NUMBER: _ClassVar[int] + USAGE_REPORT_REJECTION_FIELD_NUMBER: _ClassVar[int] + message: str + domain: str + metadata: _containers.ScalarMap[str, str] + transaction_denial: TransactionDenial + catalog_rejection: CatalogRejection + registration_failure: RegistrationFailure + dispute_failure: DisputeFailure + domain_verification_failure: DomainVerificationFailure + retrieval_auth_failure: RetrievalAuthFailure + usage_report_rejection: UsageReportRejection + def __init__(self, message: _Optional[str] = ..., domain: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ..., transaction_denial: _Optional[_Union[TransactionDenial, _Mapping]] = ..., catalog_rejection: _Optional[_Union[CatalogRejection, _Mapping]] = ..., registration_failure: _Optional[_Union[RegistrationFailure, _Mapping]] = ..., dispute_failure: _Optional[_Union[DisputeFailure, _Mapping]] = ..., domain_verification_failure: _Optional[_Union[DomainVerificationFailure, _Mapping]] = ..., retrieval_auth_failure: _Optional[_Union[RetrievalAuthFailure, _Mapping]] = ..., usage_report_rejection: _Optional[_Union[UsageReportRejection, _Mapping]] = ...) -> None: ... + +class TransactionDenial(_message.Message): + __slots__ = ("reason", "restriction_mismatches", "offer_id") + REASON_FIELD_NUMBER: _ClassVar[int] + RESTRICTION_MISMATCHES_FIELD_NUMBER: _ClassVar[int] + OFFER_ID_FIELD_NUMBER: _ClassVar[int] + reason: DenialReason + restriction_mismatches: _containers.RepeatedScalarFieldContainer[RestrictionKind] + offer_id: str + def __init__(self, reason: _Optional[_Union[DenialReason, str]] = ..., restriction_mismatches: _Optional[_Iterable[_Union[RestrictionKind, str]]] = ..., offer_id: _Optional[str] = ...) -> None: ... + +class CatalogRejection(_message.Message): + __slots__ = ("reason", "rejected_paths") + REASON_FIELD_NUMBER: _ClassVar[int] + REJECTED_PATHS_FIELD_NUMBER: _ClassVar[int] + reason: CatalogRejectionReason + rejected_paths: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, reason: _Optional[_Union[CatalogRejectionReason, str]] = ..., rejected_paths: _Optional[_Iterable[str]] = ...) -> None: ... + +class RegistrationFailure(_message.Message): + __slots__ = ("reason",) + REASON_FIELD_NUMBER: _ClassVar[int] + reason: RegistrationFailureReason + def __init__(self, reason: _Optional[_Union[RegistrationFailureReason, str]] = ...) -> None: ... + +class DisputeFailure(_message.Message): + __slots__ = ("reason",) + REASON_FIELD_NUMBER: _ClassVar[int] + reason: DisputeFailureReason + def __init__(self, reason: _Optional[_Union[DisputeFailureReason, str]] = ...) -> None: ... + +class DomainVerificationFailure(_message.Message): + __slots__ = ("reason",) + REASON_FIELD_NUMBER: _ClassVar[int] + reason: DomainVerificationFailureReason + def __init__(self, reason: _Optional[_Union[DomainVerificationFailureReason, str]] = ...) -> None: ... + +class RetrievalAuthFailure(_message.Message): + __slots__ = ("reason",) + REASON_FIELD_NUMBER: _ClassVar[int] + reason: RetrievalAuthFailureReason + def __init__(self, reason: _Optional[_Union[RetrievalAuthFailureReason, str]] = ...) -> None: ... + +class UsageReportRejection(_message.Message): + __slots__ = ("reason",) + REASON_FIELD_NUMBER: _ClassVar[int] + reason: UsageReportRejectionReason + def __init__(self, reason: _Optional[_Union[UsageReportRejectionReason, str]] = ...) -> None: ... diff --git a/gen/python/ramp/v1/vocab_pb2.py b/gen/python/ramp/v1/vocab_pb2.py new file mode 100644 index 00000000..70a005b4 --- /dev/null +++ b/gen/python/ramp/v1/vocab_pb2.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: ramp/v1/vocab.proto +# Protobuf Python Version: 7.35.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 7, + 35, + 1, + '', + 'ramp/v1/vocab.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13ramp/v1/vocab.proto\x12\x07ramp.v1\x1a google/protobuf/descriptor.proto:5\n\x05vocab\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x03(\tR\x05vocab:B\n\nvocab_enum\x12!.google.protobuf.EnumValueOptions\x18\xd2\x86\x03 \x03(\tR\tvocabEnumB\x8f\x01\n\x0b\x63om.ramp.v1B\nVocabProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ramp.v1.vocab_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\013com.ramp.v1B\nVocabProtoP\001Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\242\002\003RXX\252\002\007Ramp.V1\312\002\007Ramp\\V1\342\002\023Ramp\\V1\\GPBMetadata\352\002\010Ramp::V1' +# @@protoc_insertion_point(module_scope) diff --git a/gen/python/ramp/v1/vocab_pb2.pyi b/gen/python/ramp/v1/vocab_pb2.pyi new file mode 100644 index 00000000..d588ef35 --- /dev/null +++ b/gen/python/ramp/v1/vocab_pb2.pyi @@ -0,0 +1,9 @@ +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from google.protobuf import descriptor as _descriptor +from typing import ClassVar as _ClassVar + +DESCRIPTOR: _descriptor.FileDescriptor +VOCAB_FIELD_NUMBER: _ClassVar[int] +vocab: _descriptor.FieldDescriptor +VOCAB_ENUM_FIELD_NUMBER: _ClassVar[int] +vocab_enum: _descriptor.FieldDescriptor diff --git a/gen/python/vocab/__pycache__/pricingunits.cpython-312.pyc b/gen/python/vocab/__pycache__/pricingunits.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d72d0b8a87e0d724de9a5a4e4532c9f212560e68 GIT binary patch literal 1029 zcmZ8fy>Ht_6hDfjNRj%o{DBnCz%E4v)X`KR2!aBvLdSwF#U-hsw-_|<$!08(${l6E zMh6WY3UujEAo&-H4*5g6coaAl=s%#sodOi-J1S|45{KV=@Atls_gkZ35&T+@zkK<( zO2{A5`0%ygEB8O3@|rM02~()TDzw5>sxpmgOs6`l(ke5k!Axqh8m%#lTFj<4tJ6Ab z&<1PLCTr0a5Ky23DrlfX6$~(;1{T;*hXypEHEGj!g}@fHe^oY}X@|98n{C0)L}Q)r zHM)DV-Q6jS3FPr5h{BBG7=%ErnrBy#ib9X0=@i90x#q_UOrG4TL56-LC&^-`V?j+WtKfWYpa&j6*N%A9+Dxy8XTv z1gKTR7suWxDD=L2a)RR2eU7XVc>NcnXQ&JZqj4x19~oaVLFjw#5HknEGFA^fHw=o- zcr*xuv!Od0AG-Z;jN2Dh|H$>x@O-TN^|!K)J_tQb)`M@(j)#ScO^e!uXSeu_Am`gS zXrbaGDYWw}o0dEMLiirid`J4sr?ZSLrtlU20!?|X;w{2jRTO32B=*kISlPQvb5+|~ zR##?gsc*pAM#ul)W5{mzj&xRyPnOnyQe^VlBzk?N;jva)tvvQh`}b_fy_MGd;H|Ac j-7+dm_0P{p>%klK$8>40s}<$pPr;g?coY65MY+&F-exY8 literal 0 HcmV?d00001 diff --git a/gen/python/vocab/functiontokens.py b/gen/python/vocab/functiontokens.py new file mode 100644 index 00000000..2305ff6c --- /dev/null +++ b/gen/python/vocab/functiontokens.py @@ -0,0 +1,63 @@ +# Code generated by protoc-gen-rampvocab. DO NOT EDIT. +# +# Source vocabulary: on ramp.v1.RESTRICTION_KIND_FUNCTION. +# The token list is authored solely in that option; these constants and +# is_registered derive from it and cannot drift. + +ALL_USES = "all" +AI_ALL = "ai-all" +AI_TRAIN = "ai-train" +AI_INPUT = "ai-input" +AI_INDEX = "ai-index" +SEARCH = "search" +CRAWL = "crawl" +TEXT_AND_DATA_MINING = "text-and-data-mining" +TTS = "tts" +COMMERCIAL = "commercial" +ADVERTISING = "advertising" +EDITORIAL = "editorial" +RESEARCH = "research" +REPRODUCE = "reproduce" +DISTRIBUTE = "distribute" +MODIFY = "modify" +DISPLAY = "display" +SYNC = "sync" +BROADCAST = "broadcast" +STREAM = "stream" +PRINT = "print" +MANUFACTURE = "manufacture" +SELL = "sell" + +# ALL lists every registered token in registration order. +ALL = ( + ALL_USES, + AI_ALL, + AI_TRAIN, + AI_INPUT, + AI_INDEX, + SEARCH, + CRAWL, + TEXT_AND_DATA_MINING, + TTS, + COMMERCIAL, + ADVERTISING, + EDITORIAL, + RESEARCH, + REPRODUCE, + DISTRIBUTE, + MODIFY, + DISPLAY, + SYNC, + BROADCAST, + STREAM, + PRINT, + MANUFACTURE, + SELL, +) + +_REGISTERED = frozenset(ALL) + + +def is_registered(s: str) -> bool: + """Return True if s is a registered bare token (namespaced vendor:token values return False).""" + return s in _REGISTERED diff --git a/gen/python/vocab/geographytokens.py b/gen/python/vocab/geographytokens.py new file mode 100644 index 00000000..1399f63f --- /dev/null +++ b/gen/python/vocab/geographytokens.py @@ -0,0 +1,23 @@ +# Code generated by protoc-gen-rampvocab. DO NOT EDIT. +# +# Source vocabulary: on ramp.v1.RESTRICTION_KIND_GEOGRAPHY. +# The token list is authored solely in that option; these constants and +# is_registered derive from it and cannot drift. + +WORLDWIDE = "*" +EU = "EU" +EEA = "EEA" + +# ALL lists every registered token in registration order. +ALL = ( + WORLDWIDE, + EU, + EEA, +) + +_REGISTERED = frozenset(ALL) + + +def is_registered(s: str) -> bool: + """Return True if s is a registered bare token (namespaced vendor:token values return False).""" + return s in _REGISTERED diff --git a/gen/python/vocab/pricingunits.py b/gen/python/vocab/pricingunits.py new file mode 100644 index 00000000..87e63d13 --- /dev/null +++ b/gen/python/vocab/pricingunits.py @@ -0,0 +1,49 @@ +# Code generated by protoc-gen-rampvocab. DO NOT EDIT. +# +# Source vocabulary: on ramp.v1.Pricing.unit. +# The token list is authored solely in that option; these constants and +# is_registered derive from it and cannot drift. + +FETCHES = "fetches" +ACCESSES = "accesses" +TOKENS = "tokens" +CALLS = "calls" +PAGES = "pages" +SECONDS = "seconds" +MINUTES = "minutes" +RECORDS = "records" +STREAMS = "streams" +IMAGES = "images" +SEATS = "seats" +UNITS_MANUFACTURED = "units-manufactured" +CHARACTERS = "characters" +BYTES = "bytes" +ITEMS = "items" +SQ_KM = "sq-km" + +# ALL lists every registered token in registration order. +ALL = ( + FETCHES, + ACCESSES, + TOKENS, + CALLS, + PAGES, + SECONDS, + MINUTES, + RECORDS, + STREAMS, + IMAGES, + SEATS, + UNITS_MANUFACTURED, + CHARACTERS, + BYTES, + ITEMS, + SQ_KM, +) + +_REGISTERED = frozenset(ALL) + + +def is_registered(s: str) -> bool: + """Return True if s is a registered bare token (namespaced vendor:token values return False).""" + return s in _REGISTERED diff --git a/gen/python/vocab/quotametrics.py b/gen/python/vocab/quotametrics.py new file mode 100644 index 00000000..cfe77755 --- /dev/null +++ b/gen/python/vocab/quotametrics.py @@ -0,0 +1,33 @@ +# Code generated by protoc-gen-rampvocab. DO NOT EDIT. +# +# Source vocabulary: on ramp.v1.Quota.metric. +# The token list is authored solely in that option; these constants and +# is_registered derive from it and cannot drift. + +DISPLAY_WORDS = "display-words" +IMPRESSIONS = "impressions" +TOKENS = "tokens" +INPUT_TOKENS = "input-tokens" +UNITS_MANUFACTURED = "units-manufactured" +ACCESSES = "accesses" +COPIES = "copies" +SEATS = "seats" + +# ALL lists every registered token in registration order. +ALL = ( + DISPLAY_WORDS, + IMPRESSIONS, + TOKENS, + INPUT_TOKENS, + UNITS_MANUFACTURED, + ACCESSES, + COPIES, + SEATS, +) + +_REGISTERED = frozenset(ALL) + + +def is_registered(s: str) -> bool: + """Return True if s is a registered bare token (namespaced vendor:token values return False).""" + return s in _REGISTERED diff --git a/gen/python/vocab/usertypes.py b/gen/python/vocab/usertypes.py new file mode 100644 index 00000000..a819bf22 --- /dev/null +++ b/gen/python/vocab/usertypes.py @@ -0,0 +1,29 @@ +# Code generated by protoc-gen-rampvocab. DO NOT EDIT. +# +# Source vocabulary: on ramp.v1.RESTRICTION_KIND_USER_TYPE. +# The token list is authored solely in that option; these constants and +# is_registered derive from it and cannot drift. + +INDIVIDUAL = "individual" +ACADEMIC = "academic" +NON_PROFIT = "non_profit" +NEWS_PUBLISHER = "news_publisher" +BROADCASTER = "broadcaster" +COMMERCIAL_ENTITY = "commercial_entity" + +# ALL lists every registered token in registration order. +ALL = ( + INDIVIDUAL, + ACADEMIC, + NON_PROFIT, + NEWS_PUBLISHER, + BROADCASTER, + COMMERCIAL_ENTITY, +) + +_REGISTERED = frozenset(ALL) + + +def is_registered(s: str) -> bool: + """Return True if s is a registered bare token (namespaced vendor:token values return False).""" + return s in _REGISTERED diff --git a/gen/ts/package.json b/gen/ts/package.json index f0b47ee1..b3ae6f7f 100644 --- a/gen/ts/package.json +++ b/gen/ts/package.json @@ -6,7 +6,8 @@ "exports": { "./ramp/v1/ramp_pb": "./ramp/v1/ramp_pb.ts", "./ramp/v1/ramp_connect": "./ramp/v1/ramp_connect.ts", - "./comp/v1/comp_pb": "./comp/v1/comp_pb.ts" + "./comp/v1/comp_pb": "./comp/v1/comp_pb.ts", + "./vocab/*": "./vocab/*.ts" }, "dependencies": { "@bufbuild/protobuf": "^2.0.0", diff --git a/gen/ts/vocab/functiontokens.ts b/gen/ts/vocab/functiontokens.ts new file mode 100644 index 00000000..9652e462 --- /dev/null +++ b/gen/ts/vocab/functiontokens.ts @@ -0,0 +1,64 @@ +// Code generated by protoc-gen-rampvocab. DO NOT EDIT. +// +// Source vocabulary: on ramp.v1.RESTRICTION_KIND_FUNCTION. +// The token list is authored solely in that option; these constants and +// isRegistered derive from it and cannot drift. + +export const AllUses = "all"; +export const AiAll = "ai-all"; +export const AiTrain = "ai-train"; +export const AiInput = "ai-input"; +export const AiIndex = "ai-index"; +export const Search = "search"; +export const Crawl = "crawl"; +export const TextAndDataMining = "text-and-data-mining"; +export const Tts = "tts"; +export const Commercial = "commercial"; +export const Advertising = "advertising"; +export const Editorial = "editorial"; +export const Research = "research"; +export const Reproduce = "reproduce"; +export const Distribute = "distribute"; +export const Modify = "modify"; +export const Display = "display"; +export const Sync = "sync"; +export const Broadcast = "broadcast"; +export const Stream = "stream"; +export const Print = "print"; +export const Manufacture = "manufacture"; +export const Sell = "sell"; + +// All lists every registered token in registration order. +export const All = [ + AllUses, + AiAll, + AiTrain, + AiInput, + AiIndex, + Search, + Crawl, + TextAndDataMining, + Tts, + Commercial, + Advertising, + Editorial, + Research, + Reproduce, + Distribute, + Modify, + Display, + Sync, + Broadcast, + Stream, + Print, + Manufacture, + Sell, +] as const; + +const registered: ReadonlySet = new Set(All); + +// isRegistered reports whether s is a registered bare token. Namespaced +// (vendor:token) values are NOT registered tokens and return false. +export function isRegistered(s: string): boolean { + return registered.has(s); +} diff --git a/gen/ts/vocab/geographytokens.ts b/gen/ts/vocab/geographytokens.ts new file mode 100644 index 00000000..3e2a970e --- /dev/null +++ b/gen/ts/vocab/geographytokens.ts @@ -0,0 +1,24 @@ +// Code generated by protoc-gen-rampvocab. DO NOT EDIT. +// +// Source vocabulary: on ramp.v1.RESTRICTION_KIND_GEOGRAPHY. +// The token list is authored solely in that option; these constants and +// isRegistered derive from it and cannot drift. + +export const Worldwide = "*"; +export const EU = "EU"; +export const EEA = "EEA"; + +// All lists every registered token in registration order. +export const All = [ + Worldwide, + EU, + EEA, +] as const; + +const registered: ReadonlySet = new Set(All); + +// isRegistered reports whether s is a registered bare token. Namespaced +// (vendor:token) values are NOT registered tokens and return false. +export function isRegistered(s: string): boolean { + return registered.has(s); +} diff --git a/gen/ts/vocab/pricingunits.ts b/gen/ts/vocab/pricingunits.ts new file mode 100644 index 00000000..cab33ba9 --- /dev/null +++ b/gen/ts/vocab/pricingunits.ts @@ -0,0 +1,50 @@ +// Code generated by protoc-gen-rampvocab. DO NOT EDIT. +// +// Source vocabulary: on ramp.v1.Pricing.unit. +// The token list is authored solely in that option; these constants and +// isRegistered derive from it and cannot drift. + +export const Fetches = "fetches"; +export const Accesses = "accesses"; +export const Tokens = "tokens"; +export const Calls = "calls"; +export const Pages = "pages"; +export const Seconds = "seconds"; +export const Minutes = "minutes"; +export const Records = "records"; +export const Streams = "streams"; +export const Images = "images"; +export const Seats = "seats"; +export const UnitsManufactured = "units-manufactured"; +export const Characters = "characters"; +export const Bytes = "bytes"; +export const Items = "items"; +export const SqKm = "sq-km"; + +// All lists every registered token in registration order. +export const All = [ + Fetches, + Accesses, + Tokens, + Calls, + Pages, + Seconds, + Minutes, + Records, + Streams, + Images, + Seats, + UnitsManufactured, + Characters, + Bytes, + Items, + SqKm, +] as const; + +const registered: ReadonlySet = new Set(All); + +// isRegistered reports whether s is a registered bare token. Namespaced +// (vendor:token) values are NOT registered tokens and return false. +export function isRegistered(s: string): boolean { + return registered.has(s); +} diff --git a/gen/ts/vocab/quotametrics.ts b/gen/ts/vocab/quotametrics.ts new file mode 100644 index 00000000..4a68e99c --- /dev/null +++ b/gen/ts/vocab/quotametrics.ts @@ -0,0 +1,34 @@ +// Code generated by protoc-gen-rampvocab. DO NOT EDIT. +// +// Source vocabulary: on ramp.v1.Quota.metric. +// The token list is authored solely in that option; these constants and +// isRegistered derive from it and cannot drift. + +export const DisplayWords = "display-words"; +export const Impressions = "impressions"; +export const Tokens = "tokens"; +export const InputTokens = "input-tokens"; +export const UnitsManufactured = "units-manufactured"; +export const Accesses = "accesses"; +export const Copies = "copies"; +export const Seats = "seats"; + +// All lists every registered token in registration order. +export const All = [ + DisplayWords, + Impressions, + Tokens, + InputTokens, + UnitsManufactured, + Accesses, + Copies, + Seats, +] as const; + +const registered: ReadonlySet = new Set(All); + +// isRegistered reports whether s is a registered bare token. Namespaced +// (vendor:token) values are NOT registered tokens and return false. +export function isRegistered(s: string): boolean { + return registered.has(s); +} diff --git a/gen/ts/vocab/usertypes.ts b/gen/ts/vocab/usertypes.ts new file mode 100644 index 00000000..b29378d2 --- /dev/null +++ b/gen/ts/vocab/usertypes.ts @@ -0,0 +1,30 @@ +// Code generated by protoc-gen-rampvocab. DO NOT EDIT. +// +// Source vocabulary: on ramp.v1.RESTRICTION_KIND_USER_TYPE. +// The token list is authored solely in that option; these constants and +// isRegistered derive from it and cannot drift. + +export const Individual = "individual"; +export const Academic = "academic"; +export const NonProfit = "non_profit"; +export const NewsPublisher = "news_publisher"; +export const Broadcaster = "broadcaster"; +export const CommercialEntity = "commercial_entity"; + +// All lists every registered token in registration order. +export const All = [ + Individual, + Academic, + NonProfit, + NewsPublisher, + Broadcaster, + CommercialEntity, +] as const; + +const registered: ReadonlySet = new Set(All); + +// isRegistered reports whether s is a registered bare token. Namespaced +// (vendor:token) values are NOT registered tokens and return false. +export function isRegistered(s: string): boolean { + return registered.has(s); +} diff --git a/proto/buf.gen.yaml b/proto/buf.gen.yaml index 71eff294..3996695f 100644 --- a/proto/buf.gen.yaml +++ b/proto/buf.gen.yaml @@ -18,9 +18,19 @@ plugins: - remote: buf.build/connectrpc/es out: ../gen/ts opt: target=ts + # Python message types + type stubs (.pyi) — the base Python SDK surface. + - remote: buf.build/protocolbuffers/python + out: ../gen/python + - remote: buf.build/protocolbuffers/pyi + out: ../gen/python + # Connect-Python service client/handler (Connect protocol — parity with Go/TS). + - remote: buf.build/connectrpc/python + out: ../gen/python # RAMP vocabulary constants — reads (ramp.v1.vocab) field options and # (ramp.v1.vocab_enum) enum-value options and emits typed token constants + - # IsRegistered per axis (Pricing.unit, Quota.metric, function, geography, - # user-type). + # membership check per axis (Pricing.unit, Quota.metric, function, geography, + # user-type) for EVERY SDK language in one pass: Go, TypeScript, and Python. + # out is ../gen (not ../gen/go/vocab) so it writes go/vocab/, ts/vocab/, and + # python/vocab/ from the single source — the three cannot drift from each other. - local: ["go", "run", "github.com/RAMP-Protocol/protocol/cmd/protoc-gen-rampvocab"] - out: ../gen/go/vocab + out: ../gen From 6afb0520b9d1b23f3ee1fd093e60483f9a154f8f Mon Sep 17 00:00:00 2001 From: "Constantine.mirin" Date: Fri, 19 Jun 2026 14:41:47 +0200 Subject: [PATCH 02/40] docs(readme): document the Python SDK and cross-language vocab constants Add a Python SDK section (gen/python, pip install) and note that all three SDKs now carry registered vocabulary constants emitted from one source, so consumers use typed constants + a membership check instead of magic strings. --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a43dabda..24fedb30 100644 --- a/README.md +++ b/README.md @@ -35,18 +35,35 @@ A working multi-language stack — Exchange (Go), Broker (Go), Edge (TypeScript) ## SDKs +All three SDKs are generated from `proto/` by `buf generate`, including **registered +vocabulary constants** per axis (`pricingunits`, `quotametrics`, `functiontokens`, +`geographytokens`, `usertypes`) so consumers use typed constants and an +`IsRegistered`/`isRegistered`/`is_registered` membership check instead of magic +strings. All three are emitted from the single `(ramp.v1.vocab)` source in one pass, +so they cannot drift from each other. + ### Go ```go import ( rampv1 "github.com/RAMP-Protocol/protocol/gen/go/ramp/v1" "github.com/RAMP-Protocol/protocol/gen/go/ramp/v1/rampv1connect" + "github.com/RAMP-Protocol/protocol/gen/go/vocab/pricingunits" ) ``` ### TypeScript -TypeScript message types and a Connect client are generated under [`gen/ts/`](gen/ts) (Protobuf-ES + Connect-ES); the [reference implementation](https://github.com/RAMP-Protocol/reference-implementation) shows them in use. +TypeScript message types and a Connect client are generated under [`gen/ts/`](gen/ts) (Protobuf-ES + Connect-ES), with vocabulary constants under [`gen/ts/vocab/`](gen/ts/vocab); the [reference implementation](https://github.com/RAMP-Protocol/reference-implementation) shows them in use. + +### Python + +Python message types, type stubs (`.pyi`), Connect service stubs, and vocabulary constants are generated under [`gen/python/`](gen/python) (`pip install .` from that directory; see its [README](gen/python/README.md)). + +```python +from ramp.v1 import ramp_pb2 +from vocab import pricingunits +``` ## License From 455802695531a0b0de86ceb9004d13d4c9c5e9a2 Mon Sep 17 00:00:00 2001 From: "Constantine.mirin" Date: Fri, 19 Jun 2026 14:54:28 +0200 Subject: [PATCH 03/40] =?UTF-8?q?refactor(vocab):=20drive=20the=20axis?= =?UTF-8?q?=E2=86=92package=20mapping=20from=20the=20proto,=20drop=20the?= =?UTF-8?q?=20Go=20maps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding a vocab axis previously required editing two hardcoded maps in protoc-gen-rampvocab (the one recurring manual touch). Move that mapping into the proto, next to the tokens, so the generator is fully data-driven and adding an axis touches only the .proto: - New options (ramp/v1/vocab.proto): (ramp.v1.vocab_package) on FieldOptions (50003) and (ramp.v1.vocab_enum_package) on EnumValueOptions (50004), carrying the generated package/module name for the axis. - Annotate the five axes in ramp.proto (Pricing.unit→pricingunits, Quota.metric→quotametrics, RestrictionKind values→functiontokens/geographytokens/ usertypes). - Plugin reads the package from the option (readVocabString) and errors loudly if a vocab-bearing descriptor lacks its package option; deleted fieldAxisPackage/ enumAxisPackage. The vocab constant outputs (gen/{go,ts,python}/vocab) are byte-identical — the package names match the former maps. Only the descriptor-embedding message files change (the new options are part of the proto descriptor). --- cmd/protoc-gen-rampvocab/main.go | 168 +++++++++------- gen/descriptor.binpb | Bin 513278 -> 514349 bytes gen/go/ramp/v1/ramp.pb.go | 31 +-- gen/go/ramp/v1/vocab.pb.go | 53 ++++- gen/python/ramp/v1/ramp_pb2.py | 326 +++++++++++++++---------------- gen/python/ramp/v1/vocab_pb2.py | 2 +- gen/python/ramp/v1/vocab_pb2.pyi | 4 + gen/ts/ramp/v1/ramp_pb.ts | 2 +- gen/ts/ramp/v1/vocab_pb.ts | 27 ++- proto/ramp/v1/ramp.proto | 5 + proto/ramp/v1/vocab.proto | 13 ++ 11 files changed, 367 insertions(+), 264 deletions(-) diff --git a/cmd/protoc-gen-rampvocab/main.go b/cmd/protoc-gen-rampvocab/main.go index 141923a2..bf1b86cc 100644 --- a/cmd/protoc-gen-rampvocab/main.go +++ b/cmd/protoc-gen-rampvocab/main.go @@ -1,20 +1,24 @@ // Command protoc-gen-rampvocab is a buf/protoc plugin that reads the RAMP // vocabulary options off every annotated field and enum value and emits, per -// axis, a typed Go package with one string constant per registered token, an -// All slice, and an IsRegistered membership check. +// axis and per SDK language (Go, TypeScript, Python), a typed package/module +// with one string constant per registered token, an All/ALL collection, and an +// IsRegistered/isRegistered/is_registered membership check. // -// Two options carry the tokens, one per descriptor kind: -// - (ramp.v1.vocab) — FieldOptions extension 50001, on fields whose -// axis is the field itself (Pricing.unit, Quota.metric). -// - (ramp.v1.vocab_enum) — EnumValueOptions extension 50002, on enum values -// that SELECT an axis (RestrictionKind values select -// the function / geography / user-type token lists -// carried in Restriction.permitted/prohibited). +// Two pairs of options carry the data, one pair per descriptor kind — the +// repeated tokens and the scalar generated-package name: +// - (ramp.v1.vocab) / (ramp.v1.vocab_package) — FieldOptions +// extensions 50001/50003, on fields whose axis is the field itself +// (Pricing.unit, Quota.metric). +// - (ramp.v1.vocab_enum) / (ramp.v1.vocab_enum_package) — EnumValueOptions +// extensions 50002/50004, on enum values that SELECT an axis (RestrictionKind +// values select the function / geography / user-type token lists carried in +// Restriction.permitted/prohibited). // -// The token list is authored in exactly one place — the option entries on the -// field or enum value — so the generated constants and the ingest-time -// membership check both derive from it and cannot drift. The plugin reads the -// options STRUCTURALLY (it does not parse CEL and emits no drift assertion). +// Everything — the tokens AND the target package name — is authored in exactly +// one place, the options on the field or enum value, so the generated constants, +// the membership check, and the package layout all derive from the proto and +// cannot drift. There is no hand-maintained axis→package table in this plugin. +// The plugin reads the options STRUCTURALLY (it does not parse CEL). // // A generic plugin binary does not have ramp.v1's extensions registered in its // global proto registry, so reading options through the global registry would @@ -40,31 +44,22 @@ import ( ) const ( - // vocabFieldExtNumber is FieldOptions extension 50001 — (ramp.v1.vocab). - vocabFieldExtNumber = 50001 - // vocabEnumExtNumber is EnumValueOptions extension 50002 — (ramp.v1.vocab_enum). - vocabEnumExtNumber = 50002 - - vocabFieldExtName = "ramp.v1.vocab" - vocabEnumExtName = "ramp.v1.vocab_enum" + // Token extensions — the repeated registered tokens for an axis. + vocabFieldExtNumber = 50001 // (ramp.v1.vocab) on FieldOptions + vocabEnumExtNumber = 50002 // (ramp.v1.vocab_enum) on EnumValueOptions + // Package extensions — the generated package/module name for the axis. These + // replace the former hand-maintained axis→package maps: the mapping now lives + // in the proto, next to the tokens, so adding an axis touches only the .proto + // and never this plugin. + vocabFieldPkgExtNumber = 50003 // (ramp.v1.vocab_package) on FieldOptions + vocabEnumPkgExtNumber = 50004 // (ramp.v1.vocab_enum_package) on EnumValueOptions + + vocabFieldExtName = "ramp.v1.vocab" + vocabEnumExtName = "ramp.v1.vocab_enum" + vocabFieldPkgExtName = "ramp.v1.vocab_package" + vocabEnumPkgExtName = "ramp.v1.vocab_enum_package" ) -// fieldAxisPackage maps the FULL name of a field carrying (ramp.v1.vocab) to -// its generated Go package. Keyed by full name (not the bare field name) so two -// like-named fields in different messages cannot collide onto one package. -var fieldAxisPackage = map[string]string{ - "ramp.v1.Pricing.unit": "pricingunits", - "ramp.v1.Quota.metric": "quotametrics", -} - -// enumAxisPackage maps the FULL name of an enum value carrying -// (ramp.v1.vocab_enum) to its generated Go package. -var enumAxisPackage = map[string]string{ - "ramp.v1.RESTRICTION_KIND_FUNCTION": "functiontokens", - "ramp.v1.RESTRICTION_KIND_GEOGRAPHY": "geographytokens", - "ramp.v1.RESTRICTION_KIND_USER_TYPE": "usertypes", -} - func main() { protogen.Options{}.Run(func(gen *protogen.Plugin) error { gen.SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL) @@ -74,7 +69,9 @@ func main() { return fmt.Errorf("build extension resolver: %w", err) } fieldExt := findExtension(resolver, vocabFieldExtName, vocabFieldExtNumber) + fieldPkgExt := findExtension(resolver, vocabFieldPkgExtName, vocabFieldPkgExtNumber) enumExt := findExtension(resolver, vocabEnumExtName, vocabEnumExtNumber) + enumPkgExt := findExtension(resolver, vocabEnumPkgExtName, vocabEnumPkgExtNumber) if fieldExt == nil && enumExt == nil { // This request carries neither vocab extension descriptor (e.g. a // sibling module split with no vocab-bearing descriptor). Nothing @@ -88,20 +85,20 @@ func main() { } if fieldExt != nil { for _, msg := range f.Messages { - if err := genMessage(gen, fieldExt, msg); err != nil { + if err := genMessage(gen, fieldExt, fieldPkgExt, msg); err != nil { return err } } } if enumExt != nil { for _, enum := range f.Enums { - if err := genEnum(gen, enumExt, enum); err != nil { + if err := genEnum(gen, enumExt, enumPkgExt, enum); err != nil { return err } } // Enums nested in messages. for _, msg := range f.Messages { - if err := genNestedEnums(gen, enumExt, msg); err != nil { + if err := genNestedEnums(gen, enumExt, enumPkgExt, msg); err != nil { return err } } @@ -152,23 +149,26 @@ func findExtension(files *protoregistry.Files, name protoreflect.FullName, numbe return dynamicpb.NewExtensionType(found).TypeDescriptor() } -func genMessage(gen *protogen.Plugin, ext protoreflect.ExtensionTypeDescriptor, msg *protogen.Message) error { +func genMessage(gen *protogen.Plugin, tokensExt, pkgExt protoreflect.ExtensionTypeDescriptor, msg *protogen.Message) error { for _, nested := range msg.Messages { - if err := genMessage(gen, ext, nested); err != nil { + if err := genMessage(gen, tokensExt, pkgExt, nested); err != nil { return err } } for _, field := range msg.Fields { - tokens, err := readVocab(ext, field.Desc.Options()) + tokens, err := readVocabList(tokensExt, field.Desc.Options()) if err != nil { return fmt.Errorf("read (ramp.v1.vocab) on %s: %w", field.Desc.FullName(), err) } if len(tokens) == 0 { continue } - pkg, known := fieldAxisPackage[string(field.Desc.FullName())] - if !known { - return fmt.Errorf("field %s carries (ramp.v1.vocab) but is not mapped to a package; add %q to fieldAxisPackage in protoc-gen-rampvocab", field.Desc.FullName(), field.Desc.FullName()) + pkg, err := readVocabString(pkgExt, field.Desc.Options()) + if err != nil { + return fmt.Errorf("read (ramp.v1.vocab_package) on %s: %w", field.Desc.FullName(), err) + } + if pkg == "" { + return fmt.Errorf("field %s carries (ramp.v1.vocab) but no (ramp.v1.vocab_package); add the package name on the field", field.Desc.FullName()) } if err := emit(gen, pkg, string(field.Desc.FullName()), tokens); err != nil { return err @@ -177,32 +177,35 @@ func genMessage(gen *protogen.Plugin, ext protoreflect.ExtensionTypeDescriptor, return nil } -func genNestedEnums(gen *protogen.Plugin, ext protoreflect.ExtensionTypeDescriptor, msg *protogen.Message) error { +func genNestedEnums(gen *protogen.Plugin, tokensExt, pkgExt protoreflect.ExtensionTypeDescriptor, msg *protogen.Message) error { for _, enum := range msg.Enums { - if err := genEnum(gen, ext, enum); err != nil { + if err := genEnum(gen, tokensExt, pkgExt, enum); err != nil { return err } } for _, nested := range msg.Messages { - if err := genNestedEnums(gen, ext, nested); err != nil { + if err := genNestedEnums(gen, tokensExt, pkgExt, nested); err != nil { return err } } return nil } -func genEnum(gen *protogen.Plugin, ext protoreflect.ExtensionTypeDescriptor, enum *protogen.Enum) error { +func genEnum(gen *protogen.Plugin, tokensExt, pkgExt protoreflect.ExtensionTypeDescriptor, enum *protogen.Enum) error { for _, val := range enum.Values { - tokens, err := readVocab(ext, val.Desc.Options()) + tokens, err := readVocabList(tokensExt, val.Desc.Options()) if err != nil { return fmt.Errorf("read (ramp.v1.vocab_enum) on %s: %w", val.Desc.FullName(), err) } if len(tokens) == 0 { continue } - pkg, known := enumAxisPackage[string(val.Desc.FullName())] - if !known { - return fmt.Errorf("enum value %s carries (ramp.v1.vocab_enum) but is not mapped to a package; add %q to enumAxisPackage in protoc-gen-rampvocab", val.Desc.FullName(), val.Desc.FullName()) + pkg, err := readVocabString(pkgExt, val.Desc.Options()) + if err != nil { + return fmt.Errorf("read (ramp.v1.vocab_enum_package) on %s: %w", val.Desc.FullName(), err) + } + if pkg == "" { + return fmt.Errorf("enum value %s carries (ramp.v1.vocab_enum) but no (ramp.v1.vocab_enum_package); add the package name on the value", val.Desc.FullName()) } if err := emit(gen, pkg, string(val.Desc.FullName()), tokens); err != nil { return err @@ -211,34 +214,37 @@ func genEnum(gen *protogen.Plugin, ext protoreflect.ExtensionTypeDescriptor, enu return nil } -// readVocab reads the repeated-string vocab values off a descriptor's options, -// structurally, via the request-derived extension resolver. It re-parses the -// raw options bytes so the dynamic extension is recognized. opts is the -// descriptor's Options() (a *descriptorpb.FieldOptions or *EnumValueOptions); -// the extension determines which is expected. -// Returns (nil, nil) when the descriptor legitimately carries no vocab option, -// and (nil, err) when decoding fails — the two are kept distinct so a real -// resolver/marshal failure surfaces instead of masquerading as "no vocab". -func readVocab(ext protoreflect.ExtensionTypeDescriptor, opts proto.Message) ([]string, error) { - if opts == nil { - return nil, nil - } - // Re-marshal/unmarshal the options through a resolver that knows the dynamic - // vocab extension, so its bytes are decoded into the dynamic extension - // rather than left in UnknownFields. +// decodeThroughExt re-parses a descriptor's options through a resolver that knows +// the dynamic vocab extension, so its bytes are decoded into the extension rather +// than left in UnknownFields. opts is the descriptor's Options() (a +// *descriptorpb.FieldOptions or *EnumValueOptions). A generic plugin binary has +// no ramp.v1 extensions registered globally, hence this request-derived resolver. +func decodeThroughExt(ext protoreflect.ExtensionTypeDescriptor, opts proto.Message) (protoreflect.Message, error) { raw, err := proto.Marshal(opts) if err != nil { return nil, fmt.Errorf("marshal options: %w", err) } decoded := opts.ProtoReflect().New().Interface() - if err := (proto.UnmarshalOptions{ - Resolver: resolverWith(ext), - }).Unmarshal(raw, decoded); err != nil { + if err := (proto.UnmarshalOptions{Resolver: resolverWith(ext)}).Unmarshal(raw, decoded); err != nil { return nil, fmt.Errorf("unmarshal options through vocab resolver: %w", err) } + return decoded.ProtoReflect(), nil +} - val := decoded.ProtoReflect().Get(ext) - list := val.List() +// readVocabList reads the repeated-string token values for ext off opts. Returns +// (nil, nil) when the descriptor legitimately carries no such option — including +// when ext is nil (the request did not carry the extension descriptor) — and +// (nil, err) only on a real decode failure, so a resolver/marshal fault surfaces +// instead of masquerading as "no vocab". +func readVocabList(ext protoreflect.ExtensionTypeDescriptor, opts proto.Message) ([]string, error) { + if ext == nil || opts == nil { + return nil, nil + } + m, err := decodeThroughExt(ext, opts) + if err != nil { + return nil, err + } + list := m.Get(ext).List() if list.Len() == 0 { return nil, nil } @@ -249,6 +255,22 @@ func readVocab(ext protoreflect.ExtensionTypeDescriptor, opts proto.Message) ([] return tokens, nil } +// readVocabString reads the scalar string value for ext off opts — the axis's +// generated package name. Returns "" when unset or when ext is nil. +func readVocabString(ext protoreflect.ExtensionTypeDescriptor, opts proto.Message) (string, error) { + if ext == nil || opts == nil { + return "", nil + } + m, err := decodeThroughExt(ext, opts) + if err != nil { + return "", err + } + if !m.Has(ext) { + return "", nil + } + return m.Get(ext).String(), nil +} + // extResolver adapts a single ExtensionTypeDescriptor to the // protoregistry.ExtensionTypeResolver interface used by Unmarshal. type extResolver struct { diff --git a/gen/descriptor.binpb b/gen/descriptor.binpb index ab52432d315ef7d847dfb6de43bc5aba61af65b7..751ba5a362f2de15b8b408b7e2bf89b6f3f61088 100644 GIT binary patch delta 33093 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 delta 32235 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 diff --git a/gen/go/ramp/v1/ramp.pb.go b/gen/go/ramp/v1/ramp.pb.go index 30fc2700..0a5c3826 100644 --- a/gen/go/ramp/v1/ramp.pb.go +++ b/gen/go/ramp/v1/ramp.pb.go @@ -8458,10 +8458,10 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "prohibited\x12\x1a\n" + "\badvisory\x18\x04 \x01(\bR\badvisory:\xab\x02\xbaH\xa7\x02\x1a\x93\x01\n" + ")restriction.permitted_prohibited_disjoint\x126a token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\x1a\x8e\x01\n" + - "\x1arestriction.kind_specified\x12-kind must not be RESTRICTION_KIND_UNSPECIFIED\x1aAthis.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED\"\xd4\x04\n" + - "\x05Quota\x12\xf1\x02\n" + - "\x06metric\x18\x01 \x01(\tB\xd8\x02\xbaH\xe5\x01\xba\x01\xdd\x01\n" + - "\x13quota.metric.format\x12cmetric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, ≤64 chars)\x1aathis != '' && (this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$'))r\x02\x18@\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\vimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\finput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\baccesses\x8a\xb5\x18\x06copies\x8a\xb5\x18\x05seatsR\x06metric\x12\x1d\n" + + "\x1arestriction.kind_specified\x12-kind must not be RESTRICTION_KIND_UNSPECIFIED\x1aAthis.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED\"\xe4\x04\n" + + "\x05Quota\x12\x81\x03\n" + + "\x06metric\x18\x01 \x01(\tB\xe8\x02\xbaH\xe5\x01\xba\x01\xdd\x01\n" + + "\x13quota.metric.format\x12cmetric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, ≤64 chars)\x1aathis != '' && (this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$'))r\x02\x18@\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\vimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\finput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\baccesses\x8a\xb5\x18\x06copies\x8a\xb5\x18\x05seats\x9a\xb5\x18\fquotametricsR\x06metric\x12\x1d\n" + "\x05limit\x18\x02 \x01(\x03B\a\xbaH\x04\"\x02(\x01R\x05limit\x12,\n" + "\x06window\x18\x03 \x01(\x0e2\x14.ramp.v1.QuotaWindowR\x06window:\x89\x01\xbaH\x85\x01\x1a\x82\x01\n" + "\x16quota.window_specified\x12+window must not be QUOTA_WINDOW_UNSPECIFIED\x1a;this.window != ramp.v1.QuotaWindow.QUOTA_WINDOW_UNSPECIFIED\"\xb0\x06\n" + @@ -8505,17 +8505,18 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "\x06_widthB\t\n" + "\a_heightB\v\n" + "\t_durationB\a\n" + - "\x05_size\"\xf7\t\n" + + "\x05_size\"\x87\n" + + "\n" + "\aPricing\x12+\n" + "\x05model\x18\x01 \x01(\x0e2\x15.ramp.v1.PricingModelR\x05model\x12\x12\n" + "\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n" + "\bcurrency\x18\x03 \x01(\tR\bcurrency\x12 \n" + "\tunit_cost\x18\x04 \x01(\x01H\x00R\bunitCost\x88\x01\x01\x122\n" + "\x12estimated_quantity\x18\x05 \x01(\x05H\x01R\x11estimatedQuantity\x88\x01\x01\x12;\n" + - "\x17license_duration_months\x18\a \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\xb8\x03\n" + - "\x04unit\x18\b \x01(\tB\x9e\x03\xbaH\xe9\x01\xba\x01\xe1\x01\n" + + "\x17license_duration_months\x18\a \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\xc8\x03\n" + + "\x04unit\x18\b \x01(\tB\xae\x03\xbaH\xe9\x01\xba\x01\xe1\x01\n" + "\x13pricing.unit.format\x12iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, ≤64 chars)\x1a_this == '' || this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$')r\x02\x18@\x8a\xb5\x18\afetches\x8a\xb5\x18\baccesses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05calls\x8a\xb5\x18\x05pages\x8a\xb5\x18\aseconds\x8a\xb5\x18\aminutes\x8a\xb5\x18\arecords\x8a\xb5\x18\astreams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\n" + - "characters\x8a\xb5\x18\x05bytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-kmH\x03R\x04unit\x88\x01\x01\x129\n" + + "characters\x8a\xb5\x18\x05bytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-km\x9a\xb5\x18\fpricingunitsH\x03R\x04unit\x88\x01\x01\x129\n" + "\bmetering\x18\t \x01(\x0e2\x18.ramp.v1.PricingMeteringH\x04R\bmetering\x88\x01\x01:\xae\x03\xbaH\xaa\x03\x1a\x97\x01\n" + "\x1epricing.per_unit.requires_unit\x12'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != ''\x1a\x86\x01\n" + "\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0\x1a\x84\x01\n" + @@ -9018,16 +9019,16 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "\rTermSemantics\x12\x1e\n" + "\x1aTERM_SEMANTICS_UNSPECIFIED\x10\x00\x12\x1d\n" + "\x19TERM_SEMANTICS_ENUMERATED\x10\x01\x12!\n" + - "\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xb2\x04\n" + + "\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xe5\x04\n" + "\x0fRestrictionKind\x12 \n" + - "\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xac\x02\n" + - "\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x8c\x02\x92\xb5\x18\x03all\x92\xb5\x18\x06ai-all\x92\xb5\x18\bai-train\x92\xb5\x18\bai-input\x92\xb5\x18\bai-index\x92\xb5\x18\x06search\x92\xb5\x18\x05crawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\n" + + "\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xbe\x02\n" + + "\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x9e\x02\x92\xb5\x18\x03all\x92\xb5\x18\x06ai-all\x92\xb5\x18\bai-train\x92\xb5\x18\bai-input\x92\xb5\x18\bai-index\x92\xb5\x18\x06search\x92\xb5\x18\x05crawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\n" + "commercial\x92\xb5\x18\vadvertising\x92\xb5\x18\teditorial\x92\xb5\x18\bresearch\x92\xb5\x18\treproduce\x92\xb5\x18\n" + - "distribute\x92\xb5\x18\x06modify\x92\xb5\x18\adisplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\vmanufacture\x92\xb5\x18\x04sell\x122\n" + - "\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a\x12\x92\xb5\x18\x01*\x92\xb5\x18\x02EU\x92\xb5\x18\x03EEA\x12~\n" + - "\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1a^\x92\xb5\x18\n" + + "distribute\x92\xb5\x18\x06modify\x92\xb5\x18\adisplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\vmanufacture\x92\xb5\x18\x04sell\xa2\xb5\x18\x0efunctiontokens\x12E\n" + + "\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a%\x92\xb5\x18\x01*\x92\xb5\x18\x02EU\x92\xb5\x18\x03EEA\xa2\xb5\x18\x0fgeographytokens\x12\x8b\x01\n" + + "\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1ak\x92\xb5\x18\n" + "individual\x92\xb5\x18\bacademic\x92\xb5\x18\n" + - "non_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\vbroadcaster\x92\xb5\x18\x11commercial_entity\x12\x1a\n" + + "non_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\vbroadcaster\x92\xb5\x18\x11commercial_entity\xa2\xb5\x18\tusertypes\x12\x1a\n" + "\x16RESTRICTION_KIND_OTHER\x10\x04*\x8e\x01\n" + "\vQuotaWindow\x12\x1c\n" + "\x18QUOTA_WINDOW_UNSPECIFIED\x10\x00\x12\x17\n" + diff --git a/gen/go/ramp/v1/vocab.pb.go b/gen/go/ramp/v1/vocab.pb.go index 16ad19de..f8cd1cec 100644 --- a/gen/go/ramp/v1/vocab.pb.go +++ b/gen/go/ramp/v1/vocab.pb.go @@ -43,6 +43,14 @@ var file_ramp_v1_vocab_proto_extTypes = []protoimpl.ExtensionInfo{ Tag: "bytes,50001,rep,name=vocab", Filename: "ramp/v1/vocab.proto", }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*string)(nil), + Field: 50003, + Name: "ramp.v1.vocab_package", + Tag: "bytes,50003,opt,name=vocab_package", + Filename: "ramp/v1/vocab.proto", + }, { ExtendedType: (*descriptorpb.EnumValueOptions)(nil), ExtensionType: ([]string)(nil), @@ -51,6 +59,14 @@ var file_ramp_v1_vocab_proto_extTypes = []protoimpl.ExtensionInfo{ Tag: "bytes,50002,rep,name=vocab_enum", Filename: "ramp/v1/vocab.proto", }, + { + ExtendedType: (*descriptorpb.EnumValueOptions)(nil), + ExtensionType: (*string)(nil), + Field: 50004, + Name: "ramp.v1.vocab_enum_package", + Tag: "bytes,50004,opt,name=vocab_enum_package", + Filename: "ramp/v1/vocab.proto", + }, } // Extension fields to descriptorpb.FieldOptions. @@ -64,6 +80,14 @@ var ( // // repeated string vocab = 50001; E_Vocab = &file_ramp_v1_vocab_proto_extTypes[0] + // vocab_package names the generated SDK package/module for this field's axis + // (e.g. "pricingunits", "quotametrics"). It lives on the field — alongside the + // tokens — so the axis→package mapping is part of the single proto source and + // protoc-gen-rampvocab needs no hand-maintained mapping table. Required on any + // field that carries (ramp.v1.vocab). + // + // optional string vocab_package = 50003; + E_VocabPackage = &file_ramp_v1_vocab_proto_extTypes[1] ) // Extension fields to descriptorpb.EnumValueOptions. @@ -79,7 +103,14 @@ var ( // EnumValueOptions; 50002 is the next slot in the same internal block. // // repeated string vocab_enum = 50002; - E_VocabEnum = &file_ramp_v1_vocab_proto_extTypes[1] + E_VocabEnum = &file_ramp_v1_vocab_proto_extTypes[2] + // vocab_enum_package is the enum-value twin of (ramp.v1.vocab_package): it + // names the generated package/module for an axis selected by an enum value + // (e.g. "functiontokens"). Required on any enum value that carries + // (ramp.v1.vocab_enum). + // + // optional string vocab_enum_package = 50004; + E_VocabEnumPackage = &file_ramp_v1_vocab_proto_extTypes[3] ) var File_ramp_v1_vocab_proto protoreflect.FileDescriptor @@ -87,9 +118,11 @@ var File_ramp_v1_vocab_proto protoreflect.FileDescriptor const file_ramp_v1_vocab_proto_rawDesc = "" + "\n" + "\x13ramp/v1/vocab.proto\x12\aramp.v1\x1a google/protobuf/descriptor.proto:5\n" + - "\x05vocab\x12\x1d.google.protobuf.FieldOptions\x18ц\x03 \x03(\tR\x05vocab:B\n" + + "\x05vocab\x12\x1d.google.protobuf.FieldOptions\x18ц\x03 \x03(\tR\x05vocab:G\n" + + "\rvocab_package\x12\x1d.google.protobuf.FieldOptions\x18ӆ\x03 \x01(\tR\fvocabPackage\x88\x01\x01:B\n" + "\n" + - "vocab_enum\x12!.google.protobuf.EnumValueOptions\x18҆\x03 \x03(\tR\tvocabEnumB\x8f\x01\n" + + "vocab_enum\x12!.google.protobuf.EnumValueOptions\x18҆\x03 \x03(\tR\tvocabEnum:T\n" + + "\x12vocab_enum_package\x12!.google.protobuf.EnumValueOptions\x18Ԇ\x03 \x01(\tR\x10vocabEnumPackage\x88\x01\x01B\x8f\x01\n" + "\vcom.ramp.v1B\n" + "VocabProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\aRamp.V1\xca\x02\aRamp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\bRamp::V1b\x06proto3" @@ -99,11 +132,13 @@ var file_ramp_v1_vocab_proto_goTypes = []any{ } var file_ramp_v1_vocab_proto_depIdxs = []int32{ 0, // 0: ramp.v1.vocab:extendee -> google.protobuf.FieldOptions - 1, // 1: ramp.v1.vocab_enum:extendee -> google.protobuf.EnumValueOptions - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 0, // [0:2] is the sub-list for extension extendee + 0, // 1: ramp.v1.vocab_package:extendee -> google.protobuf.FieldOptions + 1, // 2: ramp.v1.vocab_enum:extendee -> google.protobuf.EnumValueOptions + 1, // 3: ramp.v1.vocab_enum_package:extendee -> google.protobuf.EnumValueOptions + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 0, // [0:4] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name } @@ -119,7 +154,7 @@ func file_ramp_v1_vocab_proto_init() { RawDescriptor: unsafe.Slice(unsafe.StringData(file_ramp_v1_vocab_proto_rawDesc), len(file_ramp_v1_vocab_proto_rawDesc)), NumEnums: 0, NumMessages: 0, - NumExtensions: 2, + NumExtensions: 4, NumServices: 0, }, GoTypes: file_ramp_v1_vocab_proto_goTypes, diff --git a/gen/python/ramp/v1/ramp_pb2.py b/gen/python/ramp/v1/ramp_pb2.py index 02146bed..7389b8da 100644 --- a/gen/python/ramp/v1/ramp_pb2.py +++ b/gen/python/ramp/v1/ramp_pb2.py @@ -29,7 +29,7 @@ from ramp.v1 import vocab_pb2 as ramp_dot_v1_dot_vocab__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12ramp/v1/ramp.proto\x12\x07ramp.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x13ramp/v1/vocab.proto\"\xb5\x02\n\x15\x41\x63\x63\x65ptableRestriction\x12,\n\x04\x61xis\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04\x61xis\x12\xed\x01\n\x06values\x18\x02 \x03(\tB\xd4\x01\xbaH\xd0\x01\x92\x01\x02\x10@\xba\x01\xc7\x01\n$acceptable_restriction.values.format\x12Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\x06values\"\xa1\x03\n\rResourceQuery\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12:\n\x08\x64\x65\x61\x64line\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x08\x64\x65\x61\x64line\x88\x01\x01\x12-\n\x12supported_profiles\x18\x07 \x03(\tR\x11supportedProfiles\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_deadline\"\xb9\x02\n\x10ResourceResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x65xchange\x18\x03 \x01(\tR\x08\x65xchange\x12&\n\x06offers\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12\x36\n\x0coffer_groups\x18\x05 \x03(\x0b\x32\x13.ramp.v1.OfferGroupR\x0bofferGroups\x12:\n\nrate_limit\x18\x06 \x01(\x0b\x32\x16.ramp.v1.RateLimitInfoH\x00R\trateLimit\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_rate_limit\"\xcc\x02\n\nOfferGroup\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12&\n\x06offers\x18\x02 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12H\n\x10\x64iscovery_method\x18\x03 \x01(\x0e\x32\x18.ramp.v1.DiscoveryMethodH\x00R\x0f\x64iscoveryMethod\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x04 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x01R\rabsenceReason\x88\x01\x01\x12I\n\x13restriction_filters\x18\x05 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x12restrictionFiltersB\x13\n\x11_discovery_methodB\x11\n\x0f_absence_reason\"\xbd\x01\n\rRateLimitInfo\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x1c\n\tremaining\x18\x02 \x01(\x05R\tremaining\x12\x35\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07resetAt\x12\x36\n\x06window\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x42\t\n\x07_window\"\x97\x02\n\x15SubscriptionQuotaInfo\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1f\n\x0bquota_limit\x18\x02 \x01(\x05R\nquotaLimit\x12\x1d\n\nquota_used\x18\x03 \x01(\x05R\tquotaUsed\x12\'\n\x0fquota_remaining\x18\x04 \x01(\x05R\x0equotaRemaining\x12<\n\tresets_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x08resetsAt\x88\x01\x01\x12\x17\n\x04unit\x18\x06 \x01(\tH\x01R\x04unit\x88\x01\x01\x42\x0c\n\n_resets_atB\x07\n\x05_unit\"\xdb\x07\n\x05Offer\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12*\n\x07pricing\x18\x03 \x01(\x0b\x32\x10.ramp.v1.PricingR\x07pricing\x12@\n\x0f\x64\x65livery_method\x18\x04 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12?\n\treporting\x18\x05 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\treporting\x88\x01\x01\x12>\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12:\n\x08identity\x18\x07 \x01(\x0b\x32\x19.ramp.v1.ResourceIdentityH\x03R\x08identity\x88\x01\x01\x12\x1c\n\tsignature\x18\t \x01(\tR\tsignature\x12/\n\x13signature_algorithm\x18\n \x01(\tR\x12signatureAlgorithm\x12,\n\x0fsubscription_id\x18\x0b \x01(\tH\x04R\x0esubscriptionId\x88\x01\x01\x12%\n\x0eiab_categories\x18\r \x03(\tR\riabCategories\x12@\n\x0c\x61ttestations\x18\x0e \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12=\n\ndata_as_of\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\x08\x64\x61taAsOf\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12,\n\x08previews\x18\x12 \x03(\x0b\x32\x10.ramp.v1.PreviewR\x08previews\x12*\n\x05terms\x18\x13 \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x08\n\x06_titleB\x0c\n\n_reportingB\r\n\x0b_expires_atB\x0b\n\t_identityB\x12\n\x10_subscription_idB\r\n\x0b_data_as_of\"\xab\x07\n\x10ResourceIdentity\x12(\n\rcanonical_url\x18\x01 \x01(\tH\x00R\x0c\x63\x61nonicalUrl\x88\x01\x01\x12\x15\n\x03\x64oi\x18\x02 \x01(\tH\x01R\x03\x64oi\x88\x01\x01\x12 \n\tiptc_guid\x18\x03 \x01(\tH\x02R\x08iptcGuid\x88\x01\x01\x12\x17\n\x04isni\x18\x04 \x01(\tH\x03R\x04isni\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x05 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x06 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12L\n\x13resource_mutability\x18\x08 \x01(\x0e\x32\x1b.ramp.v1.ResourceMutabilityR\x12resourceMutability\x12(\n\rc2pa_manifest\x18\x07 \x01(\tH\x06R\x0c\x63\x32paManifest\x88\x01\x01\x12\x39\n\x0b\x63\x32pa_status\x18\t \x01(\x0e\x32\x13.ramp.v1.C2PAStatusH\x07R\nc2paStatus\x88\x01\x01\x12&\n\x0csoft_binding\x18\n \x01(\tH\x08R\x0bsoftBinding\x88\x01\x01\x12\x33\n\x13soft_binding_method\x18\x0b \x01(\tH\tR\x11softBindingMethod\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\xd1\x01\xbaH\xcd\x01\x1a\xca\x01\n/resource_identity.resource_mutability_specified\x12?resource_mutability must not be RESOURCE_MUTABILITY_UNSPECIFIED\x1aVthis.resource_mutability != ramp.v1.ResourceMutability.RESOURCE_MUTABILITY_UNSPECIFIEDB\x10\n\x0e_canonical_urlB\x06\n\x04_doiB\x0c\n\n_iptc_guidB\x07\n\x05_isniB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\x10\n\x0e_c2pa_manifestB\x0e\n\x0c_c2pa_statusB\x0f\n\r_soft_bindingB\x16\n\x14_soft_binding_method\"\xe1\x01\n\x13ResourceAttestation\x12\x1a\n\x08verifier\x18\x01 \x01(\tR\x08verifier\x12\x10\n\x03kid\x18\x02 \x01(\tR\x03kid\x12;\n\x0b\x61ttested_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nattestedAt\x12\x10\n\x03uri\x18\x04 \x01(\tR\x03uri\x12/\n\x06\x63laims\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63laims\x12\x1c\n\tsignature\x18\x06 \x01(\tR\tsignature\"\xd4\x04\n\x07License\x12\x15\n\x03uri\x18\x01 \x01(\tH\x00R\x03uri\x88\x01\x01\x12\x13\n\x02id\x18\x02 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x17\n\x04name\x18\x03 \x01(\tH\x02R\x04name\x88\x01\x01\x12!\n\timmutable\x18\x04 \x01(\x08H\x03R\timmutable\x88\x01\x01\x12\xad\x02\n\nuri_digest\x18\x05 \x01(\tB\x88\x02\xbaH\x84\x02\xba\x01\x80\x02\n\x19license.uri_digest.format\x12Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\x1a\x86\x01this == \'\' || this.matches(\'^sha256:[0-9a-f]{64}$\') || this.matches(\'^sha384:[0-9a-f]{96}$\') || this.matches(\'^sha512:[0-9a-f]{128}$\')H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n license.digest_required_with_uri\x12*uri_digest is required whenever uri is set\x1a\'this.uri == \'\' || this.uri_digest != \'\'B\x06\n\x04_uriB\x05\n\x03_idB\x07\n\x05_nameB\x0c\n\n_immutableB\r\n\x0b_uri_digest\"\xe4\x06\n\x0bRestriction\x12,\n\x04kind\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04kind\x12\xeb\x01\n\tpermitted\x18\x02 \x03(\tB\xcc\x01\xbaH\xc8\x01\x92\x01\x02\x10@\xba\x01\xbf\x01\n\x1crestriction.permitted.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\tpermitted\x12\xee\x01\n\nprohibited\x18\x03 \x03(\tB\xcd\x01\xbaH\xc9\x01\x92\x01\x02\x10@\xba\x01\xc0\x01\n\x1drestriction.prohibited.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\nprohibited\x12\x1a\n\x08\x61\x64visory\x18\x04 \x01(\x08R\x08\x61\x64visory:\xab\x02\xbaH\xa7\x02\x1a\x93\x01\n)restriction.permitted_prohibited_disjoint\x12\x36\x61 token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\x1a\x8e\x01\n\x1arestriction.kind_specified\x12-kind must not be RESTRICTION_KIND_UNSPECIFIED\x1a\x41this.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED\"\xd4\x04\n\x05Quota\x12\xf1\x02\n\x06metric\x18\x01 \x01(\tB\xd8\x02\xbaH\xe5\x01r\x02\x18@\xba\x01\xdd\x01\n\x13quota.metric.format\x12\x63metric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a\x61this != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\x0bimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x0cinput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06\x63opies\x8a\xb5\x18\x05seatsR\x06metric\x12\x1d\n\x05limit\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x05limit\x12,\n\x06window\x18\x03 \x01(\x0e\x32\x14.ramp.v1.QuotaWindowR\x06window:\x89\x01\xbaH\x85\x01\x1a\x82\x01\n\x16quota.window_specified\x12+window must not be QUOTA_WINDOW_UNSPECIFIED\x1a;this.window != ramp.v1.QuotaWindow.QUOTA_WINDOW_UNSPECIFIED\"\xb0\x06\n\nObligation\x12+\n\x04kind\x18\x01 \x01(\x0e\x32\x17.ramp.v1.ObligationKindR\x04kind\x12\x34\n\x07trigger\x18\x02 \x01(\x0e\x32\x1a.ramp.v1.ObligationTriggerR\x07trigger\x12:\n\rscope_license\x18\x03 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x0cscopeLicense\x88\x01\x01\x12\x1b\n\x06\x64\x65tail\x18\x04 \x01(\tH\x01R\x06\x64\x65tail\x88\x01\x01:\xc8\x04\xbaH\xc4\x04\x1a\x95\x02\n-obligation.share_alike.requires_scope_license\x12\x44SHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))\x1a\x8a\x01\n\x19obligation.kind_specified\x12,kind must not be OBLIGATION_KIND_UNSPECIFIED\x1a?this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_UNSPECIFIED\x1a\x9c\x01\n\x1cobligation.trigger_specified\x12\x32trigger must not be OBLIGATION_TRIGGER_UNSPECIFIED\x1aHthis.trigger != ramp.v1.ObligationTrigger.OBLIGATION_TRIGGER_UNSPECIFIEDB\x10\n\x0e_scope_licenseB\t\n\x07_detail\"\xe6\x07\n\x0bLicenseTerm\x12/\n\x07license\x18\x01 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x07license\x88\x01\x01\x12\x34\n\tsemantics\x18\x02 \x01(\x0e\x32\x16.ramp.v1.TermSemanticsR\tsemantics\x12\x38\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x14.ramp.v1.RestrictionR\x0crestrictions\x12&\n\x06quotas\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.QuotaR\x06quotas\x12\x35\n\x0bobligations\x18\x05 \x03(\x0b\x32\x13.ramp.v1.ObligationR\x0bobligations\x12\x37\n\x07pricing\x18\x06 \x01(\x0b\x32\x10.ramp.v1.PricingB\x06\xbaH\x03\xc8\x01\x01H\x01R\x07pricing\x88\x01\x01\x12 \n\x06scopes\x18\x07 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\"\n\npart_label\x18\x08 \x01(\tH\x02R\tpartLabel\x88\x01\x01:\xb0\x04\xbaH\xac\x04\x1a\xe2\x01\n(license_term.reference_only.requires_uri\x12>REFERENCE_ONLY terms must carry a license with a non-empty uri\x1avthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\x1a\xa9\x01\n%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)\x1a\x98\x01\n license_term.semantics_specified\x12\x30semantics must not be TERM_SEMANTICS_UNSPECIFIED\x1a\x42this.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_UNSPECIFIEDB\n\n\x08_licenseB\n\n\x08_pricingB\r\n\x0b_part_label\"\xd7\x01\n\x07Preview\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n\nmedia_type\x18\x02 \x01(\tR\tmediaType\x12\x19\n\x05width\x18\x03 \x01(\x05H\x00R\x05width\x88\x01\x01\x12\x1b\n\x06height\x18\x04 \x01(\x05H\x01R\x06height\x88\x01\x01\x12\x1f\n\x08\x64uration\x18\x05 \x01(\x05H\x02R\x08\x64uration\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\tH\x03R\x04size\x88\x01\x01\x42\x08\n\x06_widthB\t\n\x07_heightB\x0b\n\t_durationB\x07\n\x05_size\"\xf7\t\n\x07Pricing\x12+\n\x05model\x18\x01 \x01(\x0e\x32\x15.ramp.v1.PricingModelR\x05model\x12\x12\n\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x04 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x05 \x01(\x05H\x01R\x11\x65stimatedQuantity\x88\x01\x01\x12;\n\x17license_duration_months\x18\x07 \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\xb8\x03\n\x04unit\x18\x08 \x01(\tB\x9e\x03\xbaH\xe9\x01r\x02\x18@\xba\x01\xe1\x01\n\x13pricing.unit.format\x12iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\x8a\xb5\x18\x07\x66\x65tches\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05\x63\x61lls\x8a\xb5\x18\x05pages\x8a\xb5\x18\x07seconds\x8a\xb5\x18\x07minutes\x8a\xb5\x18\x07records\x8a\xb5\x18\x07streams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\ncharacters\x8a\xb5\x18\x05\x62ytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-kmH\x03R\x04unit\x88\x01\x01\x12\x39\n\x08metering\x18\t \x01(\x0e\x32\x18.ramp.v1.PricingMeteringH\x04R\x08metering\x88\x01\x01:\xae\x03\xbaH\xaa\x03\x1a\x97\x01\n\x1epricing.per_unit.requires_unit\x12\'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\x1a\x86\x01\n\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0\x1a\x84\x01\n\x17pricing.model_specified\x12+model must not be PRICING_MODEL_UNSPECIFIED\x1a\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\texpiresAt\x88\x01\x01\x12.\n\x13\x61gent_identity_hash\x18\n \x01(\tR\x11\x61gentIdentityHash\x12\x32\n\x12retrieval_endpoint\x18\x12 \x01(\tH\x06R\x11retrievalEndpoint\x88\x01\x01\x12,\n\x0fsubscription_id\x18\x0c \x01(\tH\x07R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x10 \x01(\x0b\x32\r.ramp.v1.CostH\x08R\x15subscriptionUnitValue\x88\x01\x01\x12\x34\n\x05items\x18\r \x03(\x0b\x32\x1e.ramp.v1.TransactionResultItemR\x05items\x12\x31\n\ntotal_cost\x18\x0e \x01(\x0b\x32\r.ramp.v1.CostH\tR\ttotalCost\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_transaction_idB\r\n\x0b_billing_idB\x11\n\x0f_resource_titleB\x07\n\x05_costB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\r\n\x0b_total_cost\"\xf3\x06\n\x15TransactionResultItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12%\n\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x03 \x01(\tR\tbillingId\x12*\n\x0eresource_title\x18\x04 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x05 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12,\n\x0fsubscription_id\x18\x06 \x01(\tH\x01R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x0b \x01(\x0b\x32\r.ramp.v1.CostH\x02R\x15subscriptionUnitValue\x88\x01\x01\x12?\n\rdenial_reason\x18\x07 \x01(\x0e\x32\x15.ramp.v1.DenialReasonH\x03R\x0c\x64\x65nialReason\x88\x01\x01\x12O\n\x16restriction_mismatches\x18\r \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12>\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\x0c \x01(\tH\x05R\x11retrievalEndpoint\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x06R\x13reportingObligation\x88\x01\x01\x42\x11\n\x0f_resource_titleB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\x10\n\x0e_denial_reasonB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x17\n\x15_reporting_obligation\"j\n\x04\x43ost\x12\x16\n\x06\x61mount\x18\x01 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x02 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x03 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x42\x0c\n\n_unit_cost\"\xe2\x01\n\x14PushResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x30\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x16.ramp.v1.ResourceEntryR\x07\x65ntries\x12\x1b\n\tcaller_id\x18\x04 \x01(\tR\x08\x63\x61llerId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xb3\x06\n\rResourceEntry\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\"\n\ncontent_id\x18\x03 \x01(\tH\x00R\tcontentId\x88\x01\x01\x12\x19\n\x05title\x18\x04 \x01(\tH\x01R\x05title\x88\x01\x01\x12\"\n\nword_count\x18\x05 \x01(\x05H\x02R\twordCount\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x06 \x01(\x05H\x03R\x11\x65stimatedQuantity\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x07 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x08 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12\x35\n\x06source\x18\t \x01(\x0e\x32\x18.ramp.v1.IngestionSourceH\x06R\x06source\x88\x01\x01\x12\x30\n\x11provenance_source\x18\n \x01(\tH\x07R\x10provenanceSource\x88\x01\x01\x12R\n\x14provenance_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x08R\x13provenanceTimestamp\x88\x01\x01\x12@\n\x0c\x61ttestations\x18\x0c \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12*\n\x05terms\x18\r \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_content_idB\x08\n\x06_titleB\r\n\x0b_word_countB\x15\n\x13_estimated_quantityB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\t\n\x07_sourceB\x14\n\x12_provenance_sourceB\x17\n\x15_provenance_timestamp\"\xcb\x01\n\x15PushResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x05R\x08\x61\x63\x63\x65pted\x12\x1a\n\x08rejected\x18\x03 \x01(\x05R\x08rejected\x12\x1a\n\x08warnings\x18\x04 \x03(\tR\x08warnings\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"]\n\x16RemoveResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\"E\n\x17RemoveResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07removed\x18\x02 \x01(\x05R\x07removed\"F\n\x15RefreshCatalogRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\"D\n\x16RefreshCatalogResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07started\x18\x02 \x01(\x08R\x07started\"\x99\x02\n\x13ReportingObligation\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\x12\x36\n\x06window\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x03 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12\'\n\x0frequired_fields\x18\x04 \x03(\tR\x0erequiredFields\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_windowB\x0b\n\t_endpoint\"\xa0\x03\n\x0bUsageReport\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12$\n\x05usage\x18\x05 \x01(\x0b\x32\x0e.ramp.v1.UsageR\x05usage\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1f\n\x08\x65xchange\x18\x08 \x01(\tH\x00R\x08\x65xchange\x88\x01\x01\x12+\n\x06\x61ssets\x18\t \x03(\x0b\x32\x13.ramp.v1.UsageAssetR\x06\x61ssets\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_exchange\"\xd1\x01\n\x11\x41ttributionDetail\x12(\n\rdisplayed_url\x18\x01 \x01(\tH\x00R\x0c\x64isplayedUrl\x88\x01\x01\x12\x34\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x17.ramp.v1.CitationFormatH\x01R\x06\x66ormat\x88\x01\x01\x12+\n\x0fvisible_to_user\x18\x03 \x01(\x08H\x02R\rvisibleToUser\x88\x01\x01\x42\x10\n\x0e_displayed_urlB\t\n\x07_formatB\x12\n\x10_visible_to_user\"\xf0\x04\n\x05Usage\x12\x1a\n\x08\x66unction\x18\x01 \x03(\tR\x08\x66unction\x12\x14\n\x05subfn\x18\x02 \x03(\tR\x05subfn\x12+\n\x11\x63onsumed_quantity\x18\x03 \x01(\x05R\x10\x63onsumedQuantity\x12/\n\x11\x64isplayed_to_user\x18\x04 \x01(\x08H\x00R\x0f\x64isplayedToUser\x88\x01\x01\x12\x30\n\x11\x63itation_included\x18\x05 \x01(\x08H\x01R\x10\x63itationIncluded\x88\x01\x01\x12<\n\x0b\x61ttribution\x18\x06 \x03(\x0b\x32\x1a.ramp.v1.AttributionDetailR\x0b\x61ttribution\x12\xa8\x02\n\rconsumed_unit\x18\x08 \x01(\tB\xfd\x01\xbaH\xf9\x01r\x02\x18@\xba\x01\xf1\x01\n\x1ausage.consumed_unit.format\x12rconsumed_unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')H\x02R\x0c\x63onsumedUnit\x88\x01\x01\x42\x14\n\x12_displayed_to_userB\x14\n\x12_citation_includedB\x10\n\x0e_consumed_unit\"v\n\nUsageAsset\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\"\n\npackage_id\x18\x03 \x01(\tH\x01R\tpackageId\x88\x01\x01\x42\x08\n\x06_titleB\r\n\x0b_package_id\"\x92\x01\n\x13UsageReportResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\treport_id\x18\x03 \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xa7\x04\n\x0bRAMPRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12\x42\n\x0b\x63onstraints\x18\x04 \x01(\x0b\x32\x1b.ramp.v1.RequestConstraintsH\x00R\x0b\x63onstraints\x88\x01\x01\x12-\n\x12supported_profiles\x18\x05 \x03(\tR\x11supportedProfiles\x12\x19\n\x05query\x18\x06 \x01(\tH\x01R\x05query\x88\x01\x01\x12\x43\n\x0esearch_filters\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02R\rsearchFilters\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_constraintsB\x08\n\x06_queryB\x11\n\x0f_search_filters\"\xca\x05\n\x12RequestConstraints\x12\x1c\n\texchanges\x18\x01 \x03(\tR\texchanges\x12/\n\tmax_price\x18\x02 \x01(\x0b\x32\r.ramp.v1.CostH\x00R\x08maxPrice\x88\x01\x01\x12\'\n\rmax_unit_cost\x18\x03 \x01(\x01H\x01R\x0bmaxUnitCost\x88\x01\x01\x12H\n\x13\x64\x65livery_preference\x18\x04 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x12\x64\x65liveryPreference\x12\x30\n\x11reporting_capable\x18\x05 \x01(\x08H\x02R\x10reportingCapable\x88\x01\x01\x12/\n\x13preferred_exchanges\x18\x06 \x03(\tR\x12preferredExchanges\x12&\n\x0c\x62udget_scope\x18\x07 \x01(\tH\x03R\x0b\x62udgetScope\x88\x01\x01\x12\x37\n\rperiod_budget\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostH\x04R\x0cperiodBudget\x88\x01\x01\x12\x43\n\rbudget_period\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationH\x05R\x0c\x62udgetPeriod\x88\x01\x01\x12@\n\x0cmax_data_age\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x06R\nmaxDataAge\x88\x01\x01\x12\x1e\n\x08max_hops\x18\x0b \x01(\x05H\x07R\x07maxHops\x88\x01\x01\x42\x0c\n\n_max_priceB\x10\n\x0e_max_unit_costB\x14\n\x12_reporting_capableB\x0f\n\r_budget_scopeB\x10\n\x0e_period_budgetB\x10\n\x0e_budget_periodB\x0f\n\r_max_data_ageB\x0b\n\t_max_hops\"\xb0\x01\n\nJsonWebKey\x12\x10\n\x03kid\x18\x01 \x01(\tR\x03kid\x12\x10\n\x03kty\x18\x02 \x01(\tR\x03kty\x12\x10\n\x03\x63rv\x18\x03 \x01(\tR\x03\x63rv\x12\x10\n\x03use\x18\x04 \x01(\tR\x03use\x12\x10\n\x03\x61lg\x18\x05 \x01(\tR\x03\x61lg\x12\x0c\n\x01x\x18\x06 \x01(\tR\x01x\x12\x1d\n\nnot_before\x18\x07 \x01(\tR\tnotBefore\x12\x1b\n\tnot_after\x18\x08 \x01(\tR\x08notAfter\"\xdf\r\n\x11WellKnownManifest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12!\n\x04role\x18\x02 \x01(\x0e\x32\r.ramp.v1.RoleR\x04role\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x1d\n\x07\x63ontact\x18\x04 \x01(\tH\x00R\x07\x63ontact\x88\x01\x01\x12\x34\n\x0bpublic_keys\x18\x05 \x03(\x0b\x32\x13.ramp.v1.JsonWebKeyR\npublicKeys\x12.\n\x10invalidation_url\x18\x06 \x01(\tH\x01R\x0finvalidationUrl\x88\x01\x01\x12\x39\n\texchanges\x18\x07 \x03(\x0b\x32\x1b.ramp.v1.AuthorizedExchangeR\texchanges\x12N\n\x14\x63\x61talog_contributors\x18\x08 \x03(\x0b\x32\x1b.ramp.v1.CatalogContributorR\x13\x63\x61talogContributors\x12\x17\n\x04name\x18\t \x01(\tH\x02R\x04name\x88\x01\x01\x12\x1f\n\x08operator\x18\n \x01(\tH\x03R\x08operator\x88\x01\x01\x12,\n\x0foperator_domain\x18\x0b \x01(\tH\x04R\x0eoperatorDomain\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x0c \x01(\tH\x05R\x08\x65ndpoint\x88\x01\x01\x12,\n\x0fhealth_endpoint\x18\r \x01(\tH\x06R\x0ehealthEndpoint\x88\x01\x01\x12.\n\x10\x63\x61talog_endpoint\x18\x0e \x01(\tH\x07R\x0f\x63\x61talogEndpoint\x88\x01\x01\x12>\n\x1bprotocol_versions_supported\x18\x10 \x03(\tR\x19protocolVersionsSupported\x12O\n\x18pricing_models_supported\x18\x11 \x03(\x0e\x32\x15.ramp.v1.PricingModelR\x16pricingModelsSupported\x12U\n\x1a\x64\x65livery_methods_supported\x18\x12 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x18\x64\x65liveryMethodsSupported\x12\x34\n\x16hash_methods_supported\x18\x13 \x03(\tR\x14hashMethodsSupported\x12-\n\x12\x61\x63\x63\x65pted_verifiers\x18\x14 \x03(\tR\x11\x61\x63\x63\x65ptedVerifiers\x12 \n\tterms_uri\x18\x15 \x01(\tH\x08R\x08termsUri\x88\x01\x01\x12$\n\x0bprivacy_uri\x18\x16 \x01(\tH\tR\nprivacyUri\x88\x01\x01\x12-\n\x12supported_profiles\x18\x17 \x03(\tR\x11supportedProfiles\x12I\n\x16supported_auth_methods\x18\x18 \x03(\x0e\x32\x13.ramp.v1.AuthMethodR\x14supportedAuthMethods\x12$\n\x0boidc_issuer\x18\x19 \x01(\tH\nR\noidcIssuer\x88\x01\x01\x12\x33\n\x13gnap_grant_endpoint\x18\x1a \x01(\tH\x0bR\x11gnapGrantEndpoint\x88\x01\x01\x12(\n\rbase_currency\x18\x1b \x01(\tH\x0cR\x0c\x62\x61seCurrency\x88\x01\x01\x12\x37\n\x15max_intermediary_hops\x18\x1c \x01(\x05H\rR\x13maxIntermediaryHops\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:x\xbaHu\x1as\n\"well_known_manifest.role_specified\x12!role must not be ROLE_UNSPECIFIED\x1a*this.role != ramp.v1.Role.ROLE_UNSPECIFIEDB\n\n\x08_contactB\x13\n\x11_invalidation_urlB\x07\n\x05_nameB\x0b\n\t_operatorB\x12\n\x10_operator_domainB\x0b\n\t_endpointB\x12\n\x10_health_endpointB\x13\n\x11_catalog_endpointB\x0c\n\n_terms_uriB\x0e\n\x0c_privacy_uriB\x0e\n\x0c_oidc_issuerB\x16\n\x14_gnap_grant_endpointB\x10\n\x0e_base_currencyB\x18\n\x16_max_intermediary_hops\"`\n\x13KeyInvalidationList\x12/\n\x05\x61s_of\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04\x61sOf\x12\x18\n\x07revoked\x18\x02 \x03(\tR\x07revoked\"P\n\x12\x43\x61talogContributor\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\"\n\x0crelationship\x18\x02 \x01(\tR\x0crelationship\"\xa0\x03\n\x12\x41uthorizedExchange\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12\x41\n\x0crelationship\x18\x03 \x01(\x0e\x32\x1d.ramp.v1.ProviderRelationshipR\x0crelationship\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\xc4\x01\xbaH\xc0\x01\x1a\xbd\x01\n*authorized_exchange.relationship_specified\x12:relationship must not be PROVIDER_RELATIONSHIP_UNSPECIFIED\x1aSthis.relationship != ramp.v1.ProviderRelationship.PROVIDER_RELATIONSHIP_UNSPECIFIED\"\xe8\x06\n\x0cRAMPResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12%\n\x0etransaction_id\x18\x04 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x05 \x01(\tR\tbillingId\x12\x1a\n\x08\x65xchange\x18\x06 \x01(\tR\x08\x65xchange\x12*\n\x0eresource_title\x18\x07 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\r \x01(\tH\x03R\x11retrievalEndpoint\x88\x01\x01\x12\x33\n\x13\x61gent_identity_hash\x18\x0e \x01(\tH\x04R\x11\x61gentIdentityHash\x88\x01\x01\x12\x31\n\nbroker_fee\x18\x0c \x01(\x0b\x32\r.ramp.v1.CostH\x05R\tbrokerFee\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x10 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x06R\rabsenceReason\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_resource_titleB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x16\n\x14_agent_identity_hashB\r\n\x0b_broker_feeB\x11\n\x0f_absence_reason\"\xab\x05\n\x0e\x44isputeRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12.\n\x06reason\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeReasonR\x06reason\x12%\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x37\n\x15received_content_hash\x18\x07 \x01(\tH\x01R\x13receivedContentHash\x88\x01\x01\x12\x35\n\x14received_hash_method\x18\x08 \x01(\tH\x02R\x12receivedHashMethod\x88\x01\x01\x12\x1b\n\treport_id\x18\t \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\x99\x01\xbaH\x95\x01\x1a\x92\x01\n dispute_request.reason_specified\x12-reason must not be DISPUTE_REASON_UNSPECIFIED\x1a?this.reason != ramp.v1.DisputeReason.DISPUTE_REASON_UNSPECIFIEDB\x0e\n\x0c_descriptionB\x18\n\x16_received_content_hashB\x17\n\x15_received_hash_method\"\x8d\x03\n\x0f\x44isputeResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\"\n\ndispute_id\x18\x02 \x01(\tH\x00R\tdisputeId\x88\x01\x01\x12Q\n\x14\x65stimated_resolution\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01R\x13\x65stimatedResolution\x88\x01\x01\x12.\n\x06status\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeStatusR\x06status\x12<\n\nresolution\x18\x06 \x01(\x0e\x32\x17.ramp.v1.ResolutionTypeH\x02R\nresolution\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_dispute_idB\x17\n\x15_estimated_resolutionB\r\n\x0b_resolution\"\xc3\x01\n\x19\x44omainVerificationRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12 \n\tcaller_id\x18\x03 \x01(\tH\x00R\x08\x63\x61llerId\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0c\n\n_caller_id\"\xf9\x01\n\x1b\x44omainVerificationChallenge\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12)\n\x10verification_url\x18\x04 \x01(\tR\x0fverificationUrl\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\x91\x02\n\x1e\x44omainVerificationConfirmation\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12$\n\x0bsigning_key\x18\x04 \x01(\tH\x00R\nsigningKey\x88\x01\x01\x12\x1e\n\x08\x63\x64n_type\x18\x05 \x01(\tH\x01R\x07\x63\x64nType\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_signing_keyB\x0b\n\t_cdn_type\"\xf3\x01\n\x18\x44omainVerificationResult\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x06key_id\x18\x02 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12@\n\x0bvalid_until\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nvalidUntil\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_key_idB\x0e\n\x0c_valid_until\"\x88\x06\n\x0b\x45rrorDetail\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12>\n\x08metadata\x18\x03 \x03(\x0b\x32\".ramp.v1.ErrorDetail.MetadataEntryR\x08metadata\x12K\n\x12transaction_denial\x18\n \x01(\x0b\x32\x1a.ramp.v1.TransactionDenialH\x00R\x11transactionDenial\x12H\n\x11\x63\x61talog_rejection\x18\x0b \x01(\x0b\x32\x19.ramp.v1.CatalogRejectionH\x00R\x10\x63\x61talogRejection\x12Q\n\x14registration_failure\x18\x0c \x01(\x0b\x32\x1c.ramp.v1.RegistrationFailureH\x00R\x13registrationFailure\x12\x42\n\x0f\x64ispute_failure\x18\r \x01(\x0b\x32\x17.ramp.v1.DisputeFailureH\x00R\x0e\x64isputeFailure\x12\x64\n\x1b\x64omain_verification_failure\x18\x0e \x01(\x0b\x32\".ramp.v1.DomainVerificationFailureH\x00R\x19\x64omainVerificationFailure\x12U\n\x16retrieval_auth_failure\x18\x0f \x01(\x0b\x32\x1d.ramp.v1.RetrievalAuthFailureH\x00R\x14retrievalAuthFailure\x12U\n\x16usage_report_rejection\x18\x10 \x01(\x0b\x32\x1d.ramp.v1.UsageReportRejectionH\x00R\x14usageReportRejection\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06reason\"\xcc\x01\n\x11TransactionDenial\x12\x39\n\x06reason\x18\x01 \x01(\x0e\x32\x15.ramp.v1.DenialReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12O\n\x16restriction_mismatches\x18\x02 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x42\x0b\n\t_offer_id\"~\n\x10\x43\x61talogRejection\x12\x43\n\x06reason\x18\x01 \x01(\x0e\x32\x1f.ramp.v1.CatalogRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12%\n\x0erejected_paths\x18\x02 \x03(\tR\rrejectedPaths\"]\n\x13RegistrationFailure\x12\x46\n\x06reason\x18\x01 \x01(\x0e\x32\".ramp.v1.RegistrationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"S\n\x0e\x44isputeFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32\x1d.ramp.v1.DisputeFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"i\n\x19\x44omainVerificationFailure\x12L\n\x06reason\x18\x01 \x01(\x0e\x32(.ramp.v1.DomainVerificationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14RetrievalAuthFailure\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.RetrievalAuthFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14UsageReportRejection\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.UsageReportRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason*\xb6\x01\n\x0f\x44iscoveryMethod\x12 \n\x1c\x44ISCOVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x44ISCOVERY_METHOD_EXCHANGE\x10\x01\x12\x1b\n\x17\x44ISCOVERY_METHOD_SEARCH\x10\x02\x12#\n\x1f\x44ISCOVERY_METHOD_RECOMMENDATION\x10\x03\x12 \n\x1c\x44ISCOVERY_METHOD_SYNDICATION\x10\x04*\xf9\x02\n\x12OfferAbsenceReason\x12$\n OFFER_ABSENCE_REASON_UNSPECIFIED\x10\x00\x12\'\n#OFFER_ABSENCE_REASON_NOT_IN_CATALOG\x10\x01\x12(\n$OFFER_ABSENCE_REASON_CONTENT_BLOCKED\x10\x02\x12-\n)OFFER_ABSENCE_REASON_RESTRICTION_FILTERED\x10\x03\x12\x30\n,OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE\x10\x04\x12\'\n#OFFER_ABSENCE_REASON_NOT_AUTHORIZED\x10\x05\x12+\n\'OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT\x10\x06\x12\x33\n/OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION\x10\x07*q\n\rTermSemantics\x12\x1e\n\x1aTERM_SEMANTICS_UNSPECIFIED\x10\x00\x12\x1d\n\x19TERM_SEMANTICS_ENUMERATED\x10\x01\x12!\n\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xb2\x04\n\x0fRestrictionKind\x12 \n\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xac\x02\n\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x8c\x02\x92\xb5\x18\x03\x61ll\x92\xb5\x18\x06\x61i-all\x92\xb5\x18\x08\x61i-train\x92\xb5\x18\x08\x61i-input\x92\xb5\x18\x08\x61i-index\x92\xb5\x18\x06search\x92\xb5\x18\x05\x63rawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\ncommercial\x92\xb5\x18\x0b\x61\x64vertising\x92\xb5\x18\teditorial\x92\xb5\x18\x08research\x92\xb5\x18\treproduce\x92\xb5\x18\ndistribute\x92\xb5\x18\x06modify\x92\xb5\x18\x07\x64isplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\x0bmanufacture\x92\xb5\x18\x04sell\x12\x32\n\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a\x12\x92\xb5\x18\x01*\x92\xb5\x18\x02\x45U\x92\xb5\x18\x03\x45\x45\x41\x12~\n\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1a^\x92\xb5\x18\nindividual\x92\xb5\x18\x08\x61\x63\x61\x64\x65mic\x92\xb5\x18\nnon_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\x0b\x62roadcaster\x92\xb5\x18\x11\x63ommercial_entity\x12\x1a\n\x16RESTRICTION_KIND_OTHER\x10\x04*\x8e\x01\n\x0bQuotaWindow\x12\x1c\n\x18QUOTA_WINDOW_UNSPECIFIED\x10\x00\x12\x17\n\x13QUOTA_WINDOW_HOURLY\x10\x01\x12\x16\n\x12QUOTA_WINDOW_DAILY\x10\x02\x12\x18\n\x14QUOTA_WINDOW_MONTHLY\x10\x03\x12\x16\n\x12QUOTA_WINDOW_TOTAL\x10\x04*\xf2\x01\n\x0eObligationKind\x12\x1f\n\x1bOBLIGATION_KIND_UNSPECIFIED\x10\x00\x12\x1f\n\x1bOBLIGATION_KIND_ATTRIBUTION\x10\x01\x12 \n\x1cOBLIGATION_KIND_CONTRIBUTION\x10\x02\x12\x1f\n\x1bOBLIGATION_KIND_SHARE_ALIKE\x10\x03\x12$\n OBLIGATION_KIND_NETWORK_COPYLEFT\x10\x04\x12\x1a\n\x16OBLIGATION_KIND_NOTICE\x10\x05\x12\x19\n\x15OBLIGATION_KIND_OTHER\x10\x06*\xcf\x01\n\x11ObligationTrigger\x12\"\n\x1eOBLIGATION_TRIGGER_UNSPECIFIED\x10\x00\x12\x1d\n\x19OBLIGATION_TRIGGER_ON_USE\x10\x01\x12&\n\"OBLIGATION_TRIGGER_ON_DISTRIBUTION\x10\x02\x12)\n%OBLIGATION_TRIGGER_ON_NETWORK_SERVICE\x10\x03\x12$\n OBLIGATION_TRIGGER_ON_DERIVATIVE\x10\x04*y\n\x0cPricingModel\x12\x1d\n\x19PRICING_MODEL_UNSPECIFIED\x10\x00\x12\x16\n\x12PRICING_MODEL_FREE\x10\x01\x12\x1a\n\x16PRICING_MODEL_PER_UNIT\x10\x02\x12\x16\n\x12PRICING_MODEL_FLAT\x10\x03*u\n\x0fPricingMetering\x12\x1b\n\x17PRICING_METERING_ONLINE\x10\x00\x12\x19\n\x15PRICING_METERING_NONE\x10\x01\x12*\n&PRICING_METERING_OFFLINE_SELF_REPORTED\x10\x02*\x8e\x01\n\x0e\x44\x65liveryMethod\x12\x1f\n\x1b\x44\x45LIVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x44\x45LIVERY_METHOD_DIRECT\x10\x01\x12 \n\x1c\x44\x45LIVERY_METHOD_INSTRUCTIONS\x10\x02\x12\x1d\n\x19\x44\x45LIVERY_METHOD_STREAMING\x10\x03*\xbf\x01\n\rRequesterType\x12\x1e\n\x1aREQUESTER_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14REQUESTER_TYPE_AGENT\x10\x01\x12\x1d\n\x19REQUESTER_TYPE_HUMAN_TOOL\x10\x02\x12\x1a\n\x16REQUESTER_TYPE_SERVICE\x10\x03\x12\x1c\n\x18REQUESTER_TYPE_DELEGATED\x10\x04\x12\x1b\n\x17REQUESTER_TYPE_RESEARCH\x10\x05*\x8a\x01\n\nC2PAStatus\x12\x1b\n\x17\x43\x32PA_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x43\x32PA_STATUS_TRUSTED\x10\x01\x12\x15\n\x11\x43\x32PA_STATUS_VALID\x10\x02\x12\x17\n\x13\x43\x32PA_STATUS_INVALID\x10\x03\x12\x16\n\x12\x43\x32PA_STATUS_ABSENT\x10\x04*\x98\x01\n\x12ResourceMutability\x12#\n\x1fRESOURCE_MUTABILITY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aRESOURCE_MUTABILITY_STATIC\x10\x01\x12\x1f\n\x1bRESOURCE_MUTABILITY_DYNAMIC\x10\x02\x12\x1c\n\x18RESOURCE_MUTABILITY_LIVE\x10\x03*\xef\x05\n\x0c\x44\x65nialReason\x12\x1d\n\x19\x44\x45NIAL_REASON_UNSPECIFIED\x10\x00\x12&\n\"DENIAL_REASON_BILLING_REF_INACTIVE\x10\x01\x12&\n\"DENIAL_REASON_INSUFFICIENT_BALANCE\x10\x02\x12\x1e\n\x1a\x44\x45NIAL_REASON_RATE_LIMITED\x10\x03\x12%\n!DENIAL_REASON_CONTENT_UNAVAILABLE\x10\x04\x12+\n\'DENIAL_REASON_RESTRICTION_NOT_SATISFIED\x10\x05\x12#\n\x1f\x44\x45NIAL_REASON_REPORTING_OVERDUE\x10\x06\x12\x1f\n\x1b\x44\x45NIAL_REASON_OFFER_EXPIRED\x10\x07\x12#\n\x1f\x44\x45NIAL_REASON_SIGNATURE_INVALID\x10\x08\x12 \n\x1c\x44\x45NIAL_REASON_QUOTA_EXCEEDED\x10\t\x12$\n DENIAL_REASON_DELEGATION_INVALID\x10\n\x12$\n DENIAL_REASON_SCOPE_INSUFFICIENT\x10\x0b\x12%\n!DENIAL_REASON_ENTITLEMENT_MISSING\x10\x0c\x12\'\n#DENIAL_REASON_ENTITLEMENT_MALFORMED\x10\r\x12%\n!DENIAL_REASON_ENTITLEMENT_EXPIRED\x10\x0e\x12)\n%DENIAL_REASON_ENTITLEMENT_WRONG_BUYER\x10\x0f\x12%\n!DENIAL_REASON_SUBSCRIPTION_LAPSED\x10\x10\x12)\n%DENIAL_REASON_ENTITLEMENT_NOT_GRANTED\x10\x11\x12/\n+DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION\x10\x12*\x8c\x02\n\x0fIngestionSource\x12 \n\x1cINGESTION_SOURCE_UNSPECIFIED\x10\x00\x12!\n\x1dINGESTION_SOURCE_RAMP_SITEMAP\x10\x01\x12\x18\n\x14INGESTION_SOURCE_RSL\x10\x02\x12\x1c\n\x18INGESTION_SOURCE_SITEMAP\x10\x03\x12\x1f\n\x1bINGESTION_SOURCE_HTML_CRAWL\x10\x04\x12\x1c\n\x18INGESTION_SOURCE_CMS_API\x10\x05\x12\x1b\n\x17INGESTION_SOURCE_MANUAL\x10\x06\x12 \n\x1cINGESTION_SOURCE_CATALOG_API\x10\x07*d\n\x0e\x43itationFormat\x12\x18\n\x14\x43ITATION_FORMAT_LINK\x10\x00\x12\x1c\n\x18\x43ITATION_FORMAT_FOOTNOTE\x10\x01\x12\x1a\n\x16\x43ITATION_FORMAT_INLINE\x10\x02*d\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x0e\n\nROLE_AGENT\x10\x01\x12\x11\n\rROLE_EXCHANGE\x10\x02\x12\x0f\n\x0bROLE_BROKER\x10\x03\x12\x12\n\x0eROLE_PUBLISHER\x10\x04*\x83\x01\n\x14ProviderRelationship\x12%\n!PROVIDER_RELATIONSHIP_UNSPECIFIED\x10\x00\x12 \n\x1cPROVIDER_RELATIONSHIP_DIRECT\x10\x01\x12\"\n\x1ePROVIDER_RELATIONSHIP_RESELLER\x10\x02*\x95\x01\n\nAuthMethod\x12\x1b\n\x17\x41UTH_METHOD_UNSPECIFIED\x10\x00\x12\x14\n\x10\x41UTH_METHOD_GNAP\x10\x01\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_DPOP\x10\x02\x12\x1c\n\x18\x41UTH_METHOD_OAUTH_BEARER\x10\x03\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_MTLS\x10\x04*\xea\x01\n\rDisputeReason\x12\x1e\n\x1a\x44ISPUTE_REASON_UNSPECIFIED\x10\x00\x12#\n\x1f\x44ISPUTE_REASON_CONTENT_MISMATCH\x10\x01\x12\"\n\x1e\x44ISPUTE_REASON_DELIVERY_FAILED\x10\x02\x12 \n\x1c\x44ISPUTE_REASON_WRONG_CONTENT\x10\x03\x12\'\n#DISPUTE_REASON_EXPIRED_BEFORE_FETCH\x10\x04\x12%\n!DISPUTE_REASON_INCOMPLETE_CONTENT\x10\x05*\xbe\x02\n\rDisputeStatus\x12\x1e\n\x1a\x44ISPUTE_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14\x44ISPUTE_STATUS_FILED\x10\x01\x12 \n\x1c\x44ISPUTE_STATUS_AUTO_RESOLVED\x10\x02\x12\"\n\x1e\x44ISPUTE_STATUS_EVIDENCE_NEEDED\x10\x03\x12\x1f\n\x1b\x44ISPUTE_STATUS_UNDER_REVIEW\x10\x04\x12\x1c\n\x18\x44ISPUTE_STATUS_ESCALATED\x10\x05\x12\x1b\n\x17\x44ISPUTE_STATUS_RESOLVED\x10\x06\x12\x1b\n\x17\x44ISPUTE_STATUS_APPEALED\x10\x07\x12\x1a\n\x16\x44ISPUTE_STATUS_SETTLED\x10\x08\x12\x18\n\x14\x44ISPUTE_STATUS_FINAL\x10\t*\xae\x01\n\x0eResolutionType\x12\x1f\n\x1bRESOLUTION_TYPE_UNSPECIFIED\x10\x00\x12\x1a\n\x16RESOLUTION_TYPE_CREDIT\x10\x01\x12\x1e\n\x1aRESOLUTION_TYPE_REDELIVERY\x10\x02\x12\x1c\n\x18RESOLUTION_TYPE_REJECTED\x10\x03\x12!\n\x1dRESOLUTION_TYPE_INVESTIGATION\x10\x04*\x95\x03\n\x16\x43\x61talogRejectionReason\x12(\n$CATALOG_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x34\n0CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR\x10\x01\x12,\n(CATALOG_REJECTION_REASON_TENANT_MISMATCH\x10\x02\x12\x30\n,CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED\x10\x03\x12.\n*CATALOG_REJECTION_REASON_SIGNATURE_INVALID\x10\x04\x12,\n(CATALOG_REJECTION_REASON_MALFORMED_ENTRY\x10\x05\x12\x30\n,CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN\x10\x06\x12+\n\'CATALOG_REJECTION_REASON_QUOTA_EXCEEDED\x10\x07*\xc1\x02\n\x19RegistrationFailureReason\x12+\n\'REGISTRATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x33\n/REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED\x10\x01\x12+\n\'REGISTRATION_FAILURE_REASON_INVALID_KEY\x10\x02\x12\x31\n-REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID\x10\x03\x12\x32\n.REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED\x10\x04\x12.\n*REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED\x10\x05*\x95\x02\n\x14\x44isputeFailureReason\x12&\n\"DISPUTE_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x30\n,DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'DISPUTE_FAILURE_REASON_REPORT_NOT_FILED\x10\x02\x12)\n%DISPUTE_FAILURE_REASON_WINDOW_EXPIRED\x10\x03\x12$\n DISPUTE_FAILURE_REASON_DUPLICATE\x10\x04\x12%\n!DISPUTE_FAILURE_REASON_INELIGIBLE\x10\x05*\xbb\x03\n\x1f\x44omainVerificationFailureReason\x12\x32\n.DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12:\n6DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND\x10\x01\x12\x39\n5DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH\x10\x02\x12\x38\n4DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED\x10\x03\x12\x33\n/DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED\x10\x04\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED\x10\x05\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED\x10\x06*\xd9\x05\n\x1aRetrievalAuthFailureReason\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED\x10\x00\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED\x10\x01\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING\x10\x02\x12\x34\n0RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING\x10\x03\x12\x38\n4RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH\x10\x04\x12\x33\n/RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING\x10\x05\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING\x10\x06\x12\x30\n,RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH\x10\x07\x12\x35\n1RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH\x10\x08\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING\x10\t\x12\x36\n2RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING\x10\n\x12/\n+RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED\x10\x0b\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID\x10\x0c*\xcb\x02\n\x1aUsageReportRejectionReason\x12-\n)USAGE_REPORT_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x37\n3USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'USAGE_REPORT_REJECTION_REASON_DUPLICATE\x10\x02\x12\x30\n,USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED\x10\x03\x12\x39\n5USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS\x10\x04\x12+\n\'USAGE_REPORT_REJECTION_REASON_MALFORMED\x10\x05\x32\x86\x04\n\x0f\x45xchangeService\x12\x46\n\x11\x44iscoverResources\x12\x16.ramp.v1.ResourceQuery\x1a\x19.ramp.v1.ResourceResponse\x12O\n\x12\x45xecuteTransaction\x12\x1b.ramp.v1.TransactionRequest\x1a\x1c.ramp.v1.TransactionResponse\x12\x41\n\x0bReportUsage\x12\x14.ramp.v1.UsageReport\x1a\x1c.ramp.v1.UsageReportResponse\x12G\n\x12\x44isputeTransaction\x12\x17.ramp.v1.DisputeRequest\x1a\x18.ramp.v1.DisputeResponse\x12\x65\n\x19RequestDomainVerification\x12\".ramp.v1.DomainVerificationRequest\x1a$.ramp.v1.DomainVerificationChallenge\x12g\n\x19\x43onfirmDomainVerification\x12\'.ramp.v1.DomainVerificationConfirmation\x1a!.ramp.v1.DomainVerificationResult2\x89\x02\n\x0e\x43\x61talogService\x12N\n\rPushResources\x12\x1d.ramp.v1.PushResourcesRequest\x1a\x1e.ramp.v1.PushResourcesResponse\x12T\n\x0fRemoveResources\x12\x1f.ramp.v1.RemoveResourcesRequest\x1a .ramp.v1.RemoveResourcesResponse\x12Q\n\x0eRefreshCatalog\x12\x1e.ramp.v1.RefreshCatalogRequest\x1a\x1f.ramp.v1.RefreshCatalogResponse2G\n\rBrokerService\x12\x36\n\x07Resolve\x12\x14.ramp.v1.RAMPRequest\x1a\x15.ramp.v1.RAMPResponseB\x8e\x01\n\x0b\x63om.ramp.v1B\tRampProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12ramp/v1/ramp.proto\x12\x07ramp.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x13ramp/v1/vocab.proto\"\xb5\x02\n\x15\x41\x63\x63\x65ptableRestriction\x12,\n\x04\x61xis\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04\x61xis\x12\xed\x01\n\x06values\x18\x02 \x03(\tB\xd4\x01\xbaH\xd0\x01\x92\x01\x02\x10@\xba\x01\xc7\x01\n$acceptable_restriction.values.format\x12Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\x06values\"\xa1\x03\n\rResourceQuery\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12:\n\x08\x64\x65\x61\x64line\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x08\x64\x65\x61\x64line\x88\x01\x01\x12-\n\x12supported_profiles\x18\x07 \x03(\tR\x11supportedProfiles\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_deadline\"\xb9\x02\n\x10ResourceResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x65xchange\x18\x03 \x01(\tR\x08\x65xchange\x12&\n\x06offers\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12\x36\n\x0coffer_groups\x18\x05 \x03(\x0b\x32\x13.ramp.v1.OfferGroupR\x0bofferGroups\x12:\n\nrate_limit\x18\x06 \x01(\x0b\x32\x16.ramp.v1.RateLimitInfoH\x00R\trateLimit\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_rate_limit\"\xcc\x02\n\nOfferGroup\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12&\n\x06offers\x18\x02 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12H\n\x10\x64iscovery_method\x18\x03 \x01(\x0e\x32\x18.ramp.v1.DiscoveryMethodH\x00R\x0f\x64iscoveryMethod\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x04 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x01R\rabsenceReason\x88\x01\x01\x12I\n\x13restriction_filters\x18\x05 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x12restrictionFiltersB\x13\n\x11_discovery_methodB\x11\n\x0f_absence_reason\"\xbd\x01\n\rRateLimitInfo\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x1c\n\tremaining\x18\x02 \x01(\x05R\tremaining\x12\x35\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07resetAt\x12\x36\n\x06window\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x42\t\n\x07_window\"\x97\x02\n\x15SubscriptionQuotaInfo\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1f\n\x0bquota_limit\x18\x02 \x01(\x05R\nquotaLimit\x12\x1d\n\nquota_used\x18\x03 \x01(\x05R\tquotaUsed\x12\'\n\x0fquota_remaining\x18\x04 \x01(\x05R\x0equotaRemaining\x12<\n\tresets_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x08resetsAt\x88\x01\x01\x12\x17\n\x04unit\x18\x06 \x01(\tH\x01R\x04unit\x88\x01\x01\x42\x0c\n\n_resets_atB\x07\n\x05_unit\"\xdb\x07\n\x05Offer\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12*\n\x07pricing\x18\x03 \x01(\x0b\x32\x10.ramp.v1.PricingR\x07pricing\x12@\n\x0f\x64\x65livery_method\x18\x04 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12?\n\treporting\x18\x05 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\treporting\x88\x01\x01\x12>\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12:\n\x08identity\x18\x07 \x01(\x0b\x32\x19.ramp.v1.ResourceIdentityH\x03R\x08identity\x88\x01\x01\x12\x1c\n\tsignature\x18\t \x01(\tR\tsignature\x12/\n\x13signature_algorithm\x18\n \x01(\tR\x12signatureAlgorithm\x12,\n\x0fsubscription_id\x18\x0b \x01(\tH\x04R\x0esubscriptionId\x88\x01\x01\x12%\n\x0eiab_categories\x18\r \x03(\tR\riabCategories\x12@\n\x0c\x61ttestations\x18\x0e \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12=\n\ndata_as_of\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\x08\x64\x61taAsOf\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12,\n\x08previews\x18\x12 \x03(\x0b\x32\x10.ramp.v1.PreviewR\x08previews\x12*\n\x05terms\x18\x13 \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x08\n\x06_titleB\x0c\n\n_reportingB\r\n\x0b_expires_atB\x0b\n\t_identityB\x12\n\x10_subscription_idB\r\n\x0b_data_as_of\"\xab\x07\n\x10ResourceIdentity\x12(\n\rcanonical_url\x18\x01 \x01(\tH\x00R\x0c\x63\x61nonicalUrl\x88\x01\x01\x12\x15\n\x03\x64oi\x18\x02 \x01(\tH\x01R\x03\x64oi\x88\x01\x01\x12 \n\tiptc_guid\x18\x03 \x01(\tH\x02R\x08iptcGuid\x88\x01\x01\x12\x17\n\x04isni\x18\x04 \x01(\tH\x03R\x04isni\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x05 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x06 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12L\n\x13resource_mutability\x18\x08 \x01(\x0e\x32\x1b.ramp.v1.ResourceMutabilityR\x12resourceMutability\x12(\n\rc2pa_manifest\x18\x07 \x01(\tH\x06R\x0c\x63\x32paManifest\x88\x01\x01\x12\x39\n\x0b\x63\x32pa_status\x18\t \x01(\x0e\x32\x13.ramp.v1.C2PAStatusH\x07R\nc2paStatus\x88\x01\x01\x12&\n\x0csoft_binding\x18\n \x01(\tH\x08R\x0bsoftBinding\x88\x01\x01\x12\x33\n\x13soft_binding_method\x18\x0b \x01(\tH\tR\x11softBindingMethod\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\xd1\x01\xbaH\xcd\x01\x1a\xca\x01\n/resource_identity.resource_mutability_specified\x12?resource_mutability must not be RESOURCE_MUTABILITY_UNSPECIFIED\x1aVthis.resource_mutability != ramp.v1.ResourceMutability.RESOURCE_MUTABILITY_UNSPECIFIEDB\x10\n\x0e_canonical_urlB\x06\n\x04_doiB\x0c\n\n_iptc_guidB\x07\n\x05_isniB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\x10\n\x0e_c2pa_manifestB\x0e\n\x0c_c2pa_statusB\x0f\n\r_soft_bindingB\x16\n\x14_soft_binding_method\"\xe1\x01\n\x13ResourceAttestation\x12\x1a\n\x08verifier\x18\x01 \x01(\tR\x08verifier\x12\x10\n\x03kid\x18\x02 \x01(\tR\x03kid\x12;\n\x0b\x61ttested_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nattestedAt\x12\x10\n\x03uri\x18\x04 \x01(\tR\x03uri\x12/\n\x06\x63laims\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63laims\x12\x1c\n\tsignature\x18\x06 \x01(\tR\tsignature\"\xd4\x04\n\x07License\x12\x15\n\x03uri\x18\x01 \x01(\tH\x00R\x03uri\x88\x01\x01\x12\x13\n\x02id\x18\x02 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x17\n\x04name\x18\x03 \x01(\tH\x02R\x04name\x88\x01\x01\x12!\n\timmutable\x18\x04 \x01(\x08H\x03R\timmutable\x88\x01\x01\x12\xad\x02\n\nuri_digest\x18\x05 \x01(\tB\x88\x02\xbaH\x84\x02\xba\x01\x80\x02\n\x19license.uri_digest.format\x12Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\x1a\x86\x01this == \'\' || this.matches(\'^sha256:[0-9a-f]{64}$\') || this.matches(\'^sha384:[0-9a-f]{96}$\') || this.matches(\'^sha512:[0-9a-f]{128}$\')H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n license.digest_required_with_uri\x12*uri_digest is required whenever uri is set\x1a\'this.uri == \'\' || this.uri_digest != \'\'B\x06\n\x04_uriB\x05\n\x03_idB\x07\n\x05_nameB\x0c\n\n_immutableB\r\n\x0b_uri_digest\"\xe4\x06\n\x0bRestriction\x12,\n\x04kind\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04kind\x12\xeb\x01\n\tpermitted\x18\x02 \x03(\tB\xcc\x01\xbaH\xc8\x01\x92\x01\x02\x10@\xba\x01\xbf\x01\n\x1crestriction.permitted.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\tpermitted\x12\xee\x01\n\nprohibited\x18\x03 \x03(\tB\xcd\x01\xbaH\xc9\x01\x92\x01\x02\x10@\xba\x01\xc0\x01\n\x1drestriction.prohibited.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\nprohibited\x12\x1a\n\x08\x61\x64visory\x18\x04 \x01(\x08R\x08\x61\x64visory:\xab\x02\xbaH\xa7\x02\x1a\x93\x01\n)restriction.permitted_prohibited_disjoint\x12\x36\x61 token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\x1a\x8e\x01\n\x1arestriction.kind_specified\x12-kind must not be RESTRICTION_KIND_UNSPECIFIED\x1a\x41this.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED\"\xe4\x04\n\x05Quota\x12\x81\x03\n\x06metric\x18\x01 \x01(\tB\xe8\x02\xbaH\xe5\x01r\x02\x18@\xba\x01\xdd\x01\n\x13quota.metric.format\x12\x63metric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a\x61this != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\x0bimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x0cinput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06\x63opies\x8a\xb5\x18\x05seats\x9a\xb5\x18\x0cquotametricsR\x06metric\x12\x1d\n\x05limit\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x05limit\x12,\n\x06window\x18\x03 \x01(\x0e\x32\x14.ramp.v1.QuotaWindowR\x06window:\x89\x01\xbaH\x85\x01\x1a\x82\x01\n\x16quota.window_specified\x12+window must not be QUOTA_WINDOW_UNSPECIFIED\x1a;this.window != ramp.v1.QuotaWindow.QUOTA_WINDOW_UNSPECIFIED\"\xb0\x06\n\nObligation\x12+\n\x04kind\x18\x01 \x01(\x0e\x32\x17.ramp.v1.ObligationKindR\x04kind\x12\x34\n\x07trigger\x18\x02 \x01(\x0e\x32\x1a.ramp.v1.ObligationTriggerR\x07trigger\x12:\n\rscope_license\x18\x03 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x0cscopeLicense\x88\x01\x01\x12\x1b\n\x06\x64\x65tail\x18\x04 \x01(\tH\x01R\x06\x64\x65tail\x88\x01\x01:\xc8\x04\xbaH\xc4\x04\x1a\x95\x02\n-obligation.share_alike.requires_scope_license\x12\x44SHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))\x1a\x8a\x01\n\x19obligation.kind_specified\x12,kind must not be OBLIGATION_KIND_UNSPECIFIED\x1a?this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_UNSPECIFIED\x1a\x9c\x01\n\x1cobligation.trigger_specified\x12\x32trigger must not be OBLIGATION_TRIGGER_UNSPECIFIED\x1aHthis.trigger != ramp.v1.ObligationTrigger.OBLIGATION_TRIGGER_UNSPECIFIEDB\x10\n\x0e_scope_licenseB\t\n\x07_detail\"\xe6\x07\n\x0bLicenseTerm\x12/\n\x07license\x18\x01 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x07license\x88\x01\x01\x12\x34\n\tsemantics\x18\x02 \x01(\x0e\x32\x16.ramp.v1.TermSemanticsR\tsemantics\x12\x38\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x14.ramp.v1.RestrictionR\x0crestrictions\x12&\n\x06quotas\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.QuotaR\x06quotas\x12\x35\n\x0bobligations\x18\x05 \x03(\x0b\x32\x13.ramp.v1.ObligationR\x0bobligations\x12\x37\n\x07pricing\x18\x06 \x01(\x0b\x32\x10.ramp.v1.PricingB\x06\xbaH\x03\xc8\x01\x01H\x01R\x07pricing\x88\x01\x01\x12 \n\x06scopes\x18\x07 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\"\n\npart_label\x18\x08 \x01(\tH\x02R\tpartLabel\x88\x01\x01:\xb0\x04\xbaH\xac\x04\x1a\xe2\x01\n(license_term.reference_only.requires_uri\x12>REFERENCE_ONLY terms must carry a license with a non-empty uri\x1avthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\x1a\xa9\x01\n%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)\x1a\x98\x01\n license_term.semantics_specified\x12\x30semantics must not be TERM_SEMANTICS_UNSPECIFIED\x1a\x42this.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_UNSPECIFIEDB\n\n\x08_licenseB\n\n\x08_pricingB\r\n\x0b_part_label\"\xd7\x01\n\x07Preview\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n\nmedia_type\x18\x02 \x01(\tR\tmediaType\x12\x19\n\x05width\x18\x03 \x01(\x05H\x00R\x05width\x88\x01\x01\x12\x1b\n\x06height\x18\x04 \x01(\x05H\x01R\x06height\x88\x01\x01\x12\x1f\n\x08\x64uration\x18\x05 \x01(\x05H\x02R\x08\x64uration\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\tH\x03R\x04size\x88\x01\x01\x42\x08\n\x06_widthB\t\n\x07_heightB\x0b\n\t_durationB\x07\n\x05_size\"\x87\n\n\x07Pricing\x12+\n\x05model\x18\x01 \x01(\x0e\x32\x15.ramp.v1.PricingModelR\x05model\x12\x12\n\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x04 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x05 \x01(\x05H\x01R\x11\x65stimatedQuantity\x88\x01\x01\x12;\n\x17license_duration_months\x18\x07 \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\xc8\x03\n\x04unit\x18\x08 \x01(\tB\xae\x03\xbaH\xe9\x01r\x02\x18@\xba\x01\xe1\x01\n\x13pricing.unit.format\x12iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\x8a\xb5\x18\x07\x66\x65tches\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05\x63\x61lls\x8a\xb5\x18\x05pages\x8a\xb5\x18\x07seconds\x8a\xb5\x18\x07minutes\x8a\xb5\x18\x07records\x8a\xb5\x18\x07streams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\ncharacters\x8a\xb5\x18\x05\x62ytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-km\x9a\xb5\x18\x0cpricingunitsH\x03R\x04unit\x88\x01\x01\x12\x39\n\x08metering\x18\t \x01(\x0e\x32\x18.ramp.v1.PricingMeteringH\x04R\x08metering\x88\x01\x01:\xae\x03\xbaH\xaa\x03\x1a\x97\x01\n\x1epricing.per_unit.requires_unit\x12\'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\x1a\x86\x01\n\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0\x1a\x84\x01\n\x17pricing.model_specified\x12+model must not be PRICING_MODEL_UNSPECIFIED\x1a\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\texpiresAt\x88\x01\x01\x12.\n\x13\x61gent_identity_hash\x18\n \x01(\tR\x11\x61gentIdentityHash\x12\x32\n\x12retrieval_endpoint\x18\x12 \x01(\tH\x06R\x11retrievalEndpoint\x88\x01\x01\x12,\n\x0fsubscription_id\x18\x0c \x01(\tH\x07R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x10 \x01(\x0b\x32\r.ramp.v1.CostH\x08R\x15subscriptionUnitValue\x88\x01\x01\x12\x34\n\x05items\x18\r \x03(\x0b\x32\x1e.ramp.v1.TransactionResultItemR\x05items\x12\x31\n\ntotal_cost\x18\x0e \x01(\x0b\x32\r.ramp.v1.CostH\tR\ttotalCost\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_transaction_idB\r\n\x0b_billing_idB\x11\n\x0f_resource_titleB\x07\n\x05_costB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\r\n\x0b_total_cost\"\xf3\x06\n\x15TransactionResultItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12%\n\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x03 \x01(\tR\tbillingId\x12*\n\x0eresource_title\x18\x04 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x05 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12,\n\x0fsubscription_id\x18\x06 \x01(\tH\x01R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x0b \x01(\x0b\x32\r.ramp.v1.CostH\x02R\x15subscriptionUnitValue\x88\x01\x01\x12?\n\rdenial_reason\x18\x07 \x01(\x0e\x32\x15.ramp.v1.DenialReasonH\x03R\x0c\x64\x65nialReason\x88\x01\x01\x12O\n\x16restriction_mismatches\x18\r \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12>\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\x0c \x01(\tH\x05R\x11retrievalEndpoint\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x06R\x13reportingObligation\x88\x01\x01\x42\x11\n\x0f_resource_titleB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\x10\n\x0e_denial_reasonB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x17\n\x15_reporting_obligation\"j\n\x04\x43ost\x12\x16\n\x06\x61mount\x18\x01 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x02 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x03 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x42\x0c\n\n_unit_cost\"\xe2\x01\n\x14PushResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x30\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x16.ramp.v1.ResourceEntryR\x07\x65ntries\x12\x1b\n\tcaller_id\x18\x04 \x01(\tR\x08\x63\x61llerId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xb3\x06\n\rResourceEntry\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\"\n\ncontent_id\x18\x03 \x01(\tH\x00R\tcontentId\x88\x01\x01\x12\x19\n\x05title\x18\x04 \x01(\tH\x01R\x05title\x88\x01\x01\x12\"\n\nword_count\x18\x05 \x01(\x05H\x02R\twordCount\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x06 \x01(\x05H\x03R\x11\x65stimatedQuantity\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x07 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x08 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12\x35\n\x06source\x18\t \x01(\x0e\x32\x18.ramp.v1.IngestionSourceH\x06R\x06source\x88\x01\x01\x12\x30\n\x11provenance_source\x18\n \x01(\tH\x07R\x10provenanceSource\x88\x01\x01\x12R\n\x14provenance_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x08R\x13provenanceTimestamp\x88\x01\x01\x12@\n\x0c\x61ttestations\x18\x0c \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12*\n\x05terms\x18\r \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_content_idB\x08\n\x06_titleB\r\n\x0b_word_countB\x15\n\x13_estimated_quantityB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\t\n\x07_sourceB\x14\n\x12_provenance_sourceB\x17\n\x15_provenance_timestamp\"\xcb\x01\n\x15PushResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x05R\x08\x61\x63\x63\x65pted\x12\x1a\n\x08rejected\x18\x03 \x01(\x05R\x08rejected\x12\x1a\n\x08warnings\x18\x04 \x03(\tR\x08warnings\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"]\n\x16RemoveResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\"E\n\x17RemoveResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07removed\x18\x02 \x01(\x05R\x07removed\"F\n\x15RefreshCatalogRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\"D\n\x16RefreshCatalogResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07started\x18\x02 \x01(\x08R\x07started\"\x99\x02\n\x13ReportingObligation\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\x12\x36\n\x06window\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x03 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12\'\n\x0frequired_fields\x18\x04 \x03(\tR\x0erequiredFields\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_windowB\x0b\n\t_endpoint\"\xa0\x03\n\x0bUsageReport\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12$\n\x05usage\x18\x05 \x01(\x0b\x32\x0e.ramp.v1.UsageR\x05usage\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1f\n\x08\x65xchange\x18\x08 \x01(\tH\x00R\x08\x65xchange\x88\x01\x01\x12+\n\x06\x61ssets\x18\t \x03(\x0b\x32\x13.ramp.v1.UsageAssetR\x06\x61ssets\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_exchange\"\xd1\x01\n\x11\x41ttributionDetail\x12(\n\rdisplayed_url\x18\x01 \x01(\tH\x00R\x0c\x64isplayedUrl\x88\x01\x01\x12\x34\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x17.ramp.v1.CitationFormatH\x01R\x06\x66ormat\x88\x01\x01\x12+\n\x0fvisible_to_user\x18\x03 \x01(\x08H\x02R\rvisibleToUser\x88\x01\x01\x42\x10\n\x0e_displayed_urlB\t\n\x07_formatB\x12\n\x10_visible_to_user\"\xf0\x04\n\x05Usage\x12\x1a\n\x08\x66unction\x18\x01 \x03(\tR\x08\x66unction\x12\x14\n\x05subfn\x18\x02 \x03(\tR\x05subfn\x12+\n\x11\x63onsumed_quantity\x18\x03 \x01(\x05R\x10\x63onsumedQuantity\x12/\n\x11\x64isplayed_to_user\x18\x04 \x01(\x08H\x00R\x0f\x64isplayedToUser\x88\x01\x01\x12\x30\n\x11\x63itation_included\x18\x05 \x01(\x08H\x01R\x10\x63itationIncluded\x88\x01\x01\x12<\n\x0b\x61ttribution\x18\x06 \x03(\x0b\x32\x1a.ramp.v1.AttributionDetailR\x0b\x61ttribution\x12\xa8\x02\n\rconsumed_unit\x18\x08 \x01(\tB\xfd\x01\xbaH\xf9\x01r\x02\x18@\xba\x01\xf1\x01\n\x1ausage.consumed_unit.format\x12rconsumed_unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')H\x02R\x0c\x63onsumedUnit\x88\x01\x01\x42\x14\n\x12_displayed_to_userB\x14\n\x12_citation_includedB\x10\n\x0e_consumed_unit\"v\n\nUsageAsset\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\"\n\npackage_id\x18\x03 \x01(\tH\x01R\tpackageId\x88\x01\x01\x42\x08\n\x06_titleB\r\n\x0b_package_id\"\x92\x01\n\x13UsageReportResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\treport_id\x18\x03 \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xa7\x04\n\x0bRAMPRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12\x42\n\x0b\x63onstraints\x18\x04 \x01(\x0b\x32\x1b.ramp.v1.RequestConstraintsH\x00R\x0b\x63onstraints\x88\x01\x01\x12-\n\x12supported_profiles\x18\x05 \x03(\tR\x11supportedProfiles\x12\x19\n\x05query\x18\x06 \x01(\tH\x01R\x05query\x88\x01\x01\x12\x43\n\x0esearch_filters\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02R\rsearchFilters\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_constraintsB\x08\n\x06_queryB\x11\n\x0f_search_filters\"\xca\x05\n\x12RequestConstraints\x12\x1c\n\texchanges\x18\x01 \x03(\tR\texchanges\x12/\n\tmax_price\x18\x02 \x01(\x0b\x32\r.ramp.v1.CostH\x00R\x08maxPrice\x88\x01\x01\x12\'\n\rmax_unit_cost\x18\x03 \x01(\x01H\x01R\x0bmaxUnitCost\x88\x01\x01\x12H\n\x13\x64\x65livery_preference\x18\x04 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x12\x64\x65liveryPreference\x12\x30\n\x11reporting_capable\x18\x05 \x01(\x08H\x02R\x10reportingCapable\x88\x01\x01\x12/\n\x13preferred_exchanges\x18\x06 \x03(\tR\x12preferredExchanges\x12&\n\x0c\x62udget_scope\x18\x07 \x01(\tH\x03R\x0b\x62udgetScope\x88\x01\x01\x12\x37\n\rperiod_budget\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostH\x04R\x0cperiodBudget\x88\x01\x01\x12\x43\n\rbudget_period\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationH\x05R\x0c\x62udgetPeriod\x88\x01\x01\x12@\n\x0cmax_data_age\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x06R\nmaxDataAge\x88\x01\x01\x12\x1e\n\x08max_hops\x18\x0b \x01(\x05H\x07R\x07maxHops\x88\x01\x01\x42\x0c\n\n_max_priceB\x10\n\x0e_max_unit_costB\x14\n\x12_reporting_capableB\x0f\n\r_budget_scopeB\x10\n\x0e_period_budgetB\x10\n\x0e_budget_periodB\x0f\n\r_max_data_ageB\x0b\n\t_max_hops\"\xb0\x01\n\nJsonWebKey\x12\x10\n\x03kid\x18\x01 \x01(\tR\x03kid\x12\x10\n\x03kty\x18\x02 \x01(\tR\x03kty\x12\x10\n\x03\x63rv\x18\x03 \x01(\tR\x03\x63rv\x12\x10\n\x03use\x18\x04 \x01(\tR\x03use\x12\x10\n\x03\x61lg\x18\x05 \x01(\tR\x03\x61lg\x12\x0c\n\x01x\x18\x06 \x01(\tR\x01x\x12\x1d\n\nnot_before\x18\x07 \x01(\tR\tnotBefore\x12\x1b\n\tnot_after\x18\x08 \x01(\tR\x08notAfter\"\xdf\r\n\x11WellKnownManifest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12!\n\x04role\x18\x02 \x01(\x0e\x32\r.ramp.v1.RoleR\x04role\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x1d\n\x07\x63ontact\x18\x04 \x01(\tH\x00R\x07\x63ontact\x88\x01\x01\x12\x34\n\x0bpublic_keys\x18\x05 \x03(\x0b\x32\x13.ramp.v1.JsonWebKeyR\npublicKeys\x12.\n\x10invalidation_url\x18\x06 \x01(\tH\x01R\x0finvalidationUrl\x88\x01\x01\x12\x39\n\texchanges\x18\x07 \x03(\x0b\x32\x1b.ramp.v1.AuthorizedExchangeR\texchanges\x12N\n\x14\x63\x61talog_contributors\x18\x08 \x03(\x0b\x32\x1b.ramp.v1.CatalogContributorR\x13\x63\x61talogContributors\x12\x17\n\x04name\x18\t \x01(\tH\x02R\x04name\x88\x01\x01\x12\x1f\n\x08operator\x18\n \x01(\tH\x03R\x08operator\x88\x01\x01\x12,\n\x0foperator_domain\x18\x0b \x01(\tH\x04R\x0eoperatorDomain\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x0c \x01(\tH\x05R\x08\x65ndpoint\x88\x01\x01\x12,\n\x0fhealth_endpoint\x18\r \x01(\tH\x06R\x0ehealthEndpoint\x88\x01\x01\x12.\n\x10\x63\x61talog_endpoint\x18\x0e \x01(\tH\x07R\x0f\x63\x61talogEndpoint\x88\x01\x01\x12>\n\x1bprotocol_versions_supported\x18\x10 \x03(\tR\x19protocolVersionsSupported\x12O\n\x18pricing_models_supported\x18\x11 \x03(\x0e\x32\x15.ramp.v1.PricingModelR\x16pricingModelsSupported\x12U\n\x1a\x64\x65livery_methods_supported\x18\x12 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x18\x64\x65liveryMethodsSupported\x12\x34\n\x16hash_methods_supported\x18\x13 \x03(\tR\x14hashMethodsSupported\x12-\n\x12\x61\x63\x63\x65pted_verifiers\x18\x14 \x03(\tR\x11\x61\x63\x63\x65ptedVerifiers\x12 \n\tterms_uri\x18\x15 \x01(\tH\x08R\x08termsUri\x88\x01\x01\x12$\n\x0bprivacy_uri\x18\x16 \x01(\tH\tR\nprivacyUri\x88\x01\x01\x12-\n\x12supported_profiles\x18\x17 \x03(\tR\x11supportedProfiles\x12I\n\x16supported_auth_methods\x18\x18 \x03(\x0e\x32\x13.ramp.v1.AuthMethodR\x14supportedAuthMethods\x12$\n\x0boidc_issuer\x18\x19 \x01(\tH\nR\noidcIssuer\x88\x01\x01\x12\x33\n\x13gnap_grant_endpoint\x18\x1a \x01(\tH\x0bR\x11gnapGrantEndpoint\x88\x01\x01\x12(\n\rbase_currency\x18\x1b \x01(\tH\x0cR\x0c\x62\x61seCurrency\x88\x01\x01\x12\x37\n\x15max_intermediary_hops\x18\x1c \x01(\x05H\rR\x13maxIntermediaryHops\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:x\xbaHu\x1as\n\"well_known_manifest.role_specified\x12!role must not be ROLE_UNSPECIFIED\x1a*this.role != ramp.v1.Role.ROLE_UNSPECIFIEDB\n\n\x08_contactB\x13\n\x11_invalidation_urlB\x07\n\x05_nameB\x0b\n\t_operatorB\x12\n\x10_operator_domainB\x0b\n\t_endpointB\x12\n\x10_health_endpointB\x13\n\x11_catalog_endpointB\x0c\n\n_terms_uriB\x0e\n\x0c_privacy_uriB\x0e\n\x0c_oidc_issuerB\x16\n\x14_gnap_grant_endpointB\x10\n\x0e_base_currencyB\x18\n\x16_max_intermediary_hops\"`\n\x13KeyInvalidationList\x12/\n\x05\x61s_of\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04\x61sOf\x12\x18\n\x07revoked\x18\x02 \x03(\tR\x07revoked\"P\n\x12\x43\x61talogContributor\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\"\n\x0crelationship\x18\x02 \x01(\tR\x0crelationship\"\xa0\x03\n\x12\x41uthorizedExchange\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12\x41\n\x0crelationship\x18\x03 \x01(\x0e\x32\x1d.ramp.v1.ProviderRelationshipR\x0crelationship\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\xc4\x01\xbaH\xc0\x01\x1a\xbd\x01\n*authorized_exchange.relationship_specified\x12:relationship must not be PROVIDER_RELATIONSHIP_UNSPECIFIED\x1aSthis.relationship != ramp.v1.ProviderRelationship.PROVIDER_RELATIONSHIP_UNSPECIFIED\"\xe8\x06\n\x0cRAMPResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12%\n\x0etransaction_id\x18\x04 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x05 \x01(\tR\tbillingId\x12\x1a\n\x08\x65xchange\x18\x06 \x01(\tR\x08\x65xchange\x12*\n\x0eresource_title\x18\x07 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\r \x01(\tH\x03R\x11retrievalEndpoint\x88\x01\x01\x12\x33\n\x13\x61gent_identity_hash\x18\x0e \x01(\tH\x04R\x11\x61gentIdentityHash\x88\x01\x01\x12\x31\n\nbroker_fee\x18\x0c \x01(\x0b\x32\r.ramp.v1.CostH\x05R\tbrokerFee\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x10 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x06R\rabsenceReason\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_resource_titleB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x16\n\x14_agent_identity_hashB\r\n\x0b_broker_feeB\x11\n\x0f_absence_reason\"\xab\x05\n\x0e\x44isputeRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12.\n\x06reason\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeReasonR\x06reason\x12%\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x37\n\x15received_content_hash\x18\x07 \x01(\tH\x01R\x13receivedContentHash\x88\x01\x01\x12\x35\n\x14received_hash_method\x18\x08 \x01(\tH\x02R\x12receivedHashMethod\x88\x01\x01\x12\x1b\n\treport_id\x18\t \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\x99\x01\xbaH\x95\x01\x1a\x92\x01\n dispute_request.reason_specified\x12-reason must not be DISPUTE_REASON_UNSPECIFIED\x1a?this.reason != ramp.v1.DisputeReason.DISPUTE_REASON_UNSPECIFIEDB\x0e\n\x0c_descriptionB\x18\n\x16_received_content_hashB\x17\n\x15_received_hash_method\"\x8d\x03\n\x0f\x44isputeResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\"\n\ndispute_id\x18\x02 \x01(\tH\x00R\tdisputeId\x88\x01\x01\x12Q\n\x14\x65stimated_resolution\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01R\x13\x65stimatedResolution\x88\x01\x01\x12.\n\x06status\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeStatusR\x06status\x12<\n\nresolution\x18\x06 \x01(\x0e\x32\x17.ramp.v1.ResolutionTypeH\x02R\nresolution\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_dispute_idB\x17\n\x15_estimated_resolutionB\r\n\x0b_resolution\"\xc3\x01\n\x19\x44omainVerificationRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12 \n\tcaller_id\x18\x03 \x01(\tH\x00R\x08\x63\x61llerId\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0c\n\n_caller_id\"\xf9\x01\n\x1b\x44omainVerificationChallenge\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12)\n\x10verification_url\x18\x04 \x01(\tR\x0fverificationUrl\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\x91\x02\n\x1e\x44omainVerificationConfirmation\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12$\n\x0bsigning_key\x18\x04 \x01(\tH\x00R\nsigningKey\x88\x01\x01\x12\x1e\n\x08\x63\x64n_type\x18\x05 \x01(\tH\x01R\x07\x63\x64nType\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_signing_keyB\x0b\n\t_cdn_type\"\xf3\x01\n\x18\x44omainVerificationResult\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x06key_id\x18\x02 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12@\n\x0bvalid_until\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nvalidUntil\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_key_idB\x0e\n\x0c_valid_until\"\x88\x06\n\x0b\x45rrorDetail\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12>\n\x08metadata\x18\x03 \x03(\x0b\x32\".ramp.v1.ErrorDetail.MetadataEntryR\x08metadata\x12K\n\x12transaction_denial\x18\n \x01(\x0b\x32\x1a.ramp.v1.TransactionDenialH\x00R\x11transactionDenial\x12H\n\x11\x63\x61talog_rejection\x18\x0b \x01(\x0b\x32\x19.ramp.v1.CatalogRejectionH\x00R\x10\x63\x61talogRejection\x12Q\n\x14registration_failure\x18\x0c \x01(\x0b\x32\x1c.ramp.v1.RegistrationFailureH\x00R\x13registrationFailure\x12\x42\n\x0f\x64ispute_failure\x18\r \x01(\x0b\x32\x17.ramp.v1.DisputeFailureH\x00R\x0e\x64isputeFailure\x12\x64\n\x1b\x64omain_verification_failure\x18\x0e \x01(\x0b\x32\".ramp.v1.DomainVerificationFailureH\x00R\x19\x64omainVerificationFailure\x12U\n\x16retrieval_auth_failure\x18\x0f \x01(\x0b\x32\x1d.ramp.v1.RetrievalAuthFailureH\x00R\x14retrievalAuthFailure\x12U\n\x16usage_report_rejection\x18\x10 \x01(\x0b\x32\x1d.ramp.v1.UsageReportRejectionH\x00R\x14usageReportRejection\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06reason\"\xcc\x01\n\x11TransactionDenial\x12\x39\n\x06reason\x18\x01 \x01(\x0e\x32\x15.ramp.v1.DenialReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12O\n\x16restriction_mismatches\x18\x02 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x42\x0b\n\t_offer_id\"~\n\x10\x43\x61talogRejection\x12\x43\n\x06reason\x18\x01 \x01(\x0e\x32\x1f.ramp.v1.CatalogRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12%\n\x0erejected_paths\x18\x02 \x03(\tR\rrejectedPaths\"]\n\x13RegistrationFailure\x12\x46\n\x06reason\x18\x01 \x01(\x0e\x32\".ramp.v1.RegistrationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"S\n\x0e\x44isputeFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32\x1d.ramp.v1.DisputeFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"i\n\x19\x44omainVerificationFailure\x12L\n\x06reason\x18\x01 \x01(\x0e\x32(.ramp.v1.DomainVerificationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14RetrievalAuthFailure\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.RetrievalAuthFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14UsageReportRejection\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.UsageReportRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason*\xb6\x01\n\x0f\x44iscoveryMethod\x12 \n\x1c\x44ISCOVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x44ISCOVERY_METHOD_EXCHANGE\x10\x01\x12\x1b\n\x17\x44ISCOVERY_METHOD_SEARCH\x10\x02\x12#\n\x1f\x44ISCOVERY_METHOD_RECOMMENDATION\x10\x03\x12 \n\x1c\x44ISCOVERY_METHOD_SYNDICATION\x10\x04*\xf9\x02\n\x12OfferAbsenceReason\x12$\n OFFER_ABSENCE_REASON_UNSPECIFIED\x10\x00\x12\'\n#OFFER_ABSENCE_REASON_NOT_IN_CATALOG\x10\x01\x12(\n$OFFER_ABSENCE_REASON_CONTENT_BLOCKED\x10\x02\x12-\n)OFFER_ABSENCE_REASON_RESTRICTION_FILTERED\x10\x03\x12\x30\n,OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE\x10\x04\x12\'\n#OFFER_ABSENCE_REASON_NOT_AUTHORIZED\x10\x05\x12+\n\'OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT\x10\x06\x12\x33\n/OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION\x10\x07*q\n\rTermSemantics\x12\x1e\n\x1aTERM_SEMANTICS_UNSPECIFIED\x10\x00\x12\x1d\n\x19TERM_SEMANTICS_ENUMERATED\x10\x01\x12!\n\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xe5\x04\n\x0fRestrictionKind\x12 \n\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xbe\x02\n\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x9e\x02\x92\xb5\x18\x03\x61ll\x92\xb5\x18\x06\x61i-all\x92\xb5\x18\x08\x61i-train\x92\xb5\x18\x08\x61i-input\x92\xb5\x18\x08\x61i-index\x92\xb5\x18\x06search\x92\xb5\x18\x05\x63rawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\ncommercial\x92\xb5\x18\x0b\x61\x64vertising\x92\xb5\x18\teditorial\x92\xb5\x18\x08research\x92\xb5\x18\treproduce\x92\xb5\x18\ndistribute\x92\xb5\x18\x06modify\x92\xb5\x18\x07\x64isplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\x0bmanufacture\x92\xb5\x18\x04sell\xa2\xb5\x18\x0e\x66unctiontokens\x12\x45\n\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a%\x92\xb5\x18\x01*\x92\xb5\x18\x02\x45U\x92\xb5\x18\x03\x45\x45\x41\xa2\xb5\x18\x0fgeographytokens\x12\x8b\x01\n\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1ak\x92\xb5\x18\nindividual\x92\xb5\x18\x08\x61\x63\x61\x64\x65mic\x92\xb5\x18\nnon_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\x0b\x62roadcaster\x92\xb5\x18\x11\x63ommercial_entity\xa2\xb5\x18\tusertypes\x12\x1a\n\x16RESTRICTION_KIND_OTHER\x10\x04*\x8e\x01\n\x0bQuotaWindow\x12\x1c\n\x18QUOTA_WINDOW_UNSPECIFIED\x10\x00\x12\x17\n\x13QUOTA_WINDOW_HOURLY\x10\x01\x12\x16\n\x12QUOTA_WINDOW_DAILY\x10\x02\x12\x18\n\x14QUOTA_WINDOW_MONTHLY\x10\x03\x12\x16\n\x12QUOTA_WINDOW_TOTAL\x10\x04*\xf2\x01\n\x0eObligationKind\x12\x1f\n\x1bOBLIGATION_KIND_UNSPECIFIED\x10\x00\x12\x1f\n\x1bOBLIGATION_KIND_ATTRIBUTION\x10\x01\x12 \n\x1cOBLIGATION_KIND_CONTRIBUTION\x10\x02\x12\x1f\n\x1bOBLIGATION_KIND_SHARE_ALIKE\x10\x03\x12$\n OBLIGATION_KIND_NETWORK_COPYLEFT\x10\x04\x12\x1a\n\x16OBLIGATION_KIND_NOTICE\x10\x05\x12\x19\n\x15OBLIGATION_KIND_OTHER\x10\x06*\xcf\x01\n\x11ObligationTrigger\x12\"\n\x1eOBLIGATION_TRIGGER_UNSPECIFIED\x10\x00\x12\x1d\n\x19OBLIGATION_TRIGGER_ON_USE\x10\x01\x12&\n\"OBLIGATION_TRIGGER_ON_DISTRIBUTION\x10\x02\x12)\n%OBLIGATION_TRIGGER_ON_NETWORK_SERVICE\x10\x03\x12$\n OBLIGATION_TRIGGER_ON_DERIVATIVE\x10\x04*y\n\x0cPricingModel\x12\x1d\n\x19PRICING_MODEL_UNSPECIFIED\x10\x00\x12\x16\n\x12PRICING_MODEL_FREE\x10\x01\x12\x1a\n\x16PRICING_MODEL_PER_UNIT\x10\x02\x12\x16\n\x12PRICING_MODEL_FLAT\x10\x03*u\n\x0fPricingMetering\x12\x1b\n\x17PRICING_METERING_ONLINE\x10\x00\x12\x19\n\x15PRICING_METERING_NONE\x10\x01\x12*\n&PRICING_METERING_OFFLINE_SELF_REPORTED\x10\x02*\x8e\x01\n\x0e\x44\x65liveryMethod\x12\x1f\n\x1b\x44\x45LIVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x44\x45LIVERY_METHOD_DIRECT\x10\x01\x12 \n\x1c\x44\x45LIVERY_METHOD_INSTRUCTIONS\x10\x02\x12\x1d\n\x19\x44\x45LIVERY_METHOD_STREAMING\x10\x03*\xbf\x01\n\rRequesterType\x12\x1e\n\x1aREQUESTER_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14REQUESTER_TYPE_AGENT\x10\x01\x12\x1d\n\x19REQUESTER_TYPE_HUMAN_TOOL\x10\x02\x12\x1a\n\x16REQUESTER_TYPE_SERVICE\x10\x03\x12\x1c\n\x18REQUESTER_TYPE_DELEGATED\x10\x04\x12\x1b\n\x17REQUESTER_TYPE_RESEARCH\x10\x05*\x8a\x01\n\nC2PAStatus\x12\x1b\n\x17\x43\x32PA_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x43\x32PA_STATUS_TRUSTED\x10\x01\x12\x15\n\x11\x43\x32PA_STATUS_VALID\x10\x02\x12\x17\n\x13\x43\x32PA_STATUS_INVALID\x10\x03\x12\x16\n\x12\x43\x32PA_STATUS_ABSENT\x10\x04*\x98\x01\n\x12ResourceMutability\x12#\n\x1fRESOURCE_MUTABILITY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aRESOURCE_MUTABILITY_STATIC\x10\x01\x12\x1f\n\x1bRESOURCE_MUTABILITY_DYNAMIC\x10\x02\x12\x1c\n\x18RESOURCE_MUTABILITY_LIVE\x10\x03*\xef\x05\n\x0c\x44\x65nialReason\x12\x1d\n\x19\x44\x45NIAL_REASON_UNSPECIFIED\x10\x00\x12&\n\"DENIAL_REASON_BILLING_REF_INACTIVE\x10\x01\x12&\n\"DENIAL_REASON_INSUFFICIENT_BALANCE\x10\x02\x12\x1e\n\x1a\x44\x45NIAL_REASON_RATE_LIMITED\x10\x03\x12%\n!DENIAL_REASON_CONTENT_UNAVAILABLE\x10\x04\x12+\n\'DENIAL_REASON_RESTRICTION_NOT_SATISFIED\x10\x05\x12#\n\x1f\x44\x45NIAL_REASON_REPORTING_OVERDUE\x10\x06\x12\x1f\n\x1b\x44\x45NIAL_REASON_OFFER_EXPIRED\x10\x07\x12#\n\x1f\x44\x45NIAL_REASON_SIGNATURE_INVALID\x10\x08\x12 \n\x1c\x44\x45NIAL_REASON_QUOTA_EXCEEDED\x10\t\x12$\n DENIAL_REASON_DELEGATION_INVALID\x10\n\x12$\n DENIAL_REASON_SCOPE_INSUFFICIENT\x10\x0b\x12%\n!DENIAL_REASON_ENTITLEMENT_MISSING\x10\x0c\x12\'\n#DENIAL_REASON_ENTITLEMENT_MALFORMED\x10\r\x12%\n!DENIAL_REASON_ENTITLEMENT_EXPIRED\x10\x0e\x12)\n%DENIAL_REASON_ENTITLEMENT_WRONG_BUYER\x10\x0f\x12%\n!DENIAL_REASON_SUBSCRIPTION_LAPSED\x10\x10\x12)\n%DENIAL_REASON_ENTITLEMENT_NOT_GRANTED\x10\x11\x12/\n+DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION\x10\x12*\x8c\x02\n\x0fIngestionSource\x12 \n\x1cINGESTION_SOURCE_UNSPECIFIED\x10\x00\x12!\n\x1dINGESTION_SOURCE_RAMP_SITEMAP\x10\x01\x12\x18\n\x14INGESTION_SOURCE_RSL\x10\x02\x12\x1c\n\x18INGESTION_SOURCE_SITEMAP\x10\x03\x12\x1f\n\x1bINGESTION_SOURCE_HTML_CRAWL\x10\x04\x12\x1c\n\x18INGESTION_SOURCE_CMS_API\x10\x05\x12\x1b\n\x17INGESTION_SOURCE_MANUAL\x10\x06\x12 \n\x1cINGESTION_SOURCE_CATALOG_API\x10\x07*d\n\x0e\x43itationFormat\x12\x18\n\x14\x43ITATION_FORMAT_LINK\x10\x00\x12\x1c\n\x18\x43ITATION_FORMAT_FOOTNOTE\x10\x01\x12\x1a\n\x16\x43ITATION_FORMAT_INLINE\x10\x02*d\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x0e\n\nROLE_AGENT\x10\x01\x12\x11\n\rROLE_EXCHANGE\x10\x02\x12\x0f\n\x0bROLE_BROKER\x10\x03\x12\x12\n\x0eROLE_PUBLISHER\x10\x04*\x83\x01\n\x14ProviderRelationship\x12%\n!PROVIDER_RELATIONSHIP_UNSPECIFIED\x10\x00\x12 \n\x1cPROVIDER_RELATIONSHIP_DIRECT\x10\x01\x12\"\n\x1ePROVIDER_RELATIONSHIP_RESELLER\x10\x02*\x95\x01\n\nAuthMethod\x12\x1b\n\x17\x41UTH_METHOD_UNSPECIFIED\x10\x00\x12\x14\n\x10\x41UTH_METHOD_GNAP\x10\x01\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_DPOP\x10\x02\x12\x1c\n\x18\x41UTH_METHOD_OAUTH_BEARER\x10\x03\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_MTLS\x10\x04*\xea\x01\n\rDisputeReason\x12\x1e\n\x1a\x44ISPUTE_REASON_UNSPECIFIED\x10\x00\x12#\n\x1f\x44ISPUTE_REASON_CONTENT_MISMATCH\x10\x01\x12\"\n\x1e\x44ISPUTE_REASON_DELIVERY_FAILED\x10\x02\x12 \n\x1c\x44ISPUTE_REASON_WRONG_CONTENT\x10\x03\x12\'\n#DISPUTE_REASON_EXPIRED_BEFORE_FETCH\x10\x04\x12%\n!DISPUTE_REASON_INCOMPLETE_CONTENT\x10\x05*\xbe\x02\n\rDisputeStatus\x12\x1e\n\x1a\x44ISPUTE_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14\x44ISPUTE_STATUS_FILED\x10\x01\x12 \n\x1c\x44ISPUTE_STATUS_AUTO_RESOLVED\x10\x02\x12\"\n\x1e\x44ISPUTE_STATUS_EVIDENCE_NEEDED\x10\x03\x12\x1f\n\x1b\x44ISPUTE_STATUS_UNDER_REVIEW\x10\x04\x12\x1c\n\x18\x44ISPUTE_STATUS_ESCALATED\x10\x05\x12\x1b\n\x17\x44ISPUTE_STATUS_RESOLVED\x10\x06\x12\x1b\n\x17\x44ISPUTE_STATUS_APPEALED\x10\x07\x12\x1a\n\x16\x44ISPUTE_STATUS_SETTLED\x10\x08\x12\x18\n\x14\x44ISPUTE_STATUS_FINAL\x10\t*\xae\x01\n\x0eResolutionType\x12\x1f\n\x1bRESOLUTION_TYPE_UNSPECIFIED\x10\x00\x12\x1a\n\x16RESOLUTION_TYPE_CREDIT\x10\x01\x12\x1e\n\x1aRESOLUTION_TYPE_REDELIVERY\x10\x02\x12\x1c\n\x18RESOLUTION_TYPE_REJECTED\x10\x03\x12!\n\x1dRESOLUTION_TYPE_INVESTIGATION\x10\x04*\x95\x03\n\x16\x43\x61talogRejectionReason\x12(\n$CATALOG_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x34\n0CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR\x10\x01\x12,\n(CATALOG_REJECTION_REASON_TENANT_MISMATCH\x10\x02\x12\x30\n,CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED\x10\x03\x12.\n*CATALOG_REJECTION_REASON_SIGNATURE_INVALID\x10\x04\x12,\n(CATALOG_REJECTION_REASON_MALFORMED_ENTRY\x10\x05\x12\x30\n,CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN\x10\x06\x12+\n\'CATALOG_REJECTION_REASON_QUOTA_EXCEEDED\x10\x07*\xc1\x02\n\x19RegistrationFailureReason\x12+\n\'REGISTRATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x33\n/REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED\x10\x01\x12+\n\'REGISTRATION_FAILURE_REASON_INVALID_KEY\x10\x02\x12\x31\n-REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID\x10\x03\x12\x32\n.REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED\x10\x04\x12.\n*REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED\x10\x05*\x95\x02\n\x14\x44isputeFailureReason\x12&\n\"DISPUTE_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x30\n,DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'DISPUTE_FAILURE_REASON_REPORT_NOT_FILED\x10\x02\x12)\n%DISPUTE_FAILURE_REASON_WINDOW_EXPIRED\x10\x03\x12$\n DISPUTE_FAILURE_REASON_DUPLICATE\x10\x04\x12%\n!DISPUTE_FAILURE_REASON_INELIGIBLE\x10\x05*\xbb\x03\n\x1f\x44omainVerificationFailureReason\x12\x32\n.DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12:\n6DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND\x10\x01\x12\x39\n5DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH\x10\x02\x12\x38\n4DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED\x10\x03\x12\x33\n/DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED\x10\x04\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED\x10\x05\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED\x10\x06*\xd9\x05\n\x1aRetrievalAuthFailureReason\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED\x10\x00\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED\x10\x01\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING\x10\x02\x12\x34\n0RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING\x10\x03\x12\x38\n4RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH\x10\x04\x12\x33\n/RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING\x10\x05\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING\x10\x06\x12\x30\n,RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH\x10\x07\x12\x35\n1RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH\x10\x08\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING\x10\t\x12\x36\n2RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING\x10\n\x12/\n+RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED\x10\x0b\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID\x10\x0c*\xcb\x02\n\x1aUsageReportRejectionReason\x12-\n)USAGE_REPORT_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x37\n3USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'USAGE_REPORT_REJECTION_REASON_DUPLICATE\x10\x02\x12\x30\n,USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED\x10\x03\x12\x39\n5USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS\x10\x04\x12+\n\'USAGE_REPORT_REJECTION_REASON_MALFORMED\x10\x05\x32\x86\x04\n\x0f\x45xchangeService\x12\x46\n\x11\x44iscoverResources\x12\x16.ramp.v1.ResourceQuery\x1a\x19.ramp.v1.ResourceResponse\x12O\n\x12\x45xecuteTransaction\x12\x1b.ramp.v1.TransactionRequest\x1a\x1c.ramp.v1.TransactionResponse\x12\x41\n\x0bReportUsage\x12\x14.ramp.v1.UsageReport\x1a\x1c.ramp.v1.UsageReportResponse\x12G\n\x12\x44isputeTransaction\x12\x17.ramp.v1.DisputeRequest\x1a\x18.ramp.v1.DisputeResponse\x12\x65\n\x19RequestDomainVerification\x12\".ramp.v1.DomainVerificationRequest\x1a$.ramp.v1.DomainVerificationChallenge\x12g\n\x19\x43onfirmDomainVerification\x12\'.ramp.v1.DomainVerificationConfirmation\x1a!.ramp.v1.DomainVerificationResult2\x89\x02\n\x0e\x43\x61talogService\x12N\n\rPushResources\x12\x1d.ramp.v1.PushResourcesRequest\x1a\x1e.ramp.v1.PushResourcesResponse\x12T\n\x0fRemoveResources\x12\x1f.ramp.v1.RemoveResourcesRequest\x1a .ramp.v1.RemoveResourcesResponse\x12Q\n\x0eRefreshCatalog\x12\x1e.ramp.v1.RefreshCatalogRequest\x1a\x1f.ramp.v1.RefreshCatalogResponse2G\n\rBrokerService\x12\x36\n\x07Resolve\x12\x14.ramp.v1.RAMPRequest\x1a\x15.ramp.v1.RAMPResponseB\x8e\x01\n\x0b\x63om.ramp.v1B\tRampProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -38,11 +38,11 @@ _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'\n\013com.ramp.v1B\tRampProtoP\001Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\242\002\003RXX\252\002\007Ramp.V1\312\002\007Ramp\\V1\342\002\023Ramp\\V1\\GPBMetadata\352\002\010Ramp::V1' _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_FUNCTION"]._loaded_options = None - _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_FUNCTION"]._serialized_options = b'\222\265\030\003all\222\265\030\006ai-all\222\265\030\010ai-train\222\265\030\010ai-input\222\265\030\010ai-index\222\265\030\006search\222\265\030\005crawl\222\265\030\024text-and-data-mining\222\265\030\003tts\222\265\030\ncommercial\222\265\030\013advertising\222\265\030\teditorial\222\265\030\010research\222\265\030\treproduce\222\265\030\ndistribute\222\265\030\006modify\222\265\030\007display\222\265\030\004sync\222\265\030\tbroadcast\222\265\030\006stream\222\265\030\005print\222\265\030\013manufacture\222\265\030\004sell' + _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_FUNCTION"]._serialized_options = b'\222\265\030\003all\222\265\030\006ai-all\222\265\030\010ai-train\222\265\030\010ai-input\222\265\030\010ai-index\222\265\030\006search\222\265\030\005crawl\222\265\030\024text-and-data-mining\222\265\030\003tts\222\265\030\ncommercial\222\265\030\013advertising\222\265\030\teditorial\222\265\030\010research\222\265\030\treproduce\222\265\030\ndistribute\222\265\030\006modify\222\265\030\007display\222\265\030\004sync\222\265\030\tbroadcast\222\265\030\006stream\222\265\030\005print\222\265\030\013manufacture\222\265\030\004sell\242\265\030\016functiontokens' _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_GEOGRAPHY"]._loaded_options = None - _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_GEOGRAPHY"]._serialized_options = b'\222\265\030\001*\222\265\030\002EU\222\265\030\003EEA' + _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_GEOGRAPHY"]._serialized_options = b'\222\265\030\001*\222\265\030\002EU\222\265\030\003EEA\242\265\030\017geographytokens' _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_USER_TYPE"]._loaded_options = None - _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_USER_TYPE"]._serialized_options = b'\222\265\030\nindividual\222\265\030\010academic\222\265\030\nnon_profit\222\265\030\016news_publisher\222\265\030\013broadcaster\222\265\030\021commercial_entity' + _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_USER_TYPE"]._serialized_options = b'\222\265\030\nindividual\222\265\030\010academic\222\265\030\nnon_profit\222\265\030\016news_publisher\222\265\030\013broadcaster\222\265\030\021commercial_entity\242\265\030\tusertypes' _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._loaded_options = None _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._serialized_options = b'\272H\320\001\222\001\002\020@\272\001\307\001\n$acceptable_restriction.values.format\022Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' _globals['_RESOURCEQUERY'].fields_by_name['uris']._loaded_options = None @@ -60,7 +60,7 @@ _globals['_RESTRICTION']._loaded_options = None _globals['_RESTRICTION']._serialized_options = b'\272H\247\002\032\223\001\n)restriction.permitted_prohibited_disjoint\0226a token cannot appear in both permitted and prohibited\032.this.permitted.all(p, !(p in this.prohibited))\032\216\001\n\032restriction.kind_specified\022-kind must not be RESTRICTION_KIND_UNSPECIFIED\032Athis.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED' _globals['_QUOTA'].fields_by_name['metric']._loaded_options = None - _globals['_QUOTA'].fields_by_name['metric']._serialized_options = b'\272H\345\001r\002\030@\272\001\335\001\n\023quota.metric.format\022cmetric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032athis != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\212\265\030\rdisplay-words\212\265\030\013impressions\212\265\030\006tokens\212\265\030\014input-tokens\212\265\030\022units-manufactured\212\265\030\010accesses\212\265\030\006copies\212\265\030\005seats' + _globals['_QUOTA'].fields_by_name['metric']._serialized_options = b'\272H\345\001r\002\030@\272\001\335\001\n\023quota.metric.format\022cmetric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032athis != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\212\265\030\rdisplay-words\212\265\030\013impressions\212\265\030\006tokens\212\265\030\014input-tokens\212\265\030\022units-manufactured\212\265\030\010accesses\212\265\030\006copies\212\265\030\005seats\232\265\030\014quotametrics' _globals['_QUOTA'].fields_by_name['limit']._loaded_options = None _globals['_QUOTA'].fields_by_name['limit']._serialized_options = b'\272H\004\"\002(\001' _globals['_QUOTA']._loaded_options = None @@ -74,7 +74,7 @@ _globals['_LICENSETERM']._loaded_options = None _globals['_LICENSETERM']._serialized_options = b'\272H\254\004\032\342\001\n(license_term.reference_only.requires_uri\022>REFERENCE_ONLY terms must carry a license with a non-empty uri\032vthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\032\251\001\n%license_term.one_restriction_per_kind\022+at most one restriction is allowed per kind\032Sthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)\032\230\001\n license_term.semantics_specified\0220semantics must not be TERM_SEMANTICS_UNSPECIFIED\032Bthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_UNSPECIFIED' _globals['_PRICING'].fields_by_name['unit']._loaded_options = None - _globals['_PRICING'].fields_by_name['unit']._serialized_options = b'\272H\351\001r\002\030@\272\001\341\001\n\023pricing.unit.format\022iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\212\265\030\007fetches\212\265\030\010accesses\212\265\030\006tokens\212\265\030\005calls\212\265\030\005pages\212\265\030\007seconds\212\265\030\007minutes\212\265\030\007records\212\265\030\007streams\212\265\030\006images\212\265\030\005seats\212\265\030\022units-manufactured\212\265\030\ncharacters\212\265\030\005bytes\212\265\030\005items\212\265\030\005sq-km' + _globals['_PRICING'].fields_by_name['unit']._serialized_options = b'\272H\351\001r\002\030@\272\001\341\001\n\023pricing.unit.format\022iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\212\265\030\007fetches\212\265\030\010accesses\212\265\030\006tokens\212\265\030\005calls\212\265\030\005pages\212\265\030\007seconds\212\265\030\007minutes\212\265\030\007records\212\265\030\007streams\212\265\030\006images\212\265\030\005seats\212\265\030\022units-manufactured\212\265\030\ncharacters\212\265\030\005bytes\212\265\030\005items\212\265\030\005sq-km\232\265\030\014pricingunits' _globals['_PRICING']._loaded_options = None _globals['_PRICING']._serialized_options = b'\272H\252\003\032\227\001\n\036pricing.per_unit.requires_unit\022\'unit is required when model is PER_UNIT\032Lthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\032\206\001\n\026pricing.free.zero_rate\022!rate must be 0 when model is FREE\032Ithis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0\032\204\001\n\027pricing.model_specified\022+model must not be PRICING_MODEL_UNSPECIFIED\032 = /*@__PURE__*/ extDesc(file_ramp_v1_vocab, 0); +/** + * vocab_package names the generated SDK package/module for this field's axis + * (e.g. "pricingunits", "quotametrics"). It lives on the field — alongside the + * tokens — so the axis→package mapping is part of the single proto source and + * protoc-gen-rampvocab needs no hand-maintained mapping table. Required on any + * field that carries (ramp.v1.vocab). + * + * @generated from extension: optional string vocab_package = 50003; + */ +export const vocab_package: GenExtension = /*@__PURE__*/ + extDesc(file_ramp_v1_vocab, 1); + /** * vocab_enum is the enum-value-scoped twin of (ramp.v1.vocab) above. Axes * whose token list is selected by an enum value — the function / geography / @@ -53,5 +65,16 @@ export const vocab: GenExtension = /*@__PURE__*/ * @generated from extension: repeated string vocab_enum = 50002; */ export const vocab_enum: GenExtension = /*@__PURE__*/ - extDesc(file_ramp_v1_vocab, 1); + extDesc(file_ramp_v1_vocab, 2); + +/** + * vocab_enum_package is the enum-value twin of (ramp.v1.vocab_package): it + * names the generated package/module for an axis selected by an enum value + * (e.g. "functiontokens"). Required on any enum value that carries + * (ramp.v1.vocab_enum). + * + * @generated from extension: optional string vocab_enum_package = 50004; + */ +export const vocab_enum_package: GenExtension = /*@__PURE__*/ + extDesc(file_ramp_v1_vocab, 3); diff --git a/proto/ramp/v1/ramp.proto b/proto/ramp/v1/ramp.proto index cfa38bb8..5304e94c 100644 --- a/proto/ramp/v1/ramp.proto +++ b/proto/ramp/v1/ramp.proto @@ -786,6 +786,7 @@ enum RestrictionKind { // What the agent may do with the content. Seeded from RSL 1.0 AI-use // vocabulary and extended with established IP/copyright terms. RESTRICTION_KIND_FUNCTION = 1 [ + (ramp.v1.vocab_enum_package) = "functiontokens", (ramp.v1.vocab_enum) = "all", (ramp.v1.vocab_enum) = "ai-all", (ramp.v1.vocab_enum) = "ai-train", @@ -814,6 +815,7 @@ enum RestrictionKind { // Where the agent may use the content. ISO 3166-1 alpha-2 codes (US, DE, GB) // are valid structurally; only the non-ISO specials are registered here. RESTRICTION_KIND_GEOGRAPHY = 2 [ + (ramp.v1.vocab_enum_package) = "geographytokens", (ramp.v1.vocab_enum) = "*", (ramp.v1.vocab_enum) = "EU", (ramp.v1.vocab_enum) = "EEA" @@ -821,6 +823,7 @@ enum RestrictionKind { // Who may access and use the content. RESTRICTION_KIND_USER_TYPE = 3 [ + (ramp.v1.vocab_enum_package) = "usertypes", (ramp.v1.vocab_enum) = "individual", (ramp.v1.vocab_enum) = "academic", (ramp.v1.vocab_enum) = "non_profit", @@ -1030,6 +1033,7 @@ message Quota { // copies Digital or physical copies produced. // seats Distinct named users licensed to access the content. string metric = 1 [ + (ramp.v1.vocab_package) = "quotametrics", (ramp.v1.vocab) = "display-words", (ramp.v1.vocab) = "impressions", (ramp.v1.vocab) = "tokens", @@ -1305,6 +1309,7 @@ message Pricing { // those. The CEL is STRUCTURE ONLY (empty / bare-form / vendor:namespaced) — // it never lists the tokens, so it cannot drift from the registry. optional string unit = 8 [ + (ramp.v1.vocab_package) = "pricingunits", (ramp.v1.vocab) = "fetches", (ramp.v1.vocab) = "accesses", (ramp.v1.vocab) = "tokens", (ramp.v1.vocab) = "calls", (ramp.v1.vocab) = "pages", (ramp.v1.vocab) = "seconds", (ramp.v1.vocab) = "minutes", (ramp.v1.vocab) = "records", (ramp.v1.vocab) = "streams", diff --git a/proto/ramp/v1/vocab.proto b/proto/ramp/v1/vocab.proto index a55e6086..f6c40e5f 100644 --- a/proto/ramp/v1/vocab.proto +++ b/proto/ramp/v1/vocab.proto @@ -27,6 +27,13 @@ extend google.protobuf.FieldOptions { // by an enum value (function, geography, user-type, selected by // RestrictionKind) carry their tokens on the enum-value extension below. repeated string vocab = 50001; + + // vocab_package names the generated SDK package/module for this field's axis + // (e.g. "pricingunits", "quotametrics"). It lives on the field — alongside the + // tokens — so the axis→package mapping is part of the single proto source and + // protoc-gen-rampvocab needs no hand-maintained mapping table. Required on any + // field that carries (ramp.v1.vocab). + optional string vocab_package = 50003; } extend google.protobuf.EnumValueOptions { @@ -40,4 +47,10 @@ extend google.protobuf.EnumValueOptions { // an extend block targets one options message — 50001 cannot also extend // EnumValueOptions; 50002 is the next slot in the same internal block. repeated string vocab_enum = 50002; + + // vocab_enum_package is the enum-value twin of (ramp.v1.vocab_package): it + // names the generated package/module for an axis selected by an enum value + // (e.g. "functiontokens"). Required on any enum value that carries + // (ramp.v1.vocab_enum). + optional string vocab_enum_package = 50004; } From 287516d7465160ee20daeabcb9ebfb5ca1cb0016 Mon Sep 17 00:00:00 2001 From: "Constantine.mirin" Date: Fri, 19 Jun 2026 16:42:22 +0200 Subject: [PATCH 04/40] refactor(proto): discriminators as standard enum.not_in:[0], not custom CEL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 11 "*_specified" discriminator rules were message-level CEL comparing a fully-qualified enum (this.x != ramp.v1.Enum.UNSPECIFIED). That form has two problems the SDK work surfaced: it does NOT survive proto→JSON Schema generation (so it can't reach generated Pydantic/Zod), and protovalidate-python (celpy) cannot even evaluate it ("undeclared reference to 'ramp'"). The standard (buf.validate.field).enum.not_in:[0] expresses the same rule, and — measured — it DOES survive into JSON Schema (UNSPECIFIED is dropped from the enum) and evaluates in every protovalidate port. Converted all 11 (Pricing.model, LicenseTerm.semantics, Restriction.kind, Obligation.kind/trigger, Quota.window, AuthorizedExchange.relationship, Requester.type, ResourceIdentity.resource_mutability, WellKnownManifest.role, DisputeRequest.reason). Conformance wantRules updated to enum.not_in; INV-1 now passes via the field rule; INV-5's declared-CEL set auto-shrinks to the 7 cross-field + 7 format rules (the genuinely-CEL ones). Doc citation updated. Cross-field rules stay CEL (server-authoritative). --- conformance/validate_test.go | 22 +- gen/descriptor.binpb | Bin 514349 -> 511552 bytes gen/go/ramp/v1/ramp.pb.go | 96 ++--- .../v1/__pycache__/ramp_pb2.cpython-312.pyc | Bin 0 -> 54665 bytes gen/python/ramp/v1/ramp_pb2.py | 374 +++++++++--------- gen/ts/ramp/v1/ramp_pb.ts | 2 +- proto/ramp/v1/ramp.proto | 88 +---- .../src/content/docs/reference/proto-ramp.mdx | 6 +- 8 files changed, 260 insertions(+), 328 deletions(-) create mode 100644 gen/python/ramp/v1/__pycache__/ramp_pb2.cpython-312.pyc diff --git a/conformance/validate_test.go b/conformance/validate_test.go index 26498688..84796a7e 100644 --- a/conformance/validate_test.go +++ b/conformance/validate_test.go @@ -153,27 +153,27 @@ func licensingCases() []validationCase { // Required-enum discriminators — UNSPECIFIED (zero) is never a valid value. // These guard the gap where the conditional coherence CELs above are // vacuously satisfied by an unset discriminator. - {"term semantics unspecified rejected", &rampv1.LicenseTerm{Pricing: freePricing()}, false, "license_term.semantics_specified"}, - {"pricing model unspecified rejected", &rampv1.Pricing{Rate: 0}, false, "pricing.model_specified"}, - {"restriction kind unspecified rejected", &rampv1.Restriction{Permitted: []string{"ai-input"}}, false, "restriction.kind_specified"}, - {"obligation kind unspecified rejected", &rampv1.Obligation{Trigger: rampv1.ObligationTrigger_OBLIGATION_TRIGGER_ON_USE}, false, "obligation.kind_specified"}, - {"quota window unspecified rejected", &rampv1.Quota{Metric: "accesses", Limit: 1}, false, "quota.window_specified"}, - {"obligation trigger unspecified rejected", &rampv1.Obligation{Kind: rampv1.ObligationKind_OBLIGATION_KIND_ATTRIBUTION}, false, "obligation.trigger_specified"}, + {"term semantics unspecified rejected", &rampv1.LicenseTerm{Pricing: freePricing()}, false, "enum.not_in"}, + {"pricing model unspecified rejected", &rampv1.Pricing{Rate: 0}, false, "enum.not_in"}, + {"restriction kind unspecified rejected", &rampv1.Restriction{Permitted: []string{"ai-input"}}, false, "enum.not_in"}, + {"obligation kind unspecified rejected", &rampv1.Obligation{Trigger: rampv1.ObligationTrigger_OBLIGATION_TRIGGER_ON_USE}, false, "enum.not_in"}, + {"quota window unspecified rejected", &rampv1.Quota{Metric: "accesses", Limit: 1}, false, "enum.not_in"}, + {"obligation trigger unspecified rejected", &rampv1.Obligation{Kind: rampv1.ObligationKind_OBLIGATION_KIND_ATTRIBUTION}, false, "enum.not_in"}, // Discriminator + format CELs on messages OUTSIDE the licensing core. The // rules are identical in shape to the ones above; covering them here keeps // TestCELRuleCoverage's completeness assertion green for the whole proto, // not just the licensing subtree. {"authorized_exchange relationship set ok", &rampv1.AuthorizedExchange{Relationship: rampv1.ProviderRelationship_PROVIDER_RELATIONSHIP_DIRECT}, true, ""}, - {"authorized_exchange relationship unspecified rejected", &rampv1.AuthorizedExchange{}, false, "authorized_exchange.relationship_specified"}, + {"authorized_exchange relationship unspecified rejected", &rampv1.AuthorizedExchange{}, false, "enum.not_in"}, {"requester type set ok", &rampv1.Requester{Type: rampv1.RequesterType_REQUESTER_TYPE_AGENT}, true, ""}, - {"requester type unspecified rejected", &rampv1.Requester{}, false, "requester.type_specified"}, + {"requester type unspecified rejected", &rampv1.Requester{}, false, "enum.not_in"}, {"resource_identity mutability set ok", &rampv1.ResourceIdentity{ResourceMutability: rampv1.ResourceMutability_RESOURCE_MUTABILITY_STATIC}, true, ""}, - {"resource_identity mutability unspecified rejected", &rampv1.ResourceIdentity{}, false, "resource_identity.resource_mutability_specified"}, + {"resource_identity mutability unspecified rejected", &rampv1.ResourceIdentity{}, false, "enum.not_in"}, {"well_known_manifest role set ok", &rampv1.WellKnownManifest{Role: rampv1.Role_ROLE_AGENT}, true, ""}, - {"well_known_manifest role unspecified rejected", &rampv1.WellKnownManifest{}, false, "well_known_manifest.role_specified"}, + {"well_known_manifest role unspecified rejected", &rampv1.WellKnownManifest{}, false, "enum.not_in"}, {"dispute_request reason set ok", &rampv1.DisputeRequest{IdempotencyKey: "idem-dr-x", Reason: rampv1.DisputeReason_DISPUTE_REASON_CONTENT_MISMATCH}, true, ""}, - {"dispute_request reason unspecified rejected", &rampv1.DisputeRequest{IdempotencyKey: "idem-dr-x"}, false, "dispute_request.reason_specified"}, + {"dispute_request reason unspecified rejected", &rampv1.DisputeRequest{IdempotencyKey: "idem-dr-x"}, false, "enum.not_in"}, {"usage consumed_unit empty ok", &rampv1.Usage{}, true, ""}, {"usage consumed_unit bare ok", &rampv1.Usage{ConsumedUnit: proto.String("tokens")}, true, ""}, {"usage consumed_unit space rejected", &rampv1.Usage{ConsumedUnit: proto.String("two words")}, false, "usage.consumed_unit.format"}, diff --git a/gen/descriptor.binpb b/gen/descriptor.binpb index 751ba5a362f2de15b8b408b7e2bf89b6f3f61088..ce1bcc7d60667fc5bf4d118c79d6d970399d0dd0 100644 GIT binary patch delta 33513 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 Z}#TdUHfb-FmIJN;V#s^b|ymUuW zC>inM^J{IL|S z*w8owVw{hqioe$5OaeL1$L(>}64dCpJ2omoI|OIYm1>aGFAo5#-@*X|^O+Q0C8=xiV*V#OwYPxhQWNRUb~1_>8EpoDgwPl*Vg@NTGB-h5bkR#T9(pkB?MR zV&G<8k-d;oZ?GhV(go@x?BfDrkS?ag!Ogr&!Nru`$bu9~7gN~Cx*3Di$zqpNu4^gL zc?++oyqv-jYPyKRcS@}uv8X`I5)f5|JR;Xg{t04ndrLzFZy4ezCnkso;v5^J~eu9-n;ql=8H z5JG2A8haABcmy4w7exIUUXghrZFJT;Qkw48U2c`hkG2PkXKQ$`%;2=qN$b!^4NiCM zCPxY%TH{un*j>YWWQL^mCfe@^9yNR=$|VwgL@oXBya1X=6-U zt?R%bhCtmo0K~wKN;g*748&31munwa)xcfEau|!$_u#;CqumP#;;M9M zYq}>2h`LS^opYPI#67#PpZ$tG z{v0@j>nr6FKzT7sQM($N0d9a917vJsTjWg5JdR@<#Yv}YeLP}Gq zgRF6e=<*RS&df*~^4AGb0opX3k;acyDjlSUuZn+@&Z|z_Y0vakYI~vN!J)uwV(mw~ z$uD0^8}iZ@c<2|ZUQ6TBm#Q<)1ZSd<#*u>JKmX~^kM{q^pPzW9|Kr8-9S7QU4G+)d z{WXFxo|(q|HB|r(180ewKjuw}W;qR}pRJme?pB7MJT*LB@CK1~Er9>tUm#-7;bYgA zKjybr&Pn6)Uq5^Z%jnq$a0Af7nrV;2UC;`HE=cb#_ z*S<>v>AUl6-_;USX`b!75Z&`WuKL^` zSotm>h~Fl^qyAg5g-p8SOO&MdL}9zy6WA!oxWHgw>$OU2et zc)Nn7PFdu%OR228Fg{(euauymziS&=qY>R|!Kut1=O1rWos!X6et t)OdwGEPxo673tK delta 35854 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 IQ|_DoA79gzW&i*H diff --git a/gen/go/ramp/v1/ramp.pb.go b/gen/go/ramp/v1/ramp.pb.go index 0a5c3826..11597b25 100644 --- a/gen/go/ramp/v1/ramp.pb.go +++ b/gen/go/ramp/v1/ramp.pb.go @@ -8395,7 +8395,7 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "\v_expires_atB\v\n" + "\t_identityB\x12\n" + "\x10_subscription_idB\r\n" + - "\v_data_as_of\"\xab\a\n" + + "\v_data_as_of\"\xe1\x05\n" + "\x10ResourceIdentity\x12(\n" + "\rcanonical_url\x18\x01 \x01(\tH\x00R\fcanonicalUrl\x88\x01\x01\x12\x15\n" + "\x03doi\x18\x02 \x01(\tH\x01R\x03doi\x88\x01\x01\x12 \n" + @@ -8403,8 +8403,8 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "\x04isni\x18\x04 \x01(\tH\x03R\x04isni\x88\x01\x01\x12&\n" + "\fcontent_hash\x18\x05 \x01(\tH\x04R\vcontentHash\x88\x01\x01\x12$\n" + "\vhash_method\x18\x06 \x01(\tH\x05R\n" + - "hashMethod\x88\x01\x01\x12L\n" + - "\x13resource_mutability\x18\b \x01(\x0e2\x1b.ramp.v1.ResourceMutabilityR\x12resourceMutability\x12(\n" + + "hashMethod\x88\x01\x01\x12V\n" + + "\x13resource_mutability\x18\b \x01(\x0e2\x1b.ramp.v1.ResourceMutabilityB\b\xbaH\x05\x82\x01\x02 \x00R\x12resourceMutability\x12(\n" + "\rc2pa_manifest\x18\a \x01(\tH\x06R\fc2paManifest\x88\x01\x01\x129\n" + "\vc2pa_status\x18\t \x01(\x0e2\x13.ramp.v1.C2PAStatusH\aR\n" + "c2paStatus\x88\x01\x01\x12&\n" + @@ -8412,8 +8412,7 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + " \x01(\tH\bR\vsoftBinding\x88\x01\x01\x123\n" + "\x13soft_binding_method\x18\v \x01(\tH\tR\x11softBindingMethod\x88\x01\x01\x12)\n" + "\x03ext\x18\x0f \x01(\v2\x17.google.protobuf.StructR\x03ext\x12!\n" + - "\fext_critical\x18Z \x03(\tR\vextCritical:\xd1\x01\xbaH\xcd\x01\x1a\xca\x01\n" + - "/resource_identity.resource_mutability_specified\x12?resource_mutability must not be RESOURCE_MUTABILITY_UNSPECIFIED\x1aVthis.resource_mutability != ramp.v1.ResourceMutability.RESOURCE_MUTABILITY_UNSPECIFIEDB\x10\n" + + "\fext_critical\x18Z \x03(\tR\vextCriticalB\x10\n" + "\x0e_canonical_urlB\x06\n" + "\x04_doiB\f\n" + "\n" + @@ -8447,48 +8446,43 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "\x05_nameB\f\n" + "\n" + "_immutableB\r\n" + - "\v_uri_digest\"\xe4\x06\n" + - "\vRestriction\x12,\n" + - "\x04kind\x18\x01 \x01(\x0e2\x18.ramp.v1.RestrictionKindR\x04kind\x12\xeb\x01\n" + + "\v_uri_digest\"\xdd\x05\n" + + "\vRestriction\x126\n" + + "\x04kind\x18\x01 \x01(\x0e2\x18.ramp.v1.RestrictionKindB\b\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12\xeb\x01\n" + "\tpermitted\x18\x02 \x03(\tB\xcc\x01\xbaH\xc8\x01\xba\x01\xbf\x01\n" + "\x1crestriction.permitted.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches('^[A-Za-z0-9._:*-]+$'))\x92\x01\x02\x10@R\tpermitted\x12\xee\x01\n" + "\n" + "prohibited\x18\x03 \x03(\tB\xcd\x01\xbaH\xc9\x01\xba\x01\xc0\x01\n" + "\x1drestriction.prohibited.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches('^[A-Za-z0-9._:*-]+$'))\x92\x01\x02\x10@R\n" + "prohibited\x12\x1a\n" + - "\badvisory\x18\x04 \x01(\bR\badvisory:\xab\x02\xbaH\xa7\x02\x1a\x93\x01\n" + - ")restriction.permitted_prohibited_disjoint\x126a token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\x1a\x8e\x01\n" + - "\x1arestriction.kind_specified\x12-kind must not be RESTRICTION_KIND_UNSPECIFIED\x1aAthis.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED\"\xe4\x04\n" + + "\badvisory\x18\x04 \x01(\bR\badvisory:\x9a\x01\xbaH\x96\x01\x1a\x93\x01\n" + + ")restriction.permitted_prohibited_disjoint\x126a token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\"\xe2\x03\n" + "\x05Quota\x12\x81\x03\n" + "\x06metric\x18\x01 \x01(\tB\xe8\x02\xbaH\xe5\x01\xba\x01\xdd\x01\n" + "\x13quota.metric.format\x12cmetric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, ≤64 chars)\x1aathis != '' && (this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$'))r\x02\x18@\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\vimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\finput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\baccesses\x8a\xb5\x18\x06copies\x8a\xb5\x18\x05seats\x9a\xb5\x18\fquotametricsR\x06metric\x12\x1d\n" + - "\x05limit\x18\x02 \x01(\x03B\a\xbaH\x04\"\x02(\x01R\x05limit\x12,\n" + - "\x06window\x18\x03 \x01(\x0e2\x14.ramp.v1.QuotaWindowR\x06window:\x89\x01\xbaH\x85\x01\x1a\x82\x01\n" + - "\x16quota.window_specified\x12+window must not be QUOTA_WINDOW_UNSPECIFIED\x1a;this.window != ramp.v1.QuotaWindow.QUOTA_WINDOW_UNSPECIFIED\"\xb0\x06\n" + + "\x05limit\x18\x02 \x01(\x03B\a\xbaH\x04\"\x02(\x01R\x05limit\x126\n" + + "\x06window\x18\x03 \x01(\x0e2\x14.ramp.v1.QuotaWindowB\b\xbaH\x05\x82\x01\x02 \x00R\x06window\"\x98\x04\n" + "\n" + - "Obligation\x12+\n" + - "\x04kind\x18\x01 \x01(\x0e2\x17.ramp.v1.ObligationKindR\x04kind\x124\n" + - "\atrigger\x18\x02 \x01(\x0e2\x1a.ramp.v1.ObligationTriggerR\atrigger\x12:\n" + + "Obligation\x125\n" + + "\x04kind\x18\x01 \x01(\x0e2\x17.ramp.v1.ObligationKindB\b\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12>\n" + + "\atrigger\x18\x02 \x01(\x0e2\x1a.ramp.v1.ObligationTriggerB\b\xbaH\x05\x82\x01\x02 \x00R\atrigger\x12:\n" + "\rscope_license\x18\x03 \x01(\v2\x10.ramp.v1.LicenseH\x00R\fscopeLicense\x88\x01\x01\x12\x1b\n" + - "\x06detail\x18\x04 \x01(\tH\x01R\x06detail\x88\x01\x01:\xc8\x04\xbaH\xc4\x04\x1a\x95\x02\n" + - "-obligation.share_alike.requires_scope_license\x12DSHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != '' || this.scope_license.uri != ''))\x1a\x8a\x01\n" + - "\x19obligation.kind_specified\x12,kind must not be OBLIGATION_KIND_UNSPECIFIED\x1a?this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_UNSPECIFIED\x1a\x9c\x01\n" + - "\x1cobligation.trigger_specified\x122trigger must not be OBLIGATION_TRIGGER_UNSPECIFIED\x1aHthis.trigger != ramp.v1.ObligationTrigger.OBLIGATION_TRIGGER_UNSPECIFIEDB\x10\n" + + "\x06detail\x18\x04 \x01(\tH\x01R\x06detail\x88\x01\x01:\x9c\x02\xbaH\x98\x02\x1a\x95\x02\n" + + "-obligation.share_alike.requires_scope_license\x12DSHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != '' || this.scope_license.uri != ''))B\x10\n" + "\x0e_scope_licenseB\t\n" + - "\a_detail\"\xe6\a\n" + + "\a_detail\"\xd5\x06\n" + "\vLicenseTerm\x12/\n" + - "\alicense\x18\x01 \x01(\v2\x10.ramp.v1.LicenseH\x00R\alicense\x88\x01\x01\x124\n" + - "\tsemantics\x18\x02 \x01(\x0e2\x16.ramp.v1.TermSemanticsR\tsemantics\x128\n" + + "\alicense\x18\x01 \x01(\v2\x10.ramp.v1.LicenseH\x00R\alicense\x88\x01\x01\x12>\n" + + "\tsemantics\x18\x02 \x01(\x0e2\x16.ramp.v1.TermSemanticsB\b\xbaH\x05\x82\x01\x02 \x00R\tsemantics\x128\n" + "\frestrictions\x18\x03 \x03(\v2\x14.ramp.v1.RestrictionR\frestrictions\x12&\n" + "\x06quotas\x18\x04 \x03(\v2\x0e.ramp.v1.QuotaR\x06quotas\x125\n" + "\vobligations\x18\x05 \x03(\v2\x13.ramp.v1.ObligationR\vobligations\x127\n" + "\apricing\x18\x06 \x01(\v2\x10.ramp.v1.PricingB\x06\xbaH\x03\xc8\x01\x01H\x01R\apricing\x88\x01\x01\x12 \n" + "\x06scopes\x18\a \x03(\tB\b\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\"\n" + "\n" + - "part_label\x18\b \x01(\tH\x02R\tpartLabel\x88\x01\x01:\xb0\x04\xbaH\xac\x04\x1a\xe2\x01\n" + + "part_label\x18\b \x01(\tH\x02R\tpartLabel\x88\x01\x01:\x95\x03\xbaH\x91\x03\x1a\xe2\x01\n" + "(license_term.reference_only.requires_uri\x12>REFERENCE_ONLY terms must carry a license with a non-empty uri\x1avthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != '')\x1a\xa9\x01\n" + - "%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)\x1a\x98\x01\n" + - " license_term.semantics_specified\x120semantics must not be TERM_SEMANTICS_UNSPECIFIED\x1aBthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_UNSPECIFIEDB\n" + + "%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)B\n" + "\n" + "\b_licenseB\n" + "\n" + @@ -8505,10 +8499,9 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "\x06_widthB\t\n" + "\a_heightB\v\n" + "\t_durationB\a\n" + - "\x05_size\"\x87\n" + - "\n" + - "\aPricing\x12+\n" + - "\x05model\x18\x01 \x01(\x0e2\x15.ramp.v1.PricingModelR\x05model\x12\x12\n" + + "\x05_size\"\x8a\t\n" + + "\aPricing\x125\n" + + "\x05model\x18\x01 \x01(\x0e2\x15.ramp.v1.PricingModelB\b\xbaH\x05\x82\x01\x02 \x00R\x05model\x12\x12\n" + "\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n" + "\bcurrency\x18\x03 \x01(\tR\bcurrency\x12 \n" + "\tunit_cost\x18\x04 \x01(\x01H\x00R\bunitCost\x88\x01\x01\x122\n" + @@ -8517,20 +8510,19 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "\x04unit\x18\b \x01(\tB\xae\x03\xbaH\xe9\x01\xba\x01\xe1\x01\n" + "\x13pricing.unit.format\x12iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, ≤64 chars)\x1a_this == '' || this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$')r\x02\x18@\x8a\xb5\x18\afetches\x8a\xb5\x18\baccesses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05calls\x8a\xb5\x18\x05pages\x8a\xb5\x18\aseconds\x8a\xb5\x18\aminutes\x8a\xb5\x18\arecords\x8a\xb5\x18\astreams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\n" + "characters\x8a\xb5\x18\x05bytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-km\x9a\xb5\x18\fpricingunitsH\x03R\x04unit\x88\x01\x01\x129\n" + - "\bmetering\x18\t \x01(\x0e2\x18.ramp.v1.PricingMeteringH\x04R\bmetering\x88\x01\x01:\xae\x03\xbaH\xaa\x03\x1a\x97\x01\n" + + "\bmetering\x18\t \x01(\x0e2\x18.ramp.v1.PricingMeteringH\x04R\bmetering\x88\x01\x01:\xa7\x02\xbaH\xa3\x02\x1a\x97\x01\n" + "\x1epricing.per_unit.requires_unit\x12'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != ''\x1a\x86\x01\n" + - "\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0\x1a\x84\x01\n" + - "\x17pricing.model_specified\x12+model must not be PRICING_MODEL_UNSPECIFIED\x1a^P!P=_pu^`J*N|ykof%4e0%d-D-?&G`P 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 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\x06values\"\xa1\x03\n\rResourceQuery\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12:\n\x08\x64\x65\x61\x64line\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x08\x64\x65\x61\x64line\x88\x01\x01\x12-\n\x12supported_profiles\x18\x07 \x03(\tR\x11supportedProfiles\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_deadline\"\xb9\x02\n\x10ResourceResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x65xchange\x18\x03 \x01(\tR\x08\x65xchange\x12&\n\x06offers\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12\x36\n\x0coffer_groups\x18\x05 \x03(\x0b\x32\x13.ramp.v1.OfferGroupR\x0bofferGroups\x12:\n\nrate_limit\x18\x06 \x01(\x0b\x32\x16.ramp.v1.RateLimitInfoH\x00R\trateLimit\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_rate_limit\"\xcc\x02\n\nOfferGroup\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12&\n\x06offers\x18\x02 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12H\n\x10\x64iscovery_method\x18\x03 \x01(\x0e\x32\x18.ramp.v1.DiscoveryMethodH\x00R\x0f\x64iscoveryMethod\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x04 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x01R\rabsenceReason\x88\x01\x01\x12I\n\x13restriction_filters\x18\x05 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x12restrictionFiltersB\x13\n\x11_discovery_methodB\x11\n\x0f_absence_reason\"\xbd\x01\n\rRateLimitInfo\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x1c\n\tremaining\x18\x02 \x01(\x05R\tremaining\x12\x35\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07resetAt\x12\x36\n\x06window\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x42\t\n\x07_window\"\x97\x02\n\x15SubscriptionQuotaInfo\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1f\n\x0bquota_limit\x18\x02 \x01(\x05R\nquotaLimit\x12\x1d\n\nquota_used\x18\x03 \x01(\x05R\tquotaUsed\x12\'\n\x0fquota_remaining\x18\x04 \x01(\x05R\x0equotaRemaining\x12<\n\tresets_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x08resetsAt\x88\x01\x01\x12\x17\n\x04unit\x18\x06 \x01(\tH\x01R\x04unit\x88\x01\x01\x42\x0c\n\n_resets_atB\x07\n\x05_unit\"\xdb\x07\n\x05Offer\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12*\n\x07pricing\x18\x03 \x01(\x0b\x32\x10.ramp.v1.PricingR\x07pricing\x12@\n\x0f\x64\x65livery_method\x18\x04 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12?\n\treporting\x18\x05 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\treporting\x88\x01\x01\x12>\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12:\n\x08identity\x18\x07 \x01(\x0b\x32\x19.ramp.v1.ResourceIdentityH\x03R\x08identity\x88\x01\x01\x12\x1c\n\tsignature\x18\t \x01(\tR\tsignature\x12/\n\x13signature_algorithm\x18\n \x01(\tR\x12signatureAlgorithm\x12,\n\x0fsubscription_id\x18\x0b \x01(\tH\x04R\x0esubscriptionId\x88\x01\x01\x12%\n\x0eiab_categories\x18\r \x03(\tR\riabCategories\x12@\n\x0c\x61ttestations\x18\x0e \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12=\n\ndata_as_of\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\x08\x64\x61taAsOf\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12,\n\x08previews\x18\x12 \x03(\x0b\x32\x10.ramp.v1.PreviewR\x08previews\x12*\n\x05terms\x18\x13 \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x08\n\x06_titleB\x0c\n\n_reportingB\r\n\x0b_expires_atB\x0b\n\t_identityB\x12\n\x10_subscription_idB\r\n\x0b_data_as_of\"\xab\x07\n\x10ResourceIdentity\x12(\n\rcanonical_url\x18\x01 \x01(\tH\x00R\x0c\x63\x61nonicalUrl\x88\x01\x01\x12\x15\n\x03\x64oi\x18\x02 \x01(\tH\x01R\x03\x64oi\x88\x01\x01\x12 \n\tiptc_guid\x18\x03 \x01(\tH\x02R\x08iptcGuid\x88\x01\x01\x12\x17\n\x04isni\x18\x04 \x01(\tH\x03R\x04isni\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x05 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x06 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12L\n\x13resource_mutability\x18\x08 \x01(\x0e\x32\x1b.ramp.v1.ResourceMutabilityR\x12resourceMutability\x12(\n\rc2pa_manifest\x18\x07 \x01(\tH\x06R\x0c\x63\x32paManifest\x88\x01\x01\x12\x39\n\x0b\x63\x32pa_status\x18\t \x01(\x0e\x32\x13.ramp.v1.C2PAStatusH\x07R\nc2paStatus\x88\x01\x01\x12&\n\x0csoft_binding\x18\n \x01(\tH\x08R\x0bsoftBinding\x88\x01\x01\x12\x33\n\x13soft_binding_method\x18\x0b \x01(\tH\tR\x11softBindingMethod\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\xd1\x01\xbaH\xcd\x01\x1a\xca\x01\n/resource_identity.resource_mutability_specified\x12?resource_mutability must not be RESOURCE_MUTABILITY_UNSPECIFIED\x1aVthis.resource_mutability != ramp.v1.ResourceMutability.RESOURCE_MUTABILITY_UNSPECIFIEDB\x10\n\x0e_canonical_urlB\x06\n\x04_doiB\x0c\n\n_iptc_guidB\x07\n\x05_isniB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\x10\n\x0e_c2pa_manifestB\x0e\n\x0c_c2pa_statusB\x0f\n\r_soft_bindingB\x16\n\x14_soft_binding_method\"\xe1\x01\n\x13ResourceAttestation\x12\x1a\n\x08verifier\x18\x01 \x01(\tR\x08verifier\x12\x10\n\x03kid\x18\x02 \x01(\tR\x03kid\x12;\n\x0b\x61ttested_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nattestedAt\x12\x10\n\x03uri\x18\x04 \x01(\tR\x03uri\x12/\n\x06\x63laims\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63laims\x12\x1c\n\tsignature\x18\x06 \x01(\tR\tsignature\"\xd4\x04\n\x07License\x12\x15\n\x03uri\x18\x01 \x01(\tH\x00R\x03uri\x88\x01\x01\x12\x13\n\x02id\x18\x02 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x17\n\x04name\x18\x03 \x01(\tH\x02R\x04name\x88\x01\x01\x12!\n\timmutable\x18\x04 \x01(\x08H\x03R\timmutable\x88\x01\x01\x12\xad\x02\n\nuri_digest\x18\x05 \x01(\tB\x88\x02\xbaH\x84\x02\xba\x01\x80\x02\n\x19license.uri_digest.format\x12Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\x1a\x86\x01this == \'\' || this.matches(\'^sha256:[0-9a-f]{64}$\') || this.matches(\'^sha384:[0-9a-f]{96}$\') || this.matches(\'^sha512:[0-9a-f]{128}$\')H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n license.digest_required_with_uri\x12*uri_digest is required whenever uri is set\x1a\'this.uri == \'\' || this.uri_digest != \'\'B\x06\n\x04_uriB\x05\n\x03_idB\x07\n\x05_nameB\x0c\n\n_immutableB\r\n\x0b_uri_digest\"\xe4\x06\n\x0bRestriction\x12,\n\x04kind\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04kind\x12\xeb\x01\n\tpermitted\x18\x02 \x03(\tB\xcc\x01\xbaH\xc8\x01\x92\x01\x02\x10@\xba\x01\xbf\x01\n\x1crestriction.permitted.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\tpermitted\x12\xee\x01\n\nprohibited\x18\x03 \x03(\tB\xcd\x01\xbaH\xc9\x01\x92\x01\x02\x10@\xba\x01\xc0\x01\n\x1drestriction.prohibited.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\nprohibited\x12\x1a\n\x08\x61\x64visory\x18\x04 \x01(\x08R\x08\x61\x64visory:\xab\x02\xbaH\xa7\x02\x1a\x93\x01\n)restriction.permitted_prohibited_disjoint\x12\x36\x61 token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\x1a\x8e\x01\n\x1arestriction.kind_specified\x12-kind must not be RESTRICTION_KIND_UNSPECIFIED\x1a\x41this.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED\"\xe4\x04\n\x05Quota\x12\x81\x03\n\x06metric\x18\x01 \x01(\tB\xe8\x02\xbaH\xe5\x01r\x02\x18@\xba\x01\xdd\x01\n\x13quota.metric.format\x12\x63metric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a\x61this != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\x0bimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x0cinput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06\x63opies\x8a\xb5\x18\x05seats\x9a\xb5\x18\x0cquotametricsR\x06metric\x12\x1d\n\x05limit\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x05limit\x12,\n\x06window\x18\x03 \x01(\x0e\x32\x14.ramp.v1.QuotaWindowR\x06window:\x89\x01\xbaH\x85\x01\x1a\x82\x01\n\x16quota.window_specified\x12+window must not be QUOTA_WINDOW_UNSPECIFIED\x1a;this.window != ramp.v1.QuotaWindow.QUOTA_WINDOW_UNSPECIFIED\"\xb0\x06\n\nObligation\x12+\n\x04kind\x18\x01 \x01(\x0e\x32\x17.ramp.v1.ObligationKindR\x04kind\x12\x34\n\x07trigger\x18\x02 \x01(\x0e\x32\x1a.ramp.v1.ObligationTriggerR\x07trigger\x12:\n\rscope_license\x18\x03 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x0cscopeLicense\x88\x01\x01\x12\x1b\n\x06\x64\x65tail\x18\x04 \x01(\tH\x01R\x06\x64\x65tail\x88\x01\x01:\xc8\x04\xbaH\xc4\x04\x1a\x95\x02\n-obligation.share_alike.requires_scope_license\x12\x44SHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))\x1a\x8a\x01\n\x19obligation.kind_specified\x12,kind must not be OBLIGATION_KIND_UNSPECIFIED\x1a?this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_UNSPECIFIED\x1a\x9c\x01\n\x1cobligation.trigger_specified\x12\x32trigger must not be OBLIGATION_TRIGGER_UNSPECIFIED\x1aHthis.trigger != ramp.v1.ObligationTrigger.OBLIGATION_TRIGGER_UNSPECIFIEDB\x10\n\x0e_scope_licenseB\t\n\x07_detail\"\xe6\x07\n\x0bLicenseTerm\x12/\n\x07license\x18\x01 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x07license\x88\x01\x01\x12\x34\n\tsemantics\x18\x02 \x01(\x0e\x32\x16.ramp.v1.TermSemanticsR\tsemantics\x12\x38\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x14.ramp.v1.RestrictionR\x0crestrictions\x12&\n\x06quotas\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.QuotaR\x06quotas\x12\x35\n\x0bobligations\x18\x05 \x03(\x0b\x32\x13.ramp.v1.ObligationR\x0bobligations\x12\x37\n\x07pricing\x18\x06 \x01(\x0b\x32\x10.ramp.v1.PricingB\x06\xbaH\x03\xc8\x01\x01H\x01R\x07pricing\x88\x01\x01\x12 \n\x06scopes\x18\x07 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\"\n\npart_label\x18\x08 \x01(\tH\x02R\tpartLabel\x88\x01\x01:\xb0\x04\xbaH\xac\x04\x1a\xe2\x01\n(license_term.reference_only.requires_uri\x12>REFERENCE_ONLY terms must carry a license with a non-empty uri\x1avthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\x1a\xa9\x01\n%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)\x1a\x98\x01\n license_term.semantics_specified\x12\x30semantics must not be TERM_SEMANTICS_UNSPECIFIED\x1a\x42this.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_UNSPECIFIEDB\n\n\x08_licenseB\n\n\x08_pricingB\r\n\x0b_part_label\"\xd7\x01\n\x07Preview\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n\nmedia_type\x18\x02 \x01(\tR\tmediaType\x12\x19\n\x05width\x18\x03 \x01(\x05H\x00R\x05width\x88\x01\x01\x12\x1b\n\x06height\x18\x04 \x01(\x05H\x01R\x06height\x88\x01\x01\x12\x1f\n\x08\x64uration\x18\x05 \x01(\x05H\x02R\x08\x64uration\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\tH\x03R\x04size\x88\x01\x01\x42\x08\n\x06_widthB\t\n\x07_heightB\x0b\n\t_durationB\x07\n\x05_size\"\x87\n\n\x07Pricing\x12+\n\x05model\x18\x01 \x01(\x0e\x32\x15.ramp.v1.PricingModelR\x05model\x12\x12\n\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x04 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x05 \x01(\x05H\x01R\x11\x65stimatedQuantity\x88\x01\x01\x12;\n\x17license_duration_months\x18\x07 \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\xc8\x03\n\x04unit\x18\x08 \x01(\tB\xae\x03\xbaH\xe9\x01r\x02\x18@\xba\x01\xe1\x01\n\x13pricing.unit.format\x12iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\x8a\xb5\x18\x07\x66\x65tches\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05\x63\x61lls\x8a\xb5\x18\x05pages\x8a\xb5\x18\x07seconds\x8a\xb5\x18\x07minutes\x8a\xb5\x18\x07records\x8a\xb5\x18\x07streams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\ncharacters\x8a\xb5\x18\x05\x62ytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-km\x9a\xb5\x18\x0cpricingunitsH\x03R\x04unit\x88\x01\x01\x12\x39\n\x08metering\x18\t \x01(\x0e\x32\x18.ramp.v1.PricingMeteringH\x04R\x08metering\x88\x01\x01:\xae\x03\xbaH\xaa\x03\x1a\x97\x01\n\x1epricing.per_unit.requires_unit\x12\'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\x1a\x86\x01\n\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0\x1a\x84\x01\n\x17pricing.model_specified\x12+model must not be PRICING_MODEL_UNSPECIFIED\x1a\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\texpiresAt\x88\x01\x01\x12.\n\x13\x61gent_identity_hash\x18\n \x01(\tR\x11\x61gentIdentityHash\x12\x32\n\x12retrieval_endpoint\x18\x12 \x01(\tH\x06R\x11retrievalEndpoint\x88\x01\x01\x12,\n\x0fsubscription_id\x18\x0c \x01(\tH\x07R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x10 \x01(\x0b\x32\r.ramp.v1.CostH\x08R\x15subscriptionUnitValue\x88\x01\x01\x12\x34\n\x05items\x18\r \x03(\x0b\x32\x1e.ramp.v1.TransactionResultItemR\x05items\x12\x31\n\ntotal_cost\x18\x0e \x01(\x0b\x32\r.ramp.v1.CostH\tR\ttotalCost\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_transaction_idB\r\n\x0b_billing_idB\x11\n\x0f_resource_titleB\x07\n\x05_costB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\r\n\x0b_total_cost\"\xf3\x06\n\x15TransactionResultItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12%\n\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x03 \x01(\tR\tbillingId\x12*\n\x0eresource_title\x18\x04 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x05 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12,\n\x0fsubscription_id\x18\x06 \x01(\tH\x01R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x0b \x01(\x0b\x32\r.ramp.v1.CostH\x02R\x15subscriptionUnitValue\x88\x01\x01\x12?\n\rdenial_reason\x18\x07 \x01(\x0e\x32\x15.ramp.v1.DenialReasonH\x03R\x0c\x64\x65nialReason\x88\x01\x01\x12O\n\x16restriction_mismatches\x18\r \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12>\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\x0c \x01(\tH\x05R\x11retrievalEndpoint\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x06R\x13reportingObligation\x88\x01\x01\x42\x11\n\x0f_resource_titleB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\x10\n\x0e_denial_reasonB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x17\n\x15_reporting_obligation\"j\n\x04\x43ost\x12\x16\n\x06\x61mount\x18\x01 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x02 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x03 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x42\x0c\n\n_unit_cost\"\xe2\x01\n\x14PushResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x30\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x16.ramp.v1.ResourceEntryR\x07\x65ntries\x12\x1b\n\tcaller_id\x18\x04 \x01(\tR\x08\x63\x61llerId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xb3\x06\n\rResourceEntry\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\"\n\ncontent_id\x18\x03 \x01(\tH\x00R\tcontentId\x88\x01\x01\x12\x19\n\x05title\x18\x04 \x01(\tH\x01R\x05title\x88\x01\x01\x12\"\n\nword_count\x18\x05 \x01(\x05H\x02R\twordCount\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x06 \x01(\x05H\x03R\x11\x65stimatedQuantity\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x07 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x08 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12\x35\n\x06source\x18\t \x01(\x0e\x32\x18.ramp.v1.IngestionSourceH\x06R\x06source\x88\x01\x01\x12\x30\n\x11provenance_source\x18\n \x01(\tH\x07R\x10provenanceSource\x88\x01\x01\x12R\n\x14provenance_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x08R\x13provenanceTimestamp\x88\x01\x01\x12@\n\x0c\x61ttestations\x18\x0c \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12*\n\x05terms\x18\r \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_content_idB\x08\n\x06_titleB\r\n\x0b_word_countB\x15\n\x13_estimated_quantityB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\t\n\x07_sourceB\x14\n\x12_provenance_sourceB\x17\n\x15_provenance_timestamp\"\xcb\x01\n\x15PushResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x05R\x08\x61\x63\x63\x65pted\x12\x1a\n\x08rejected\x18\x03 \x01(\x05R\x08rejected\x12\x1a\n\x08warnings\x18\x04 \x03(\tR\x08warnings\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"]\n\x16RemoveResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\"E\n\x17RemoveResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07removed\x18\x02 \x01(\x05R\x07removed\"F\n\x15RefreshCatalogRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\"D\n\x16RefreshCatalogResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07started\x18\x02 \x01(\x08R\x07started\"\x99\x02\n\x13ReportingObligation\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\x12\x36\n\x06window\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x03 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12\'\n\x0frequired_fields\x18\x04 \x03(\tR\x0erequiredFields\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_windowB\x0b\n\t_endpoint\"\xa0\x03\n\x0bUsageReport\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12$\n\x05usage\x18\x05 \x01(\x0b\x32\x0e.ramp.v1.UsageR\x05usage\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1f\n\x08\x65xchange\x18\x08 \x01(\tH\x00R\x08\x65xchange\x88\x01\x01\x12+\n\x06\x61ssets\x18\t \x03(\x0b\x32\x13.ramp.v1.UsageAssetR\x06\x61ssets\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_exchange\"\xd1\x01\n\x11\x41ttributionDetail\x12(\n\rdisplayed_url\x18\x01 \x01(\tH\x00R\x0c\x64isplayedUrl\x88\x01\x01\x12\x34\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x17.ramp.v1.CitationFormatH\x01R\x06\x66ormat\x88\x01\x01\x12+\n\x0fvisible_to_user\x18\x03 \x01(\x08H\x02R\rvisibleToUser\x88\x01\x01\x42\x10\n\x0e_displayed_urlB\t\n\x07_formatB\x12\n\x10_visible_to_user\"\xf0\x04\n\x05Usage\x12\x1a\n\x08\x66unction\x18\x01 \x03(\tR\x08\x66unction\x12\x14\n\x05subfn\x18\x02 \x03(\tR\x05subfn\x12+\n\x11\x63onsumed_quantity\x18\x03 \x01(\x05R\x10\x63onsumedQuantity\x12/\n\x11\x64isplayed_to_user\x18\x04 \x01(\x08H\x00R\x0f\x64isplayedToUser\x88\x01\x01\x12\x30\n\x11\x63itation_included\x18\x05 \x01(\x08H\x01R\x10\x63itationIncluded\x88\x01\x01\x12<\n\x0b\x61ttribution\x18\x06 \x03(\x0b\x32\x1a.ramp.v1.AttributionDetailR\x0b\x61ttribution\x12\xa8\x02\n\rconsumed_unit\x18\x08 \x01(\tB\xfd\x01\xbaH\xf9\x01r\x02\x18@\xba\x01\xf1\x01\n\x1ausage.consumed_unit.format\x12rconsumed_unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')H\x02R\x0c\x63onsumedUnit\x88\x01\x01\x42\x14\n\x12_displayed_to_userB\x14\n\x12_citation_includedB\x10\n\x0e_consumed_unit\"v\n\nUsageAsset\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\"\n\npackage_id\x18\x03 \x01(\tH\x01R\tpackageId\x88\x01\x01\x42\x08\n\x06_titleB\r\n\x0b_package_id\"\x92\x01\n\x13UsageReportResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\treport_id\x18\x03 \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xa7\x04\n\x0bRAMPRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12\x42\n\x0b\x63onstraints\x18\x04 \x01(\x0b\x32\x1b.ramp.v1.RequestConstraintsH\x00R\x0b\x63onstraints\x88\x01\x01\x12-\n\x12supported_profiles\x18\x05 \x03(\tR\x11supportedProfiles\x12\x19\n\x05query\x18\x06 \x01(\tH\x01R\x05query\x88\x01\x01\x12\x43\n\x0esearch_filters\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02R\rsearchFilters\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_constraintsB\x08\n\x06_queryB\x11\n\x0f_search_filters\"\xca\x05\n\x12RequestConstraints\x12\x1c\n\texchanges\x18\x01 \x03(\tR\texchanges\x12/\n\tmax_price\x18\x02 \x01(\x0b\x32\r.ramp.v1.CostH\x00R\x08maxPrice\x88\x01\x01\x12\'\n\rmax_unit_cost\x18\x03 \x01(\x01H\x01R\x0bmaxUnitCost\x88\x01\x01\x12H\n\x13\x64\x65livery_preference\x18\x04 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x12\x64\x65liveryPreference\x12\x30\n\x11reporting_capable\x18\x05 \x01(\x08H\x02R\x10reportingCapable\x88\x01\x01\x12/\n\x13preferred_exchanges\x18\x06 \x03(\tR\x12preferredExchanges\x12&\n\x0c\x62udget_scope\x18\x07 \x01(\tH\x03R\x0b\x62udgetScope\x88\x01\x01\x12\x37\n\rperiod_budget\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostH\x04R\x0cperiodBudget\x88\x01\x01\x12\x43\n\rbudget_period\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationH\x05R\x0c\x62udgetPeriod\x88\x01\x01\x12@\n\x0cmax_data_age\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x06R\nmaxDataAge\x88\x01\x01\x12\x1e\n\x08max_hops\x18\x0b \x01(\x05H\x07R\x07maxHops\x88\x01\x01\x42\x0c\n\n_max_priceB\x10\n\x0e_max_unit_costB\x14\n\x12_reporting_capableB\x0f\n\r_budget_scopeB\x10\n\x0e_period_budgetB\x10\n\x0e_budget_periodB\x0f\n\r_max_data_ageB\x0b\n\t_max_hops\"\xb0\x01\n\nJsonWebKey\x12\x10\n\x03kid\x18\x01 \x01(\tR\x03kid\x12\x10\n\x03kty\x18\x02 \x01(\tR\x03kty\x12\x10\n\x03\x63rv\x18\x03 \x01(\tR\x03\x63rv\x12\x10\n\x03use\x18\x04 \x01(\tR\x03use\x12\x10\n\x03\x61lg\x18\x05 \x01(\tR\x03\x61lg\x12\x0c\n\x01x\x18\x06 \x01(\tR\x01x\x12\x1d\n\nnot_before\x18\x07 \x01(\tR\tnotBefore\x12\x1b\n\tnot_after\x18\x08 \x01(\tR\x08notAfter\"\xdf\r\n\x11WellKnownManifest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12!\n\x04role\x18\x02 \x01(\x0e\x32\r.ramp.v1.RoleR\x04role\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x1d\n\x07\x63ontact\x18\x04 \x01(\tH\x00R\x07\x63ontact\x88\x01\x01\x12\x34\n\x0bpublic_keys\x18\x05 \x03(\x0b\x32\x13.ramp.v1.JsonWebKeyR\npublicKeys\x12.\n\x10invalidation_url\x18\x06 \x01(\tH\x01R\x0finvalidationUrl\x88\x01\x01\x12\x39\n\texchanges\x18\x07 \x03(\x0b\x32\x1b.ramp.v1.AuthorizedExchangeR\texchanges\x12N\n\x14\x63\x61talog_contributors\x18\x08 \x03(\x0b\x32\x1b.ramp.v1.CatalogContributorR\x13\x63\x61talogContributors\x12\x17\n\x04name\x18\t \x01(\tH\x02R\x04name\x88\x01\x01\x12\x1f\n\x08operator\x18\n \x01(\tH\x03R\x08operator\x88\x01\x01\x12,\n\x0foperator_domain\x18\x0b \x01(\tH\x04R\x0eoperatorDomain\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x0c \x01(\tH\x05R\x08\x65ndpoint\x88\x01\x01\x12,\n\x0fhealth_endpoint\x18\r \x01(\tH\x06R\x0ehealthEndpoint\x88\x01\x01\x12.\n\x10\x63\x61talog_endpoint\x18\x0e \x01(\tH\x07R\x0f\x63\x61talogEndpoint\x88\x01\x01\x12>\n\x1bprotocol_versions_supported\x18\x10 \x03(\tR\x19protocolVersionsSupported\x12O\n\x18pricing_models_supported\x18\x11 \x03(\x0e\x32\x15.ramp.v1.PricingModelR\x16pricingModelsSupported\x12U\n\x1a\x64\x65livery_methods_supported\x18\x12 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x18\x64\x65liveryMethodsSupported\x12\x34\n\x16hash_methods_supported\x18\x13 \x03(\tR\x14hashMethodsSupported\x12-\n\x12\x61\x63\x63\x65pted_verifiers\x18\x14 \x03(\tR\x11\x61\x63\x63\x65ptedVerifiers\x12 \n\tterms_uri\x18\x15 \x01(\tH\x08R\x08termsUri\x88\x01\x01\x12$\n\x0bprivacy_uri\x18\x16 \x01(\tH\tR\nprivacyUri\x88\x01\x01\x12-\n\x12supported_profiles\x18\x17 \x03(\tR\x11supportedProfiles\x12I\n\x16supported_auth_methods\x18\x18 \x03(\x0e\x32\x13.ramp.v1.AuthMethodR\x14supportedAuthMethods\x12$\n\x0boidc_issuer\x18\x19 \x01(\tH\nR\noidcIssuer\x88\x01\x01\x12\x33\n\x13gnap_grant_endpoint\x18\x1a \x01(\tH\x0bR\x11gnapGrantEndpoint\x88\x01\x01\x12(\n\rbase_currency\x18\x1b \x01(\tH\x0cR\x0c\x62\x61seCurrency\x88\x01\x01\x12\x37\n\x15max_intermediary_hops\x18\x1c \x01(\x05H\rR\x13maxIntermediaryHops\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:x\xbaHu\x1as\n\"well_known_manifest.role_specified\x12!role must not be ROLE_UNSPECIFIED\x1a*this.role != ramp.v1.Role.ROLE_UNSPECIFIEDB\n\n\x08_contactB\x13\n\x11_invalidation_urlB\x07\n\x05_nameB\x0b\n\t_operatorB\x12\n\x10_operator_domainB\x0b\n\t_endpointB\x12\n\x10_health_endpointB\x13\n\x11_catalog_endpointB\x0c\n\n_terms_uriB\x0e\n\x0c_privacy_uriB\x0e\n\x0c_oidc_issuerB\x16\n\x14_gnap_grant_endpointB\x10\n\x0e_base_currencyB\x18\n\x16_max_intermediary_hops\"`\n\x13KeyInvalidationList\x12/\n\x05\x61s_of\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04\x61sOf\x12\x18\n\x07revoked\x18\x02 \x03(\tR\x07revoked\"P\n\x12\x43\x61talogContributor\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\"\n\x0crelationship\x18\x02 \x01(\tR\x0crelationship\"\xa0\x03\n\x12\x41uthorizedExchange\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12\x41\n\x0crelationship\x18\x03 \x01(\x0e\x32\x1d.ramp.v1.ProviderRelationshipR\x0crelationship\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\xc4\x01\xbaH\xc0\x01\x1a\xbd\x01\n*authorized_exchange.relationship_specified\x12:relationship must not be PROVIDER_RELATIONSHIP_UNSPECIFIED\x1aSthis.relationship != ramp.v1.ProviderRelationship.PROVIDER_RELATIONSHIP_UNSPECIFIED\"\xe8\x06\n\x0cRAMPResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12%\n\x0etransaction_id\x18\x04 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x05 \x01(\tR\tbillingId\x12\x1a\n\x08\x65xchange\x18\x06 \x01(\tR\x08\x65xchange\x12*\n\x0eresource_title\x18\x07 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\r \x01(\tH\x03R\x11retrievalEndpoint\x88\x01\x01\x12\x33\n\x13\x61gent_identity_hash\x18\x0e \x01(\tH\x04R\x11\x61gentIdentityHash\x88\x01\x01\x12\x31\n\nbroker_fee\x18\x0c \x01(\x0b\x32\r.ramp.v1.CostH\x05R\tbrokerFee\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x10 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x06R\rabsenceReason\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_resource_titleB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x16\n\x14_agent_identity_hashB\r\n\x0b_broker_feeB\x11\n\x0f_absence_reason\"\xab\x05\n\x0e\x44isputeRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12.\n\x06reason\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeReasonR\x06reason\x12%\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x37\n\x15received_content_hash\x18\x07 \x01(\tH\x01R\x13receivedContentHash\x88\x01\x01\x12\x35\n\x14received_hash_method\x18\x08 \x01(\tH\x02R\x12receivedHashMethod\x88\x01\x01\x12\x1b\n\treport_id\x18\t \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical:\x99\x01\xbaH\x95\x01\x1a\x92\x01\n dispute_request.reason_specified\x12-reason must not be DISPUTE_REASON_UNSPECIFIED\x1a?this.reason != ramp.v1.DisputeReason.DISPUTE_REASON_UNSPECIFIEDB\x0e\n\x0c_descriptionB\x18\n\x16_received_content_hashB\x17\n\x15_received_hash_method\"\x8d\x03\n\x0f\x44isputeResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\"\n\ndispute_id\x18\x02 \x01(\tH\x00R\tdisputeId\x88\x01\x01\x12Q\n\x14\x65stimated_resolution\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01R\x13\x65stimatedResolution\x88\x01\x01\x12.\n\x06status\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeStatusR\x06status\x12<\n\nresolution\x18\x06 \x01(\x0e\x32\x17.ramp.v1.ResolutionTypeH\x02R\nresolution\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_dispute_idB\x17\n\x15_estimated_resolutionB\r\n\x0b_resolution\"\xc3\x01\n\x19\x44omainVerificationRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12 \n\tcaller_id\x18\x03 \x01(\tH\x00R\x08\x63\x61llerId\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0c\n\n_caller_id\"\xf9\x01\n\x1b\x44omainVerificationChallenge\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12)\n\x10verification_url\x18\x04 \x01(\tR\x0fverificationUrl\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\x91\x02\n\x1e\x44omainVerificationConfirmation\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12$\n\x0bsigning_key\x18\x04 \x01(\tH\x00R\nsigningKey\x88\x01\x01\x12\x1e\n\x08\x63\x64n_type\x18\x05 \x01(\tH\x01R\x07\x63\x64nType\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_signing_keyB\x0b\n\t_cdn_type\"\xf3\x01\n\x18\x44omainVerificationResult\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x06key_id\x18\x02 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12@\n\x0bvalid_until\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nvalidUntil\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_key_idB\x0e\n\x0c_valid_until\"\x88\x06\n\x0b\x45rrorDetail\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12>\n\x08metadata\x18\x03 \x03(\x0b\x32\".ramp.v1.ErrorDetail.MetadataEntryR\x08metadata\x12K\n\x12transaction_denial\x18\n \x01(\x0b\x32\x1a.ramp.v1.TransactionDenialH\x00R\x11transactionDenial\x12H\n\x11\x63\x61talog_rejection\x18\x0b \x01(\x0b\x32\x19.ramp.v1.CatalogRejectionH\x00R\x10\x63\x61talogRejection\x12Q\n\x14registration_failure\x18\x0c \x01(\x0b\x32\x1c.ramp.v1.RegistrationFailureH\x00R\x13registrationFailure\x12\x42\n\x0f\x64ispute_failure\x18\r \x01(\x0b\x32\x17.ramp.v1.DisputeFailureH\x00R\x0e\x64isputeFailure\x12\x64\n\x1b\x64omain_verification_failure\x18\x0e \x01(\x0b\x32\".ramp.v1.DomainVerificationFailureH\x00R\x19\x64omainVerificationFailure\x12U\n\x16retrieval_auth_failure\x18\x0f \x01(\x0b\x32\x1d.ramp.v1.RetrievalAuthFailureH\x00R\x14retrievalAuthFailure\x12U\n\x16usage_report_rejection\x18\x10 \x01(\x0b\x32\x1d.ramp.v1.UsageReportRejectionH\x00R\x14usageReportRejection\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06reason\"\xcc\x01\n\x11TransactionDenial\x12\x39\n\x06reason\x18\x01 \x01(\x0e\x32\x15.ramp.v1.DenialReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12O\n\x16restriction_mismatches\x18\x02 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x42\x0b\n\t_offer_id\"~\n\x10\x43\x61talogRejection\x12\x43\n\x06reason\x18\x01 \x01(\x0e\x32\x1f.ramp.v1.CatalogRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12%\n\x0erejected_paths\x18\x02 \x03(\tR\rrejectedPaths\"]\n\x13RegistrationFailure\x12\x46\n\x06reason\x18\x01 \x01(\x0e\x32\".ramp.v1.RegistrationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"S\n\x0e\x44isputeFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32\x1d.ramp.v1.DisputeFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"i\n\x19\x44omainVerificationFailure\x12L\n\x06reason\x18\x01 \x01(\x0e\x32(.ramp.v1.DomainVerificationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14RetrievalAuthFailure\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.RetrievalAuthFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14UsageReportRejection\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.UsageReportRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason*\xb6\x01\n\x0f\x44iscoveryMethod\x12 \n\x1c\x44ISCOVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x44ISCOVERY_METHOD_EXCHANGE\x10\x01\x12\x1b\n\x17\x44ISCOVERY_METHOD_SEARCH\x10\x02\x12#\n\x1f\x44ISCOVERY_METHOD_RECOMMENDATION\x10\x03\x12 \n\x1c\x44ISCOVERY_METHOD_SYNDICATION\x10\x04*\xf9\x02\n\x12OfferAbsenceReason\x12$\n OFFER_ABSENCE_REASON_UNSPECIFIED\x10\x00\x12\'\n#OFFER_ABSENCE_REASON_NOT_IN_CATALOG\x10\x01\x12(\n$OFFER_ABSENCE_REASON_CONTENT_BLOCKED\x10\x02\x12-\n)OFFER_ABSENCE_REASON_RESTRICTION_FILTERED\x10\x03\x12\x30\n,OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE\x10\x04\x12\'\n#OFFER_ABSENCE_REASON_NOT_AUTHORIZED\x10\x05\x12+\n\'OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT\x10\x06\x12\x33\n/OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION\x10\x07*q\n\rTermSemantics\x12\x1e\n\x1aTERM_SEMANTICS_UNSPECIFIED\x10\x00\x12\x1d\n\x19TERM_SEMANTICS_ENUMERATED\x10\x01\x12!\n\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xe5\x04\n\x0fRestrictionKind\x12 \n\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xbe\x02\n\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x9e\x02\x92\xb5\x18\x03\x61ll\x92\xb5\x18\x06\x61i-all\x92\xb5\x18\x08\x61i-train\x92\xb5\x18\x08\x61i-input\x92\xb5\x18\x08\x61i-index\x92\xb5\x18\x06search\x92\xb5\x18\x05\x63rawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\ncommercial\x92\xb5\x18\x0b\x61\x64vertising\x92\xb5\x18\teditorial\x92\xb5\x18\x08research\x92\xb5\x18\treproduce\x92\xb5\x18\ndistribute\x92\xb5\x18\x06modify\x92\xb5\x18\x07\x64isplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\x0bmanufacture\x92\xb5\x18\x04sell\xa2\xb5\x18\x0e\x66unctiontokens\x12\x45\n\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a%\x92\xb5\x18\x01*\x92\xb5\x18\x02\x45U\x92\xb5\x18\x03\x45\x45\x41\xa2\xb5\x18\x0fgeographytokens\x12\x8b\x01\n\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1ak\x92\xb5\x18\nindividual\x92\xb5\x18\x08\x61\x63\x61\x64\x65mic\x92\xb5\x18\nnon_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\x0b\x62roadcaster\x92\xb5\x18\x11\x63ommercial_entity\xa2\xb5\x18\tusertypes\x12\x1a\n\x16RESTRICTION_KIND_OTHER\x10\x04*\x8e\x01\n\x0bQuotaWindow\x12\x1c\n\x18QUOTA_WINDOW_UNSPECIFIED\x10\x00\x12\x17\n\x13QUOTA_WINDOW_HOURLY\x10\x01\x12\x16\n\x12QUOTA_WINDOW_DAILY\x10\x02\x12\x18\n\x14QUOTA_WINDOW_MONTHLY\x10\x03\x12\x16\n\x12QUOTA_WINDOW_TOTAL\x10\x04*\xf2\x01\n\x0eObligationKind\x12\x1f\n\x1bOBLIGATION_KIND_UNSPECIFIED\x10\x00\x12\x1f\n\x1bOBLIGATION_KIND_ATTRIBUTION\x10\x01\x12 \n\x1cOBLIGATION_KIND_CONTRIBUTION\x10\x02\x12\x1f\n\x1bOBLIGATION_KIND_SHARE_ALIKE\x10\x03\x12$\n OBLIGATION_KIND_NETWORK_COPYLEFT\x10\x04\x12\x1a\n\x16OBLIGATION_KIND_NOTICE\x10\x05\x12\x19\n\x15OBLIGATION_KIND_OTHER\x10\x06*\xcf\x01\n\x11ObligationTrigger\x12\"\n\x1eOBLIGATION_TRIGGER_UNSPECIFIED\x10\x00\x12\x1d\n\x19OBLIGATION_TRIGGER_ON_USE\x10\x01\x12&\n\"OBLIGATION_TRIGGER_ON_DISTRIBUTION\x10\x02\x12)\n%OBLIGATION_TRIGGER_ON_NETWORK_SERVICE\x10\x03\x12$\n OBLIGATION_TRIGGER_ON_DERIVATIVE\x10\x04*y\n\x0cPricingModel\x12\x1d\n\x19PRICING_MODEL_UNSPECIFIED\x10\x00\x12\x16\n\x12PRICING_MODEL_FREE\x10\x01\x12\x1a\n\x16PRICING_MODEL_PER_UNIT\x10\x02\x12\x16\n\x12PRICING_MODEL_FLAT\x10\x03*u\n\x0fPricingMetering\x12\x1b\n\x17PRICING_METERING_ONLINE\x10\x00\x12\x19\n\x15PRICING_METERING_NONE\x10\x01\x12*\n&PRICING_METERING_OFFLINE_SELF_REPORTED\x10\x02*\x8e\x01\n\x0e\x44\x65liveryMethod\x12\x1f\n\x1b\x44\x45LIVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x44\x45LIVERY_METHOD_DIRECT\x10\x01\x12 \n\x1c\x44\x45LIVERY_METHOD_INSTRUCTIONS\x10\x02\x12\x1d\n\x19\x44\x45LIVERY_METHOD_STREAMING\x10\x03*\xbf\x01\n\rRequesterType\x12\x1e\n\x1aREQUESTER_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14REQUESTER_TYPE_AGENT\x10\x01\x12\x1d\n\x19REQUESTER_TYPE_HUMAN_TOOL\x10\x02\x12\x1a\n\x16REQUESTER_TYPE_SERVICE\x10\x03\x12\x1c\n\x18REQUESTER_TYPE_DELEGATED\x10\x04\x12\x1b\n\x17REQUESTER_TYPE_RESEARCH\x10\x05*\x8a\x01\n\nC2PAStatus\x12\x1b\n\x17\x43\x32PA_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x43\x32PA_STATUS_TRUSTED\x10\x01\x12\x15\n\x11\x43\x32PA_STATUS_VALID\x10\x02\x12\x17\n\x13\x43\x32PA_STATUS_INVALID\x10\x03\x12\x16\n\x12\x43\x32PA_STATUS_ABSENT\x10\x04*\x98\x01\n\x12ResourceMutability\x12#\n\x1fRESOURCE_MUTABILITY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aRESOURCE_MUTABILITY_STATIC\x10\x01\x12\x1f\n\x1bRESOURCE_MUTABILITY_DYNAMIC\x10\x02\x12\x1c\n\x18RESOURCE_MUTABILITY_LIVE\x10\x03*\xef\x05\n\x0c\x44\x65nialReason\x12\x1d\n\x19\x44\x45NIAL_REASON_UNSPECIFIED\x10\x00\x12&\n\"DENIAL_REASON_BILLING_REF_INACTIVE\x10\x01\x12&\n\"DENIAL_REASON_INSUFFICIENT_BALANCE\x10\x02\x12\x1e\n\x1a\x44\x45NIAL_REASON_RATE_LIMITED\x10\x03\x12%\n!DENIAL_REASON_CONTENT_UNAVAILABLE\x10\x04\x12+\n\'DENIAL_REASON_RESTRICTION_NOT_SATISFIED\x10\x05\x12#\n\x1f\x44\x45NIAL_REASON_REPORTING_OVERDUE\x10\x06\x12\x1f\n\x1b\x44\x45NIAL_REASON_OFFER_EXPIRED\x10\x07\x12#\n\x1f\x44\x45NIAL_REASON_SIGNATURE_INVALID\x10\x08\x12 \n\x1c\x44\x45NIAL_REASON_QUOTA_EXCEEDED\x10\t\x12$\n DENIAL_REASON_DELEGATION_INVALID\x10\n\x12$\n DENIAL_REASON_SCOPE_INSUFFICIENT\x10\x0b\x12%\n!DENIAL_REASON_ENTITLEMENT_MISSING\x10\x0c\x12\'\n#DENIAL_REASON_ENTITLEMENT_MALFORMED\x10\r\x12%\n!DENIAL_REASON_ENTITLEMENT_EXPIRED\x10\x0e\x12)\n%DENIAL_REASON_ENTITLEMENT_WRONG_BUYER\x10\x0f\x12%\n!DENIAL_REASON_SUBSCRIPTION_LAPSED\x10\x10\x12)\n%DENIAL_REASON_ENTITLEMENT_NOT_GRANTED\x10\x11\x12/\n+DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION\x10\x12*\x8c\x02\n\x0fIngestionSource\x12 \n\x1cINGESTION_SOURCE_UNSPECIFIED\x10\x00\x12!\n\x1dINGESTION_SOURCE_RAMP_SITEMAP\x10\x01\x12\x18\n\x14INGESTION_SOURCE_RSL\x10\x02\x12\x1c\n\x18INGESTION_SOURCE_SITEMAP\x10\x03\x12\x1f\n\x1bINGESTION_SOURCE_HTML_CRAWL\x10\x04\x12\x1c\n\x18INGESTION_SOURCE_CMS_API\x10\x05\x12\x1b\n\x17INGESTION_SOURCE_MANUAL\x10\x06\x12 \n\x1cINGESTION_SOURCE_CATALOG_API\x10\x07*d\n\x0e\x43itationFormat\x12\x18\n\x14\x43ITATION_FORMAT_LINK\x10\x00\x12\x1c\n\x18\x43ITATION_FORMAT_FOOTNOTE\x10\x01\x12\x1a\n\x16\x43ITATION_FORMAT_INLINE\x10\x02*d\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x0e\n\nROLE_AGENT\x10\x01\x12\x11\n\rROLE_EXCHANGE\x10\x02\x12\x0f\n\x0bROLE_BROKER\x10\x03\x12\x12\n\x0eROLE_PUBLISHER\x10\x04*\x83\x01\n\x14ProviderRelationship\x12%\n!PROVIDER_RELATIONSHIP_UNSPECIFIED\x10\x00\x12 \n\x1cPROVIDER_RELATIONSHIP_DIRECT\x10\x01\x12\"\n\x1ePROVIDER_RELATIONSHIP_RESELLER\x10\x02*\x95\x01\n\nAuthMethod\x12\x1b\n\x17\x41UTH_METHOD_UNSPECIFIED\x10\x00\x12\x14\n\x10\x41UTH_METHOD_GNAP\x10\x01\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_DPOP\x10\x02\x12\x1c\n\x18\x41UTH_METHOD_OAUTH_BEARER\x10\x03\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_MTLS\x10\x04*\xea\x01\n\rDisputeReason\x12\x1e\n\x1a\x44ISPUTE_REASON_UNSPECIFIED\x10\x00\x12#\n\x1f\x44ISPUTE_REASON_CONTENT_MISMATCH\x10\x01\x12\"\n\x1e\x44ISPUTE_REASON_DELIVERY_FAILED\x10\x02\x12 \n\x1c\x44ISPUTE_REASON_WRONG_CONTENT\x10\x03\x12\'\n#DISPUTE_REASON_EXPIRED_BEFORE_FETCH\x10\x04\x12%\n!DISPUTE_REASON_INCOMPLETE_CONTENT\x10\x05*\xbe\x02\n\rDisputeStatus\x12\x1e\n\x1a\x44ISPUTE_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14\x44ISPUTE_STATUS_FILED\x10\x01\x12 \n\x1c\x44ISPUTE_STATUS_AUTO_RESOLVED\x10\x02\x12\"\n\x1e\x44ISPUTE_STATUS_EVIDENCE_NEEDED\x10\x03\x12\x1f\n\x1b\x44ISPUTE_STATUS_UNDER_REVIEW\x10\x04\x12\x1c\n\x18\x44ISPUTE_STATUS_ESCALATED\x10\x05\x12\x1b\n\x17\x44ISPUTE_STATUS_RESOLVED\x10\x06\x12\x1b\n\x17\x44ISPUTE_STATUS_APPEALED\x10\x07\x12\x1a\n\x16\x44ISPUTE_STATUS_SETTLED\x10\x08\x12\x18\n\x14\x44ISPUTE_STATUS_FINAL\x10\t*\xae\x01\n\x0eResolutionType\x12\x1f\n\x1bRESOLUTION_TYPE_UNSPECIFIED\x10\x00\x12\x1a\n\x16RESOLUTION_TYPE_CREDIT\x10\x01\x12\x1e\n\x1aRESOLUTION_TYPE_REDELIVERY\x10\x02\x12\x1c\n\x18RESOLUTION_TYPE_REJECTED\x10\x03\x12!\n\x1dRESOLUTION_TYPE_INVESTIGATION\x10\x04*\x95\x03\n\x16\x43\x61talogRejectionReason\x12(\n$CATALOG_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x34\n0CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR\x10\x01\x12,\n(CATALOG_REJECTION_REASON_TENANT_MISMATCH\x10\x02\x12\x30\n,CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED\x10\x03\x12.\n*CATALOG_REJECTION_REASON_SIGNATURE_INVALID\x10\x04\x12,\n(CATALOG_REJECTION_REASON_MALFORMED_ENTRY\x10\x05\x12\x30\n,CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN\x10\x06\x12+\n\'CATALOG_REJECTION_REASON_QUOTA_EXCEEDED\x10\x07*\xc1\x02\n\x19RegistrationFailureReason\x12+\n\'REGISTRATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x33\n/REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED\x10\x01\x12+\n\'REGISTRATION_FAILURE_REASON_INVALID_KEY\x10\x02\x12\x31\n-REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID\x10\x03\x12\x32\n.REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED\x10\x04\x12.\n*REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED\x10\x05*\x95\x02\n\x14\x44isputeFailureReason\x12&\n\"DISPUTE_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x30\n,DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'DISPUTE_FAILURE_REASON_REPORT_NOT_FILED\x10\x02\x12)\n%DISPUTE_FAILURE_REASON_WINDOW_EXPIRED\x10\x03\x12$\n DISPUTE_FAILURE_REASON_DUPLICATE\x10\x04\x12%\n!DISPUTE_FAILURE_REASON_INELIGIBLE\x10\x05*\xbb\x03\n\x1f\x44omainVerificationFailureReason\x12\x32\n.DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12:\n6DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND\x10\x01\x12\x39\n5DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH\x10\x02\x12\x38\n4DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED\x10\x03\x12\x33\n/DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED\x10\x04\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED\x10\x05\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED\x10\x06*\xd9\x05\n\x1aRetrievalAuthFailureReason\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED\x10\x00\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED\x10\x01\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING\x10\x02\x12\x34\n0RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING\x10\x03\x12\x38\n4RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH\x10\x04\x12\x33\n/RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING\x10\x05\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING\x10\x06\x12\x30\n,RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH\x10\x07\x12\x35\n1RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH\x10\x08\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING\x10\t\x12\x36\n2RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING\x10\n\x12/\n+RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED\x10\x0b\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID\x10\x0c*\xcb\x02\n\x1aUsageReportRejectionReason\x12-\n)USAGE_REPORT_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x37\n3USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'USAGE_REPORT_REJECTION_REASON_DUPLICATE\x10\x02\x12\x30\n,USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED\x10\x03\x12\x39\n5USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS\x10\x04\x12+\n\'USAGE_REPORT_REJECTION_REASON_MALFORMED\x10\x05\x32\x86\x04\n\x0f\x45xchangeService\x12\x46\n\x11\x44iscoverResources\x12\x16.ramp.v1.ResourceQuery\x1a\x19.ramp.v1.ResourceResponse\x12O\n\x12\x45xecuteTransaction\x12\x1b.ramp.v1.TransactionRequest\x1a\x1c.ramp.v1.TransactionResponse\x12\x41\n\x0bReportUsage\x12\x14.ramp.v1.UsageReport\x1a\x1c.ramp.v1.UsageReportResponse\x12G\n\x12\x44isputeTransaction\x12\x17.ramp.v1.DisputeRequest\x1a\x18.ramp.v1.DisputeResponse\x12\x65\n\x19RequestDomainVerification\x12\".ramp.v1.DomainVerificationRequest\x1a$.ramp.v1.DomainVerificationChallenge\x12g\n\x19\x43onfirmDomainVerification\x12\'.ramp.v1.DomainVerificationConfirmation\x1a!.ramp.v1.DomainVerificationResult2\x89\x02\n\x0e\x43\x61talogService\x12N\n\rPushResources\x12\x1d.ramp.v1.PushResourcesRequest\x1a\x1e.ramp.v1.PushResourcesResponse\x12T\n\x0fRemoveResources\x12\x1f.ramp.v1.RemoveResourcesRequest\x1a .ramp.v1.RemoveResourcesResponse\x12Q\n\x0eRefreshCatalog\x12\x1e.ramp.v1.RefreshCatalogRequest\x1a\x1f.ramp.v1.RefreshCatalogResponse2G\n\rBrokerService\x12\x36\n\x07Resolve\x12\x14.ramp.v1.RAMPRequest\x1a\x15.ramp.v1.RAMPResponseB\x8e\x01\n\x0b\x63om.ramp.v1B\tRampProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12ramp/v1/ramp.proto\x12\x07ramp.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x13ramp/v1/vocab.proto\"\xb5\x02\n\x15\x41\x63\x63\x65ptableRestriction\x12,\n\x04\x61xis\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04\x61xis\x12\xed\x01\n\x06values\x18\x02 \x03(\tB\xd4\x01\xbaH\xd0\x01\x92\x01\x02\x10@\xba\x01\xc7\x01\n$acceptable_restriction.values.format\x12Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\x06values\"\xa1\x03\n\rResourceQuery\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12:\n\x08\x64\x65\x61\x64line\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x08\x64\x65\x61\x64line\x88\x01\x01\x12-\n\x12supported_profiles\x18\x07 \x03(\tR\x11supportedProfiles\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_deadline\"\xb9\x02\n\x10ResourceResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x65xchange\x18\x03 \x01(\tR\x08\x65xchange\x12&\n\x06offers\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12\x36\n\x0coffer_groups\x18\x05 \x03(\x0b\x32\x13.ramp.v1.OfferGroupR\x0bofferGroups\x12:\n\nrate_limit\x18\x06 \x01(\x0b\x32\x16.ramp.v1.RateLimitInfoH\x00R\trateLimit\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_rate_limit\"\xcc\x02\n\nOfferGroup\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12&\n\x06offers\x18\x02 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12H\n\x10\x64iscovery_method\x18\x03 \x01(\x0e\x32\x18.ramp.v1.DiscoveryMethodH\x00R\x0f\x64iscoveryMethod\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x04 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x01R\rabsenceReason\x88\x01\x01\x12I\n\x13restriction_filters\x18\x05 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x12restrictionFiltersB\x13\n\x11_discovery_methodB\x11\n\x0f_absence_reason\"\xbd\x01\n\rRateLimitInfo\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x1c\n\tremaining\x18\x02 \x01(\x05R\tremaining\x12\x35\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07resetAt\x12\x36\n\x06window\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x42\t\n\x07_window\"\x97\x02\n\x15SubscriptionQuotaInfo\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1f\n\x0bquota_limit\x18\x02 \x01(\x05R\nquotaLimit\x12\x1d\n\nquota_used\x18\x03 \x01(\x05R\tquotaUsed\x12\'\n\x0fquota_remaining\x18\x04 \x01(\x05R\x0equotaRemaining\x12<\n\tresets_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x08resetsAt\x88\x01\x01\x12\x17\n\x04unit\x18\x06 \x01(\tH\x01R\x04unit\x88\x01\x01\x42\x0c\n\n_resets_atB\x07\n\x05_unit\"\xdb\x07\n\x05Offer\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12*\n\x07pricing\x18\x03 \x01(\x0b\x32\x10.ramp.v1.PricingR\x07pricing\x12@\n\x0f\x64\x65livery_method\x18\x04 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12?\n\treporting\x18\x05 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\treporting\x88\x01\x01\x12>\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12:\n\x08identity\x18\x07 \x01(\x0b\x32\x19.ramp.v1.ResourceIdentityH\x03R\x08identity\x88\x01\x01\x12\x1c\n\tsignature\x18\t \x01(\tR\tsignature\x12/\n\x13signature_algorithm\x18\n \x01(\tR\x12signatureAlgorithm\x12,\n\x0fsubscription_id\x18\x0b \x01(\tH\x04R\x0esubscriptionId\x88\x01\x01\x12%\n\x0eiab_categories\x18\r \x03(\tR\riabCategories\x12@\n\x0c\x61ttestations\x18\x0e \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12=\n\ndata_as_of\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\x08\x64\x61taAsOf\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12,\n\x08previews\x18\x12 \x03(\x0b\x32\x10.ramp.v1.PreviewR\x08previews\x12*\n\x05terms\x18\x13 \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x08\n\x06_titleB\x0c\n\n_reportingB\r\n\x0b_expires_atB\x0b\n\t_identityB\x12\n\x10_subscription_idB\r\n\x0b_data_as_of\"\xe1\x05\n\x10ResourceIdentity\x12(\n\rcanonical_url\x18\x01 \x01(\tH\x00R\x0c\x63\x61nonicalUrl\x88\x01\x01\x12\x15\n\x03\x64oi\x18\x02 \x01(\tH\x01R\x03\x64oi\x88\x01\x01\x12 \n\tiptc_guid\x18\x03 \x01(\tH\x02R\x08iptcGuid\x88\x01\x01\x12\x17\n\x04isni\x18\x04 \x01(\tH\x03R\x04isni\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x05 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x06 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12V\n\x13resource_mutability\x18\x08 \x01(\x0e\x32\x1b.ramp.v1.ResourceMutabilityB\x08\xbaH\x05\x82\x01\x02 \x00R\x12resourceMutability\x12(\n\rc2pa_manifest\x18\x07 \x01(\tH\x06R\x0c\x63\x32paManifest\x88\x01\x01\x12\x39\n\x0b\x63\x32pa_status\x18\t \x01(\x0e\x32\x13.ramp.v1.C2PAStatusH\x07R\nc2paStatus\x88\x01\x01\x12&\n\x0csoft_binding\x18\n \x01(\tH\x08R\x0bsoftBinding\x88\x01\x01\x12\x33\n\x13soft_binding_method\x18\x0b \x01(\tH\tR\x11softBindingMethod\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x10\n\x0e_canonical_urlB\x06\n\x04_doiB\x0c\n\n_iptc_guidB\x07\n\x05_isniB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\x10\n\x0e_c2pa_manifestB\x0e\n\x0c_c2pa_statusB\x0f\n\r_soft_bindingB\x16\n\x14_soft_binding_method\"\xe1\x01\n\x13ResourceAttestation\x12\x1a\n\x08verifier\x18\x01 \x01(\tR\x08verifier\x12\x10\n\x03kid\x18\x02 \x01(\tR\x03kid\x12;\n\x0b\x61ttested_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nattestedAt\x12\x10\n\x03uri\x18\x04 \x01(\tR\x03uri\x12/\n\x06\x63laims\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63laims\x12\x1c\n\tsignature\x18\x06 \x01(\tR\tsignature\"\xd4\x04\n\x07License\x12\x15\n\x03uri\x18\x01 \x01(\tH\x00R\x03uri\x88\x01\x01\x12\x13\n\x02id\x18\x02 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x17\n\x04name\x18\x03 \x01(\tH\x02R\x04name\x88\x01\x01\x12!\n\timmutable\x18\x04 \x01(\x08H\x03R\timmutable\x88\x01\x01\x12\xad\x02\n\nuri_digest\x18\x05 \x01(\tB\x88\x02\xbaH\x84\x02\xba\x01\x80\x02\n\x19license.uri_digest.format\x12Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\x1a\x86\x01this == \'\' || this.matches(\'^sha256:[0-9a-f]{64}$\') || this.matches(\'^sha384:[0-9a-f]{96}$\') || this.matches(\'^sha512:[0-9a-f]{128}$\')H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n license.digest_required_with_uri\x12*uri_digest is required whenever uri is set\x1a\'this.uri == \'\' || this.uri_digest != \'\'B\x06\n\x04_uriB\x05\n\x03_idB\x07\n\x05_nameB\x0c\n\n_immutableB\r\n\x0b_uri_digest\"\xdd\x05\n\x0bRestriction\x12\x36\n\x04kind\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindB\x08\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12\xeb\x01\n\tpermitted\x18\x02 \x03(\tB\xcc\x01\xbaH\xc8\x01\x92\x01\x02\x10@\xba\x01\xbf\x01\n\x1crestriction.permitted.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\tpermitted\x12\xee\x01\n\nprohibited\x18\x03 \x03(\tB\xcd\x01\xbaH\xc9\x01\x92\x01\x02\x10@\xba\x01\xc0\x01\n\x1drestriction.prohibited.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\nprohibited\x12\x1a\n\x08\x61\x64visory\x18\x04 \x01(\x08R\x08\x61\x64visory:\x9a\x01\xbaH\x96\x01\x1a\x93\x01\n)restriction.permitted_prohibited_disjoint\x12\x36\x61 token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\"\xe2\x03\n\x05Quota\x12\x81\x03\n\x06metric\x18\x01 \x01(\tB\xe8\x02\xbaH\xe5\x01r\x02\x18@\xba\x01\xdd\x01\n\x13quota.metric.format\x12\x63metric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a\x61this != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\x0bimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x0cinput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06\x63opies\x8a\xb5\x18\x05seats\x9a\xb5\x18\x0cquotametricsR\x06metric\x12\x1d\n\x05limit\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x05limit\x12\x36\n\x06window\x18\x03 \x01(\x0e\x32\x14.ramp.v1.QuotaWindowB\x08\xbaH\x05\x82\x01\x02 \x00R\x06window\"\x98\x04\n\nObligation\x12\x35\n\x04kind\x18\x01 \x01(\x0e\x32\x17.ramp.v1.ObligationKindB\x08\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12>\n\x07trigger\x18\x02 \x01(\x0e\x32\x1a.ramp.v1.ObligationTriggerB\x08\xbaH\x05\x82\x01\x02 \x00R\x07trigger\x12:\n\rscope_license\x18\x03 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x0cscopeLicense\x88\x01\x01\x12\x1b\n\x06\x64\x65tail\x18\x04 \x01(\tH\x01R\x06\x64\x65tail\x88\x01\x01:\x9c\x02\xbaH\x98\x02\x1a\x95\x02\n-obligation.share_alike.requires_scope_license\x12\x44SHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))B\x10\n\x0e_scope_licenseB\t\n\x07_detail\"\xd5\x06\n\x0bLicenseTerm\x12/\n\x07license\x18\x01 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x07license\x88\x01\x01\x12>\n\tsemantics\x18\x02 \x01(\x0e\x32\x16.ramp.v1.TermSemanticsB\x08\xbaH\x05\x82\x01\x02 \x00R\tsemantics\x12\x38\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x14.ramp.v1.RestrictionR\x0crestrictions\x12&\n\x06quotas\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.QuotaR\x06quotas\x12\x35\n\x0bobligations\x18\x05 \x03(\x0b\x32\x13.ramp.v1.ObligationR\x0bobligations\x12\x37\n\x07pricing\x18\x06 \x01(\x0b\x32\x10.ramp.v1.PricingB\x06\xbaH\x03\xc8\x01\x01H\x01R\x07pricing\x88\x01\x01\x12 \n\x06scopes\x18\x07 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\"\n\npart_label\x18\x08 \x01(\tH\x02R\tpartLabel\x88\x01\x01:\x95\x03\xbaH\x91\x03\x1a\xe2\x01\n(license_term.reference_only.requires_uri\x12>REFERENCE_ONLY terms must carry a license with a non-empty uri\x1avthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\x1a\xa9\x01\n%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)B\n\n\x08_licenseB\n\n\x08_pricingB\r\n\x0b_part_label\"\xd7\x01\n\x07Preview\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n\nmedia_type\x18\x02 \x01(\tR\tmediaType\x12\x19\n\x05width\x18\x03 \x01(\x05H\x00R\x05width\x88\x01\x01\x12\x1b\n\x06height\x18\x04 \x01(\x05H\x01R\x06height\x88\x01\x01\x12\x1f\n\x08\x64uration\x18\x05 \x01(\x05H\x02R\x08\x64uration\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\tH\x03R\x04size\x88\x01\x01\x42\x08\n\x06_widthB\t\n\x07_heightB\x0b\n\t_durationB\x07\n\x05_size\"\x8a\t\n\x07Pricing\x12\x35\n\x05model\x18\x01 \x01(\x0e\x32\x15.ramp.v1.PricingModelB\x08\xbaH\x05\x82\x01\x02 \x00R\x05model\x12\x12\n\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x04 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x05 \x01(\x05H\x01R\x11\x65stimatedQuantity\x88\x01\x01\x12;\n\x17license_duration_months\x18\x07 \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\xc8\x03\n\x04unit\x18\x08 \x01(\tB\xae\x03\xbaH\xe9\x01r\x02\x18@\xba\x01\xe1\x01\n\x13pricing.unit.format\x12iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\x8a\xb5\x18\x07\x66\x65tches\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05\x63\x61lls\x8a\xb5\x18\x05pages\x8a\xb5\x18\x07seconds\x8a\xb5\x18\x07minutes\x8a\xb5\x18\x07records\x8a\xb5\x18\x07streams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\ncharacters\x8a\xb5\x18\x05\x62ytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-km\x9a\xb5\x18\x0cpricingunitsH\x03R\x04unit\x88\x01\x01\x12\x39\n\x08metering\x18\t \x01(\x0e\x32\x18.ramp.v1.PricingMeteringH\x04R\x08metering\x88\x01\x01:\xa7\x02\xbaH\xa3\x02\x1a\x97\x01\n\x1epricing.per_unit.requires_unit\x12\'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\x1a\x86\x01\n\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0B\x0c\n\n_unit_costB\x15\n\x13_estimated_quantityB\x1a\n\x18_license_duration_monthsB\x07\n\x05_unitB\x0b\n\t_metering\"\xfa\x02\n\tRequester\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x34\n\x04type\x18\x03 \x01(\x0e\x32\x16.ramp.v1.RequesterTypeB\x08\xbaH\x05\x82\x01\x02 \x00R\x04type\x12\x17\n\x04name\x18\x04 \x01(\tH\x00R\x04name\x88\x01\x01\x12$\n\x0b\x62illing_ref\x18\x05 \x01(\tH\x01R\nbillingRef\x88\x01\x01\x12 \n\x06scopes\x18\x06 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\x38\n\ndelegation\x18\x07 \x01(\x0b\x32\x13.ramp.v1.DelegationH\x02R\ndelegation\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x07\n\x05_nameB\x0e\n\x0c_billing_refB\r\n\x0b_delegation\"\xe9\x04\n\nDelegation\x12)\n\x10principal_domain\x18\x01 \x01(\tR\x0fprincipalDomain\x12!\n\x0cprincipal_id\x18\x02 \x01(\tR\x0bprincipalId\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\x12\x39\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12+\n\x0fmax_spend_cents\x18\x05 \x01(\x03H\x00R\rmaxSpendCents\x88\x01\x01\x12&\n\x0cmax_accesses\x18\t \x01(\x05H\x01R\x0bmaxAccesses\x88\x01\x01\x12\x41\n\x0cquota_period\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x02R\x0bquotaPeriod\x88\x01\x01\x12\x14\n\x05token\x18\x06 \x01(\x0cR\x05token\x12!\n\x0ctoken_format\x18\x07 \x01(\tR\x0btokenFormat\x12*\n\x0erevocation_uri\x18\x08 \x01(\tH\x03R\rrevocationUri\x88\x01\x01\x12\x1b\n\x06issuer\x18\x0b \x01(\tH\x04R\x06issuer\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x12\n\x10_max_spend_centsB\x0f\n\r_max_accessesB\x0f\n\r_quota_periodB\x11\n\x0f_revocation_uriB\t\n\x07_issuer\"\xf7\x02\n\x12TransactionRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x12\x30\n\trequester\x18\x04 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12,\n\x0foffer_signature\x18\x06 \x01(\tH\x01R\x0eofferSignature\x88\x01\x01\x12.\n\x05items\x18\x07 \x03(\x0b\x32\x18.ramp.v1.TransactionItemR\x05items\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_offer_idB\x12\n\x10_offer_signature\"U\n\x0fTransactionItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\'\n\x0foffer_signature\x18\x02 \x01(\tR\x0eofferSignature\"\xc3\x08\n\x13TransactionResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12*\n\x0etransaction_id\x18\x03 \x01(\tH\x00R\rtransactionId\x88\x01\x01\x12\"\n\nbilling_id\x18\x04 \x01(\tH\x01R\tbillingId\x88\x01\x01\x12*\n\x0eresource_title\x18\x05 \x01(\tH\x02R\rresourceTitle\x88\x01\x01\x12&\n\x04\x63ost\x18\x06 \x01(\x0b\x32\r.ramp.v1.CostH\x03R\x04\x63ost\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\x07 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\x08 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x04R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\texpiresAt\x88\x01\x01\x12.\n\x13\x61gent_identity_hash\x18\n \x01(\tR\x11\x61gentIdentityHash\x12\x32\n\x12retrieval_endpoint\x18\x12 \x01(\tH\x06R\x11retrievalEndpoint\x88\x01\x01\x12,\n\x0fsubscription_id\x18\x0c \x01(\tH\x07R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x10 \x01(\x0b\x32\r.ramp.v1.CostH\x08R\x15subscriptionUnitValue\x88\x01\x01\x12\x34\n\x05items\x18\r \x03(\x0b\x32\x1e.ramp.v1.TransactionResultItemR\x05items\x12\x31\n\ntotal_cost\x18\x0e \x01(\x0b\x32\r.ramp.v1.CostH\tR\ttotalCost\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_transaction_idB\r\n\x0b_billing_idB\x11\n\x0f_resource_titleB\x07\n\x05_costB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\r\n\x0b_total_cost\"\xf3\x06\n\x15TransactionResultItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12%\n\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x03 \x01(\tR\tbillingId\x12*\n\x0eresource_title\x18\x04 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x05 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12,\n\x0fsubscription_id\x18\x06 \x01(\tH\x01R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x0b \x01(\x0b\x32\r.ramp.v1.CostH\x02R\x15subscriptionUnitValue\x88\x01\x01\x12?\n\rdenial_reason\x18\x07 \x01(\x0e\x32\x15.ramp.v1.DenialReasonH\x03R\x0c\x64\x65nialReason\x88\x01\x01\x12O\n\x16restriction_mismatches\x18\r \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12>\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\x0c \x01(\tH\x05R\x11retrievalEndpoint\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x06R\x13reportingObligation\x88\x01\x01\x42\x11\n\x0f_resource_titleB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\x10\n\x0e_denial_reasonB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x17\n\x15_reporting_obligation\"j\n\x04\x43ost\x12\x16\n\x06\x61mount\x18\x01 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x02 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x03 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x42\x0c\n\n_unit_cost\"\xe2\x01\n\x14PushResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x30\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x16.ramp.v1.ResourceEntryR\x07\x65ntries\x12\x1b\n\tcaller_id\x18\x04 \x01(\tR\x08\x63\x61llerId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xb3\x06\n\rResourceEntry\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\"\n\ncontent_id\x18\x03 \x01(\tH\x00R\tcontentId\x88\x01\x01\x12\x19\n\x05title\x18\x04 \x01(\tH\x01R\x05title\x88\x01\x01\x12\"\n\nword_count\x18\x05 \x01(\x05H\x02R\twordCount\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x06 \x01(\x05H\x03R\x11\x65stimatedQuantity\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x07 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x08 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12\x35\n\x06source\x18\t \x01(\x0e\x32\x18.ramp.v1.IngestionSourceH\x06R\x06source\x88\x01\x01\x12\x30\n\x11provenance_source\x18\n \x01(\tH\x07R\x10provenanceSource\x88\x01\x01\x12R\n\x14provenance_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x08R\x13provenanceTimestamp\x88\x01\x01\x12@\n\x0c\x61ttestations\x18\x0c \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12*\n\x05terms\x18\r \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_content_idB\x08\n\x06_titleB\r\n\x0b_word_countB\x15\n\x13_estimated_quantityB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\t\n\x07_sourceB\x14\n\x12_provenance_sourceB\x17\n\x15_provenance_timestamp\"\xcb\x01\n\x15PushResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x05R\x08\x61\x63\x63\x65pted\x12\x1a\n\x08rejected\x18\x03 \x01(\x05R\x08rejected\x12\x1a\n\x08warnings\x18\x04 \x03(\tR\x08warnings\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"]\n\x16RemoveResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\"E\n\x17RemoveResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07removed\x18\x02 \x01(\x05R\x07removed\"F\n\x15RefreshCatalogRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\"D\n\x16RefreshCatalogResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07started\x18\x02 \x01(\x08R\x07started\"\x99\x02\n\x13ReportingObligation\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\x12\x36\n\x06window\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x03 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12\'\n\x0frequired_fields\x18\x04 \x03(\tR\x0erequiredFields\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_windowB\x0b\n\t_endpoint\"\xa0\x03\n\x0bUsageReport\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12$\n\x05usage\x18\x05 \x01(\x0b\x32\x0e.ramp.v1.UsageR\x05usage\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1f\n\x08\x65xchange\x18\x08 \x01(\tH\x00R\x08\x65xchange\x88\x01\x01\x12+\n\x06\x61ssets\x18\t \x03(\x0b\x32\x13.ramp.v1.UsageAssetR\x06\x61ssets\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_exchange\"\xd1\x01\n\x11\x41ttributionDetail\x12(\n\rdisplayed_url\x18\x01 \x01(\tH\x00R\x0c\x64isplayedUrl\x88\x01\x01\x12\x34\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x17.ramp.v1.CitationFormatH\x01R\x06\x66ormat\x88\x01\x01\x12+\n\x0fvisible_to_user\x18\x03 \x01(\x08H\x02R\rvisibleToUser\x88\x01\x01\x42\x10\n\x0e_displayed_urlB\t\n\x07_formatB\x12\n\x10_visible_to_user\"\xf0\x04\n\x05Usage\x12\x1a\n\x08\x66unction\x18\x01 \x03(\tR\x08\x66unction\x12\x14\n\x05subfn\x18\x02 \x03(\tR\x05subfn\x12+\n\x11\x63onsumed_quantity\x18\x03 \x01(\x05R\x10\x63onsumedQuantity\x12/\n\x11\x64isplayed_to_user\x18\x04 \x01(\x08H\x00R\x0f\x64isplayedToUser\x88\x01\x01\x12\x30\n\x11\x63itation_included\x18\x05 \x01(\x08H\x01R\x10\x63itationIncluded\x88\x01\x01\x12<\n\x0b\x61ttribution\x18\x06 \x03(\x0b\x32\x1a.ramp.v1.AttributionDetailR\x0b\x61ttribution\x12\xa8\x02\n\rconsumed_unit\x18\x08 \x01(\tB\xfd\x01\xbaH\xf9\x01r\x02\x18@\xba\x01\xf1\x01\n\x1ausage.consumed_unit.format\x12rconsumed_unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')H\x02R\x0c\x63onsumedUnit\x88\x01\x01\x42\x14\n\x12_displayed_to_userB\x14\n\x12_citation_includedB\x10\n\x0e_consumed_unit\"v\n\nUsageAsset\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\"\n\npackage_id\x18\x03 \x01(\tH\x01R\tpackageId\x88\x01\x01\x42\x08\n\x06_titleB\r\n\x0b_package_id\"\x92\x01\n\x13UsageReportResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\treport_id\x18\x03 \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xa7\x04\n\x0bRAMPRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12\x42\n\x0b\x63onstraints\x18\x04 \x01(\x0b\x32\x1b.ramp.v1.RequestConstraintsH\x00R\x0b\x63onstraints\x88\x01\x01\x12-\n\x12supported_profiles\x18\x05 \x03(\tR\x11supportedProfiles\x12\x19\n\x05query\x18\x06 \x01(\tH\x01R\x05query\x88\x01\x01\x12\x43\n\x0esearch_filters\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02R\rsearchFilters\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_constraintsB\x08\n\x06_queryB\x11\n\x0f_search_filters\"\xca\x05\n\x12RequestConstraints\x12\x1c\n\texchanges\x18\x01 \x03(\tR\texchanges\x12/\n\tmax_price\x18\x02 \x01(\x0b\x32\r.ramp.v1.CostH\x00R\x08maxPrice\x88\x01\x01\x12\'\n\rmax_unit_cost\x18\x03 \x01(\x01H\x01R\x0bmaxUnitCost\x88\x01\x01\x12H\n\x13\x64\x65livery_preference\x18\x04 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x12\x64\x65liveryPreference\x12\x30\n\x11reporting_capable\x18\x05 \x01(\x08H\x02R\x10reportingCapable\x88\x01\x01\x12/\n\x13preferred_exchanges\x18\x06 \x03(\tR\x12preferredExchanges\x12&\n\x0c\x62udget_scope\x18\x07 \x01(\tH\x03R\x0b\x62udgetScope\x88\x01\x01\x12\x37\n\rperiod_budget\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostH\x04R\x0cperiodBudget\x88\x01\x01\x12\x43\n\rbudget_period\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationH\x05R\x0c\x62udgetPeriod\x88\x01\x01\x12@\n\x0cmax_data_age\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x06R\nmaxDataAge\x88\x01\x01\x12\x1e\n\x08max_hops\x18\x0b \x01(\x05H\x07R\x07maxHops\x88\x01\x01\x42\x0c\n\n_max_priceB\x10\n\x0e_max_unit_costB\x14\n\x12_reporting_capableB\x0f\n\r_budget_scopeB\x10\n\x0e_period_budgetB\x10\n\x0e_budget_periodB\x0f\n\r_max_data_ageB\x0b\n\t_max_hops\"\xb0\x01\n\nJsonWebKey\x12\x10\n\x03kid\x18\x01 \x01(\tR\x03kid\x12\x10\n\x03kty\x18\x02 \x01(\tR\x03kty\x12\x10\n\x03\x63rv\x18\x03 \x01(\tR\x03\x63rv\x12\x10\n\x03use\x18\x04 \x01(\tR\x03use\x12\x10\n\x03\x61lg\x18\x05 \x01(\tR\x03\x61lg\x12\x0c\n\x01x\x18\x06 \x01(\tR\x01x\x12\x1d\n\nnot_before\x18\x07 \x01(\tR\tnotBefore\x12\x1b\n\tnot_after\x18\x08 \x01(\tR\x08notAfter\"\xef\x0c\n\x11WellKnownManifest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12+\n\x04role\x18\x02 \x01(\x0e\x32\r.ramp.v1.RoleB\x08\xbaH\x05\x82\x01\x02 \x00R\x04role\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x1d\n\x07\x63ontact\x18\x04 \x01(\tH\x00R\x07\x63ontact\x88\x01\x01\x12\x34\n\x0bpublic_keys\x18\x05 \x03(\x0b\x32\x13.ramp.v1.JsonWebKeyR\npublicKeys\x12.\n\x10invalidation_url\x18\x06 \x01(\tH\x01R\x0finvalidationUrl\x88\x01\x01\x12\x39\n\texchanges\x18\x07 \x03(\x0b\x32\x1b.ramp.v1.AuthorizedExchangeR\texchanges\x12N\n\x14\x63\x61talog_contributors\x18\x08 \x03(\x0b\x32\x1b.ramp.v1.CatalogContributorR\x13\x63\x61talogContributors\x12\x17\n\x04name\x18\t \x01(\tH\x02R\x04name\x88\x01\x01\x12\x1f\n\x08operator\x18\n \x01(\tH\x03R\x08operator\x88\x01\x01\x12,\n\x0foperator_domain\x18\x0b \x01(\tH\x04R\x0eoperatorDomain\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x0c \x01(\tH\x05R\x08\x65ndpoint\x88\x01\x01\x12,\n\x0fhealth_endpoint\x18\r \x01(\tH\x06R\x0ehealthEndpoint\x88\x01\x01\x12.\n\x10\x63\x61talog_endpoint\x18\x0e \x01(\tH\x07R\x0f\x63\x61talogEndpoint\x88\x01\x01\x12>\n\x1bprotocol_versions_supported\x18\x10 \x03(\tR\x19protocolVersionsSupported\x12O\n\x18pricing_models_supported\x18\x11 \x03(\x0e\x32\x15.ramp.v1.PricingModelR\x16pricingModelsSupported\x12U\n\x1a\x64\x65livery_methods_supported\x18\x12 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x18\x64\x65liveryMethodsSupported\x12\x34\n\x16hash_methods_supported\x18\x13 \x03(\tR\x14hashMethodsSupported\x12-\n\x12\x61\x63\x63\x65pted_verifiers\x18\x14 \x03(\tR\x11\x61\x63\x63\x65ptedVerifiers\x12 \n\tterms_uri\x18\x15 \x01(\tH\x08R\x08termsUri\x88\x01\x01\x12$\n\x0bprivacy_uri\x18\x16 \x01(\tH\tR\nprivacyUri\x88\x01\x01\x12-\n\x12supported_profiles\x18\x17 \x03(\tR\x11supportedProfiles\x12I\n\x16supported_auth_methods\x18\x18 \x03(\x0e\x32\x13.ramp.v1.AuthMethodR\x14supportedAuthMethods\x12$\n\x0boidc_issuer\x18\x19 \x01(\tH\nR\noidcIssuer\x88\x01\x01\x12\x33\n\x13gnap_grant_endpoint\x18\x1a \x01(\tH\x0bR\x11gnapGrantEndpoint\x88\x01\x01\x12(\n\rbase_currency\x18\x1b \x01(\tH\x0cR\x0c\x62\x61seCurrency\x88\x01\x01\x12\x37\n\x15max_intermediary_hops\x18\x1c \x01(\x05H\rR\x13maxIntermediaryHops\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\n\n\x08_contactB\x13\n\x11_invalidation_urlB\x07\n\x05_nameB\x0b\n\t_operatorB\x12\n\x10_operator_domainB\x0b\n\t_endpointB\x12\n\x10_health_endpointB\x13\n\x11_catalog_endpointB\x0c\n\n_terms_uriB\x0e\n\x0c_privacy_uriB\x0e\n\x0c_oidc_issuerB\x16\n\x14_gnap_grant_endpointB\x10\n\x0e_base_currencyB\x18\n\x16_max_intermediary_hops\"`\n\x13KeyInvalidationList\x12/\n\x05\x61s_of\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04\x61sOf\x12\x18\n\x07revoked\x18\x02 \x03(\tR\x07revoked\"P\n\x12\x43\x61talogContributor\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\"\n\x0crelationship\x18\x02 \x01(\tR\x0crelationship\"\xe3\x01\n\x12\x41uthorizedExchange\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12K\n\x0crelationship\x18\x03 \x01(\x0e\x32\x1d.ramp.v1.ProviderRelationshipB\x08\xbaH\x05\x82\x01\x02 \x00R\x0crelationship\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xe8\x06\n\x0cRAMPResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12%\n\x0etransaction_id\x18\x04 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x05 \x01(\tR\tbillingId\x12\x1a\n\x08\x65xchange\x18\x06 \x01(\tR\x08\x65xchange\x12*\n\x0eresource_title\x18\x07 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\r \x01(\tH\x03R\x11retrievalEndpoint\x88\x01\x01\x12\x33\n\x13\x61gent_identity_hash\x18\x0e \x01(\tH\x04R\x11\x61gentIdentityHash\x88\x01\x01\x12\x31\n\nbroker_fee\x18\x0c \x01(\x0b\x32\r.ramp.v1.CostH\x05R\tbrokerFee\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x10 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x06R\rabsenceReason\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_resource_titleB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x16\n\x14_agent_identity_hashB\r\n\x0b_broker_feeB\x11\n\x0f_absence_reason\"\x99\x04\n\x0e\x44isputeRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12\x38\n\x06reason\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeReasonB\x08\xbaH\x05\x82\x01\x02 \x00R\x06reason\x12%\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x37\n\x15received_content_hash\x18\x07 \x01(\tH\x01R\x13receivedContentHash\x88\x01\x01\x12\x35\n\x14received_hash_method\x18\x08 \x01(\tH\x02R\x12receivedHashMethod\x88\x01\x01\x12\x1b\n\treport_id\x18\t \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_descriptionB\x18\n\x16_received_content_hashB\x17\n\x15_received_hash_method\"\x8d\x03\n\x0f\x44isputeResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\"\n\ndispute_id\x18\x02 \x01(\tH\x00R\tdisputeId\x88\x01\x01\x12Q\n\x14\x65stimated_resolution\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01R\x13\x65stimatedResolution\x88\x01\x01\x12.\n\x06status\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeStatusR\x06status\x12<\n\nresolution\x18\x06 \x01(\x0e\x32\x17.ramp.v1.ResolutionTypeH\x02R\nresolution\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_dispute_idB\x17\n\x15_estimated_resolutionB\r\n\x0b_resolution\"\xc3\x01\n\x19\x44omainVerificationRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12 \n\tcaller_id\x18\x03 \x01(\tH\x00R\x08\x63\x61llerId\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0c\n\n_caller_id\"\xf9\x01\n\x1b\x44omainVerificationChallenge\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12)\n\x10verification_url\x18\x04 \x01(\tR\x0fverificationUrl\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\x91\x02\n\x1e\x44omainVerificationConfirmation\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12$\n\x0bsigning_key\x18\x04 \x01(\tH\x00R\nsigningKey\x88\x01\x01\x12\x1e\n\x08\x63\x64n_type\x18\x05 \x01(\tH\x01R\x07\x63\x64nType\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_signing_keyB\x0b\n\t_cdn_type\"\xf3\x01\n\x18\x44omainVerificationResult\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x06key_id\x18\x02 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12@\n\x0bvalid_until\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nvalidUntil\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_key_idB\x0e\n\x0c_valid_until\"\x88\x06\n\x0b\x45rrorDetail\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12>\n\x08metadata\x18\x03 \x03(\x0b\x32\".ramp.v1.ErrorDetail.MetadataEntryR\x08metadata\x12K\n\x12transaction_denial\x18\n \x01(\x0b\x32\x1a.ramp.v1.TransactionDenialH\x00R\x11transactionDenial\x12H\n\x11\x63\x61talog_rejection\x18\x0b \x01(\x0b\x32\x19.ramp.v1.CatalogRejectionH\x00R\x10\x63\x61talogRejection\x12Q\n\x14registration_failure\x18\x0c \x01(\x0b\x32\x1c.ramp.v1.RegistrationFailureH\x00R\x13registrationFailure\x12\x42\n\x0f\x64ispute_failure\x18\r \x01(\x0b\x32\x17.ramp.v1.DisputeFailureH\x00R\x0e\x64isputeFailure\x12\x64\n\x1b\x64omain_verification_failure\x18\x0e \x01(\x0b\x32\".ramp.v1.DomainVerificationFailureH\x00R\x19\x64omainVerificationFailure\x12U\n\x16retrieval_auth_failure\x18\x0f \x01(\x0b\x32\x1d.ramp.v1.RetrievalAuthFailureH\x00R\x14retrievalAuthFailure\x12U\n\x16usage_report_rejection\x18\x10 \x01(\x0b\x32\x1d.ramp.v1.UsageReportRejectionH\x00R\x14usageReportRejection\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06reason\"\xcc\x01\n\x11TransactionDenial\x12\x39\n\x06reason\x18\x01 \x01(\x0e\x32\x15.ramp.v1.DenialReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12O\n\x16restriction_mismatches\x18\x02 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x42\x0b\n\t_offer_id\"~\n\x10\x43\x61talogRejection\x12\x43\n\x06reason\x18\x01 \x01(\x0e\x32\x1f.ramp.v1.CatalogRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12%\n\x0erejected_paths\x18\x02 \x03(\tR\rrejectedPaths\"]\n\x13RegistrationFailure\x12\x46\n\x06reason\x18\x01 \x01(\x0e\x32\".ramp.v1.RegistrationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"S\n\x0e\x44isputeFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32\x1d.ramp.v1.DisputeFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"i\n\x19\x44omainVerificationFailure\x12L\n\x06reason\x18\x01 \x01(\x0e\x32(.ramp.v1.DomainVerificationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14RetrievalAuthFailure\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.RetrievalAuthFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14UsageReportRejection\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.UsageReportRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason*\xb6\x01\n\x0f\x44iscoveryMethod\x12 \n\x1c\x44ISCOVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x44ISCOVERY_METHOD_EXCHANGE\x10\x01\x12\x1b\n\x17\x44ISCOVERY_METHOD_SEARCH\x10\x02\x12#\n\x1f\x44ISCOVERY_METHOD_RECOMMENDATION\x10\x03\x12 \n\x1c\x44ISCOVERY_METHOD_SYNDICATION\x10\x04*\xf9\x02\n\x12OfferAbsenceReason\x12$\n OFFER_ABSENCE_REASON_UNSPECIFIED\x10\x00\x12\'\n#OFFER_ABSENCE_REASON_NOT_IN_CATALOG\x10\x01\x12(\n$OFFER_ABSENCE_REASON_CONTENT_BLOCKED\x10\x02\x12-\n)OFFER_ABSENCE_REASON_RESTRICTION_FILTERED\x10\x03\x12\x30\n,OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE\x10\x04\x12\'\n#OFFER_ABSENCE_REASON_NOT_AUTHORIZED\x10\x05\x12+\n\'OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT\x10\x06\x12\x33\n/OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION\x10\x07*q\n\rTermSemantics\x12\x1e\n\x1aTERM_SEMANTICS_UNSPECIFIED\x10\x00\x12\x1d\n\x19TERM_SEMANTICS_ENUMERATED\x10\x01\x12!\n\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xe5\x04\n\x0fRestrictionKind\x12 \n\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xbe\x02\n\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x9e\x02\x92\xb5\x18\x03\x61ll\x92\xb5\x18\x06\x61i-all\x92\xb5\x18\x08\x61i-train\x92\xb5\x18\x08\x61i-input\x92\xb5\x18\x08\x61i-index\x92\xb5\x18\x06search\x92\xb5\x18\x05\x63rawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\ncommercial\x92\xb5\x18\x0b\x61\x64vertising\x92\xb5\x18\teditorial\x92\xb5\x18\x08research\x92\xb5\x18\treproduce\x92\xb5\x18\ndistribute\x92\xb5\x18\x06modify\x92\xb5\x18\x07\x64isplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\x0bmanufacture\x92\xb5\x18\x04sell\xa2\xb5\x18\x0e\x66unctiontokens\x12\x45\n\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a%\x92\xb5\x18\x01*\x92\xb5\x18\x02\x45U\x92\xb5\x18\x03\x45\x45\x41\xa2\xb5\x18\x0fgeographytokens\x12\x8b\x01\n\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1ak\x92\xb5\x18\nindividual\x92\xb5\x18\x08\x61\x63\x61\x64\x65mic\x92\xb5\x18\nnon_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\x0b\x62roadcaster\x92\xb5\x18\x11\x63ommercial_entity\xa2\xb5\x18\tusertypes\x12\x1a\n\x16RESTRICTION_KIND_OTHER\x10\x04*\x8e\x01\n\x0bQuotaWindow\x12\x1c\n\x18QUOTA_WINDOW_UNSPECIFIED\x10\x00\x12\x17\n\x13QUOTA_WINDOW_HOURLY\x10\x01\x12\x16\n\x12QUOTA_WINDOW_DAILY\x10\x02\x12\x18\n\x14QUOTA_WINDOW_MONTHLY\x10\x03\x12\x16\n\x12QUOTA_WINDOW_TOTAL\x10\x04*\xf2\x01\n\x0eObligationKind\x12\x1f\n\x1bOBLIGATION_KIND_UNSPECIFIED\x10\x00\x12\x1f\n\x1bOBLIGATION_KIND_ATTRIBUTION\x10\x01\x12 \n\x1cOBLIGATION_KIND_CONTRIBUTION\x10\x02\x12\x1f\n\x1bOBLIGATION_KIND_SHARE_ALIKE\x10\x03\x12$\n OBLIGATION_KIND_NETWORK_COPYLEFT\x10\x04\x12\x1a\n\x16OBLIGATION_KIND_NOTICE\x10\x05\x12\x19\n\x15OBLIGATION_KIND_OTHER\x10\x06*\xcf\x01\n\x11ObligationTrigger\x12\"\n\x1eOBLIGATION_TRIGGER_UNSPECIFIED\x10\x00\x12\x1d\n\x19OBLIGATION_TRIGGER_ON_USE\x10\x01\x12&\n\"OBLIGATION_TRIGGER_ON_DISTRIBUTION\x10\x02\x12)\n%OBLIGATION_TRIGGER_ON_NETWORK_SERVICE\x10\x03\x12$\n OBLIGATION_TRIGGER_ON_DERIVATIVE\x10\x04*y\n\x0cPricingModel\x12\x1d\n\x19PRICING_MODEL_UNSPECIFIED\x10\x00\x12\x16\n\x12PRICING_MODEL_FREE\x10\x01\x12\x1a\n\x16PRICING_MODEL_PER_UNIT\x10\x02\x12\x16\n\x12PRICING_MODEL_FLAT\x10\x03*u\n\x0fPricingMetering\x12\x1b\n\x17PRICING_METERING_ONLINE\x10\x00\x12\x19\n\x15PRICING_METERING_NONE\x10\x01\x12*\n&PRICING_METERING_OFFLINE_SELF_REPORTED\x10\x02*\x8e\x01\n\x0e\x44\x65liveryMethod\x12\x1f\n\x1b\x44\x45LIVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x44\x45LIVERY_METHOD_DIRECT\x10\x01\x12 \n\x1c\x44\x45LIVERY_METHOD_INSTRUCTIONS\x10\x02\x12\x1d\n\x19\x44\x45LIVERY_METHOD_STREAMING\x10\x03*\xbf\x01\n\rRequesterType\x12\x1e\n\x1aREQUESTER_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14REQUESTER_TYPE_AGENT\x10\x01\x12\x1d\n\x19REQUESTER_TYPE_HUMAN_TOOL\x10\x02\x12\x1a\n\x16REQUESTER_TYPE_SERVICE\x10\x03\x12\x1c\n\x18REQUESTER_TYPE_DELEGATED\x10\x04\x12\x1b\n\x17REQUESTER_TYPE_RESEARCH\x10\x05*\x8a\x01\n\nC2PAStatus\x12\x1b\n\x17\x43\x32PA_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x43\x32PA_STATUS_TRUSTED\x10\x01\x12\x15\n\x11\x43\x32PA_STATUS_VALID\x10\x02\x12\x17\n\x13\x43\x32PA_STATUS_INVALID\x10\x03\x12\x16\n\x12\x43\x32PA_STATUS_ABSENT\x10\x04*\x98\x01\n\x12ResourceMutability\x12#\n\x1fRESOURCE_MUTABILITY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aRESOURCE_MUTABILITY_STATIC\x10\x01\x12\x1f\n\x1bRESOURCE_MUTABILITY_DYNAMIC\x10\x02\x12\x1c\n\x18RESOURCE_MUTABILITY_LIVE\x10\x03*\xef\x05\n\x0c\x44\x65nialReason\x12\x1d\n\x19\x44\x45NIAL_REASON_UNSPECIFIED\x10\x00\x12&\n\"DENIAL_REASON_BILLING_REF_INACTIVE\x10\x01\x12&\n\"DENIAL_REASON_INSUFFICIENT_BALANCE\x10\x02\x12\x1e\n\x1a\x44\x45NIAL_REASON_RATE_LIMITED\x10\x03\x12%\n!DENIAL_REASON_CONTENT_UNAVAILABLE\x10\x04\x12+\n\'DENIAL_REASON_RESTRICTION_NOT_SATISFIED\x10\x05\x12#\n\x1f\x44\x45NIAL_REASON_REPORTING_OVERDUE\x10\x06\x12\x1f\n\x1b\x44\x45NIAL_REASON_OFFER_EXPIRED\x10\x07\x12#\n\x1f\x44\x45NIAL_REASON_SIGNATURE_INVALID\x10\x08\x12 \n\x1c\x44\x45NIAL_REASON_QUOTA_EXCEEDED\x10\t\x12$\n DENIAL_REASON_DELEGATION_INVALID\x10\n\x12$\n DENIAL_REASON_SCOPE_INSUFFICIENT\x10\x0b\x12%\n!DENIAL_REASON_ENTITLEMENT_MISSING\x10\x0c\x12\'\n#DENIAL_REASON_ENTITLEMENT_MALFORMED\x10\r\x12%\n!DENIAL_REASON_ENTITLEMENT_EXPIRED\x10\x0e\x12)\n%DENIAL_REASON_ENTITLEMENT_WRONG_BUYER\x10\x0f\x12%\n!DENIAL_REASON_SUBSCRIPTION_LAPSED\x10\x10\x12)\n%DENIAL_REASON_ENTITLEMENT_NOT_GRANTED\x10\x11\x12/\n+DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION\x10\x12*\x8c\x02\n\x0fIngestionSource\x12 \n\x1cINGESTION_SOURCE_UNSPECIFIED\x10\x00\x12!\n\x1dINGESTION_SOURCE_RAMP_SITEMAP\x10\x01\x12\x18\n\x14INGESTION_SOURCE_RSL\x10\x02\x12\x1c\n\x18INGESTION_SOURCE_SITEMAP\x10\x03\x12\x1f\n\x1bINGESTION_SOURCE_HTML_CRAWL\x10\x04\x12\x1c\n\x18INGESTION_SOURCE_CMS_API\x10\x05\x12\x1b\n\x17INGESTION_SOURCE_MANUAL\x10\x06\x12 \n\x1cINGESTION_SOURCE_CATALOG_API\x10\x07*d\n\x0e\x43itationFormat\x12\x18\n\x14\x43ITATION_FORMAT_LINK\x10\x00\x12\x1c\n\x18\x43ITATION_FORMAT_FOOTNOTE\x10\x01\x12\x1a\n\x16\x43ITATION_FORMAT_INLINE\x10\x02*d\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x0e\n\nROLE_AGENT\x10\x01\x12\x11\n\rROLE_EXCHANGE\x10\x02\x12\x0f\n\x0bROLE_BROKER\x10\x03\x12\x12\n\x0eROLE_PUBLISHER\x10\x04*\x83\x01\n\x14ProviderRelationship\x12%\n!PROVIDER_RELATIONSHIP_UNSPECIFIED\x10\x00\x12 \n\x1cPROVIDER_RELATIONSHIP_DIRECT\x10\x01\x12\"\n\x1ePROVIDER_RELATIONSHIP_RESELLER\x10\x02*\x95\x01\n\nAuthMethod\x12\x1b\n\x17\x41UTH_METHOD_UNSPECIFIED\x10\x00\x12\x14\n\x10\x41UTH_METHOD_GNAP\x10\x01\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_DPOP\x10\x02\x12\x1c\n\x18\x41UTH_METHOD_OAUTH_BEARER\x10\x03\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_MTLS\x10\x04*\xea\x01\n\rDisputeReason\x12\x1e\n\x1a\x44ISPUTE_REASON_UNSPECIFIED\x10\x00\x12#\n\x1f\x44ISPUTE_REASON_CONTENT_MISMATCH\x10\x01\x12\"\n\x1e\x44ISPUTE_REASON_DELIVERY_FAILED\x10\x02\x12 \n\x1c\x44ISPUTE_REASON_WRONG_CONTENT\x10\x03\x12\'\n#DISPUTE_REASON_EXPIRED_BEFORE_FETCH\x10\x04\x12%\n!DISPUTE_REASON_INCOMPLETE_CONTENT\x10\x05*\xbe\x02\n\rDisputeStatus\x12\x1e\n\x1a\x44ISPUTE_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14\x44ISPUTE_STATUS_FILED\x10\x01\x12 \n\x1c\x44ISPUTE_STATUS_AUTO_RESOLVED\x10\x02\x12\"\n\x1e\x44ISPUTE_STATUS_EVIDENCE_NEEDED\x10\x03\x12\x1f\n\x1b\x44ISPUTE_STATUS_UNDER_REVIEW\x10\x04\x12\x1c\n\x18\x44ISPUTE_STATUS_ESCALATED\x10\x05\x12\x1b\n\x17\x44ISPUTE_STATUS_RESOLVED\x10\x06\x12\x1b\n\x17\x44ISPUTE_STATUS_APPEALED\x10\x07\x12\x1a\n\x16\x44ISPUTE_STATUS_SETTLED\x10\x08\x12\x18\n\x14\x44ISPUTE_STATUS_FINAL\x10\t*\xae\x01\n\x0eResolutionType\x12\x1f\n\x1bRESOLUTION_TYPE_UNSPECIFIED\x10\x00\x12\x1a\n\x16RESOLUTION_TYPE_CREDIT\x10\x01\x12\x1e\n\x1aRESOLUTION_TYPE_REDELIVERY\x10\x02\x12\x1c\n\x18RESOLUTION_TYPE_REJECTED\x10\x03\x12!\n\x1dRESOLUTION_TYPE_INVESTIGATION\x10\x04*\x95\x03\n\x16\x43\x61talogRejectionReason\x12(\n$CATALOG_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x34\n0CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR\x10\x01\x12,\n(CATALOG_REJECTION_REASON_TENANT_MISMATCH\x10\x02\x12\x30\n,CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED\x10\x03\x12.\n*CATALOG_REJECTION_REASON_SIGNATURE_INVALID\x10\x04\x12,\n(CATALOG_REJECTION_REASON_MALFORMED_ENTRY\x10\x05\x12\x30\n,CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN\x10\x06\x12+\n\'CATALOG_REJECTION_REASON_QUOTA_EXCEEDED\x10\x07*\xc1\x02\n\x19RegistrationFailureReason\x12+\n\'REGISTRATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x33\n/REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED\x10\x01\x12+\n\'REGISTRATION_FAILURE_REASON_INVALID_KEY\x10\x02\x12\x31\n-REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID\x10\x03\x12\x32\n.REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED\x10\x04\x12.\n*REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED\x10\x05*\x95\x02\n\x14\x44isputeFailureReason\x12&\n\"DISPUTE_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x30\n,DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'DISPUTE_FAILURE_REASON_REPORT_NOT_FILED\x10\x02\x12)\n%DISPUTE_FAILURE_REASON_WINDOW_EXPIRED\x10\x03\x12$\n DISPUTE_FAILURE_REASON_DUPLICATE\x10\x04\x12%\n!DISPUTE_FAILURE_REASON_INELIGIBLE\x10\x05*\xbb\x03\n\x1f\x44omainVerificationFailureReason\x12\x32\n.DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12:\n6DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND\x10\x01\x12\x39\n5DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH\x10\x02\x12\x38\n4DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED\x10\x03\x12\x33\n/DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED\x10\x04\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED\x10\x05\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED\x10\x06*\xd9\x05\n\x1aRetrievalAuthFailureReason\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED\x10\x00\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED\x10\x01\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING\x10\x02\x12\x34\n0RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING\x10\x03\x12\x38\n4RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH\x10\x04\x12\x33\n/RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING\x10\x05\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING\x10\x06\x12\x30\n,RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH\x10\x07\x12\x35\n1RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH\x10\x08\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING\x10\t\x12\x36\n2RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING\x10\n\x12/\n+RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED\x10\x0b\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID\x10\x0c*\xcb\x02\n\x1aUsageReportRejectionReason\x12-\n)USAGE_REPORT_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x37\n3USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'USAGE_REPORT_REJECTION_REASON_DUPLICATE\x10\x02\x12\x30\n,USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED\x10\x03\x12\x39\n5USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS\x10\x04\x12+\n\'USAGE_REPORT_REJECTION_REASON_MALFORMED\x10\x05\x32\x86\x04\n\x0f\x45xchangeService\x12\x46\n\x11\x44iscoverResources\x12\x16.ramp.v1.ResourceQuery\x1a\x19.ramp.v1.ResourceResponse\x12O\n\x12\x45xecuteTransaction\x12\x1b.ramp.v1.TransactionRequest\x1a\x1c.ramp.v1.TransactionResponse\x12\x41\n\x0bReportUsage\x12\x14.ramp.v1.UsageReport\x1a\x1c.ramp.v1.UsageReportResponse\x12G\n\x12\x44isputeTransaction\x12\x17.ramp.v1.DisputeRequest\x1a\x18.ramp.v1.DisputeResponse\x12\x65\n\x19RequestDomainVerification\x12\".ramp.v1.DomainVerificationRequest\x1a$.ramp.v1.DomainVerificationChallenge\x12g\n\x19\x43onfirmDomainVerification\x12\'.ramp.v1.DomainVerificationConfirmation\x1a!.ramp.v1.DomainVerificationResult2\x89\x02\n\x0e\x43\x61talogService\x12N\n\rPushResources\x12\x1d.ramp.v1.PushResourcesRequest\x1a\x1e.ramp.v1.PushResourcesResponse\x12T\n\x0fRemoveResources\x12\x1f.ramp.v1.RemoveResourcesRequest\x1a .ramp.v1.RemoveResourcesResponse\x12Q\n\x0eRefreshCatalog\x12\x1e.ramp.v1.RefreshCatalogRequest\x1a\x1f.ramp.v1.RefreshCatalogResponse2G\n\rBrokerService\x12\x36\n\x07Resolve\x12\x14.ramp.v1.RAMPRequest\x1a\x15.ramp.v1.RAMPResponseB\x8e\x01\n\x0b\x63om.ramp.v1B\tRampProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -47,40 +47,50 @@ _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._serialized_options = b'\272H\320\001\222\001\002\020@\272\001\307\001\n$acceptable_restriction.values.format\022Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' _globals['_RESOURCEQUERY'].fields_by_name['uris']._loaded_options = None _globals['_RESOURCEQUERY'].fields_by_name['uris']._serialized_options = b'\272H\006\222\001\003\020\200\002' - _globals['_RESOURCEIDENTITY']._loaded_options = None - _globals['_RESOURCEIDENTITY']._serialized_options = b'\272H\315\001\032\312\001\n/resource_identity.resource_mutability_specified\022?resource_mutability must not be RESOURCE_MUTABILITY_UNSPECIFIED\032Vthis.resource_mutability != ramp.v1.ResourceMutability.RESOURCE_MUTABILITY_UNSPECIFIED' + _globals['_RESOURCEIDENTITY'].fields_by_name['resource_mutability']._loaded_options = None + _globals['_RESOURCEIDENTITY'].fields_by_name['resource_mutability']._serialized_options = b'\272H\005\202\001\002 \000' _globals['_LICENSE'].fields_by_name['uri_digest']._loaded_options = None _globals['_LICENSE'].fields_by_name['uri_digest']._serialized_options = b'\272H\204\002\272\001\200\002\n\031license.uri_digest.format\022Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\032\206\001this == \'\' || this.matches(\'^sha256:[0-9a-f]{64}$\') || this.matches(\'^sha384:[0-9a-f]{96}$\') || this.matches(\'^sha512:[0-9a-f]{128}$\')' _globals['_LICENSE']._loaded_options = None _globals['_LICENSE']._serialized_options = b'\272Hy\032w\n license.digest_required_with_uri\022*uri_digest is required whenever uri is set\032\'this.uri == \'\' || this.uri_digest != \'\'' + _globals['_RESTRICTION'].fields_by_name['kind']._loaded_options = None + _globals['_RESTRICTION'].fields_by_name['kind']._serialized_options = b'\272H\005\202\001\002 \000' _globals['_RESTRICTION'].fields_by_name['permitted']._loaded_options = None _globals['_RESTRICTION'].fields_by_name['permitted']._serialized_options = b'\272H\310\001\222\001\002\020@\272\001\277\001\n\034restriction.permitted.format\022Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' _globals['_RESTRICTION'].fields_by_name['prohibited']._loaded_options = None _globals['_RESTRICTION'].fields_by_name['prohibited']._serialized_options = b'\272H\311\001\222\001\002\020@\272\001\300\001\n\035restriction.prohibited.format\022Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' _globals['_RESTRICTION']._loaded_options = None - _globals['_RESTRICTION']._serialized_options = b'\272H\247\002\032\223\001\n)restriction.permitted_prohibited_disjoint\0226a token cannot appear in both permitted and prohibited\032.this.permitted.all(p, !(p in this.prohibited))\032\216\001\n\032restriction.kind_specified\022-kind must not be RESTRICTION_KIND_UNSPECIFIED\032Athis.kind != ramp.v1.RestrictionKind.RESTRICTION_KIND_UNSPECIFIED' + _globals['_RESTRICTION']._serialized_options = b'\272H\226\001\032\223\001\n)restriction.permitted_prohibited_disjoint\0226a token cannot appear in both permitted and prohibited\032.this.permitted.all(p, !(p in this.prohibited))' _globals['_QUOTA'].fields_by_name['metric']._loaded_options = None _globals['_QUOTA'].fields_by_name['metric']._serialized_options = b'\272H\345\001r\002\030@\272\001\335\001\n\023quota.metric.format\022cmetric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032athis != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\212\265\030\rdisplay-words\212\265\030\013impressions\212\265\030\006tokens\212\265\030\014input-tokens\212\265\030\022units-manufactured\212\265\030\010accesses\212\265\030\006copies\212\265\030\005seats\232\265\030\014quotametrics' _globals['_QUOTA'].fields_by_name['limit']._loaded_options = None _globals['_QUOTA'].fields_by_name['limit']._serialized_options = b'\272H\004\"\002(\001' - _globals['_QUOTA']._loaded_options = None - _globals['_QUOTA']._serialized_options = b'\272H\205\001\032\202\001\n\026quota.window_specified\022+window must not be QUOTA_WINDOW_UNSPECIFIED\032;this.window != ramp.v1.QuotaWindow.QUOTA_WINDOW_UNSPECIFIED' + _globals['_QUOTA'].fields_by_name['window']._loaded_options = None + _globals['_QUOTA'].fields_by_name['window']._serialized_options = b'\272H\005\202\001\002 \000' + _globals['_OBLIGATION'].fields_by_name['kind']._loaded_options = None + _globals['_OBLIGATION'].fields_by_name['kind']._serialized_options = b'\272H\005\202\001\002 \000' + _globals['_OBLIGATION'].fields_by_name['trigger']._loaded_options = None + _globals['_OBLIGATION'].fields_by_name['trigger']._serialized_options = b'\272H\005\202\001\002 \000' _globals['_OBLIGATION']._loaded_options = None - _globals['_OBLIGATION']._serialized_options = b'\272H\304\004\032\225\002\n-obligation.share_alike.requires_scope_license\022DSHARE_ALIKE requires scope_license to identify a license (id or uri)\032\235\001this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))\032\212\001\n\031obligation.kind_specified\022,kind must not be OBLIGATION_KIND_UNSPECIFIED\032?this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_UNSPECIFIED\032\234\001\n\034obligation.trigger_specified\0222trigger must not be OBLIGATION_TRIGGER_UNSPECIFIED\032Hthis.trigger != ramp.v1.ObligationTrigger.OBLIGATION_TRIGGER_UNSPECIFIED' + _globals['_OBLIGATION']._serialized_options = b'\272H\230\002\032\225\002\n-obligation.share_alike.requires_scope_license\022DSHARE_ALIKE requires scope_license to identify a license (id or uri)\032\235\001this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))' + _globals['_LICENSETERM'].fields_by_name['semantics']._loaded_options = None + _globals['_LICENSETERM'].fields_by_name['semantics']._serialized_options = b'\272H\005\202\001\002 \000' _globals['_LICENSETERM'].fields_by_name['pricing']._loaded_options = None _globals['_LICENSETERM'].fields_by_name['pricing']._serialized_options = b'\272H\003\310\001\001' _globals['_LICENSETERM'].fields_by_name['scopes']._loaded_options = None _globals['_LICENSETERM'].fields_by_name['scopes']._serialized_options = b'\272H\005\222\001\002\020@' _globals['_LICENSETERM']._loaded_options = None - _globals['_LICENSETERM']._serialized_options = b'\272H\254\004\032\342\001\n(license_term.reference_only.requires_uri\022>REFERENCE_ONLY terms must carry a license with a non-empty uri\032vthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\032\251\001\n%license_term.one_restriction_per_kind\022+at most one restriction is allowed per kind\032Sthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)\032\230\001\n license_term.semantics_specified\0220semantics must not be TERM_SEMANTICS_UNSPECIFIED\032Bthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_UNSPECIFIED' + _globals['_LICENSETERM']._serialized_options = b'\272H\221\003\032\342\001\n(license_term.reference_only.requires_uri\022>REFERENCE_ONLY terms must carry a license with a non-empty uri\032vthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\032\251\001\n%license_term.one_restriction_per_kind\022+at most one restriction is allowed per kind\032Sthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)' + _globals['_PRICING'].fields_by_name['model']._loaded_options = None + _globals['_PRICING'].fields_by_name['model']._serialized_options = b'\272H\005\202\001\002 \000' _globals['_PRICING'].fields_by_name['unit']._loaded_options = None _globals['_PRICING'].fields_by_name['unit']._serialized_options = b'\272H\351\001r\002\030@\272\001\341\001\n\023pricing.unit.format\022iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\212\265\030\007fetches\212\265\030\010accesses\212\265\030\006tokens\212\265\030\005calls\212\265\030\005pages\212\265\030\007seconds\212\265\030\007minutes\212\265\030\007records\212\265\030\007streams\212\265\030\006images\212\265\030\005seats\212\265\030\022units-manufactured\212\265\030\ncharacters\212\265\030\005bytes\212\265\030\005items\212\265\030\005sq-km\232\265\030\014pricingunits' _globals['_PRICING']._loaded_options = None - _globals['_PRICING']._serialized_options = b'\272H\252\003\032\227\001\n\036pricing.per_unit.requires_unit\022\'unit is required when model is PER_UNIT\032Lthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\032\206\001\n\026pricing.free.zero_rate\022!rate must be 0 when model is FREE\032Ithis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0\032\204\001\n\027pricing.model_specified\022+model must not be PRICING_MODEL_UNSPECIFIED\032 Date: Fri, 19 Jun 2026 16:47:15 +0200 Subject: [PATCH 05/40] refactor(proto): format rules as standard string.pattern, not custom CEL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 7 token/digest format rules were custom CEL (this.matches(...)), which — like the discriminators — does not survive proto→JSON Schema generation. Expressed them as standard protovalidate constraints instead: - scalar fields (Pricing.unit, Quota.metric, Usage.consumed_unit, License.uri_digest) → (buf.validate.field).string.pattern with one combined regex (the bare|namespaced alternation, plus optional-empty where the field allowed empty); - repeated token lists (Restriction.permitted/prohibited, AcceptableRestriction.values) → repeated.items.string.{min_len,max_len,pattern}. These standard patterns DO ride into the generated JSON Schema / Pydantic / Zod. Conformance wantRules updated to string.pattern; INV-3 (which kept the token-format CELs canonical) is removed as obsolete — there are no token-format CELs left. The 7 genuine cross-field rules remain CEL (server-authoritative). Custom CEL ids now: 7. --- conformance/descriptor_invariants_test.go | 84 +---- conformance/validate_test.go | 21 +- gen/descriptor.binpb | Bin 511552 -> 509980 bytes gen/go/ramp/v1/ramp.pb.go | 45 ++- gen/python/ramp/v1/ramp_pb2.py | 374 +++++++++++----------- gen/ts/ramp/v1/ramp_pb.ts | 2 +- proto/ramp/v1/ramp.proto | 48 +-- 7 files changed, 241 insertions(+), 333 deletions(-) diff --git a/conformance/descriptor_invariants_test.go b/conformance/descriptor_invariants_test.go index 6173a09e..b8157ddf 100644 --- a/conformance/descriptor_invariants_test.go +++ b/conformance/descriptor_invariants_test.go @@ -240,76 +240,16 @@ func messageSnake(name string) string { return b.String() } -// ─── INV-3: the namespaced-token format is written identically everywhere ──── +// ─── INV-3 removed ─────────────────────────────────────────────────────────── // -// The "bare token or vendor:namespaced token" charset is hand-copied across -// several field CELs (Pricing.unit, Quota.metric, Usage.consumed_unit). -// protovalidate has no shared-macro mechanism, so the substitute is to assert -// (3a) every such CEL uses EXACTLY the two canonical regex fragments — so the -// charset cannot drift between copies — and (3b) its human message does not -// claim registry/registration membership, which the CEL never checks. The -// selector is structural (a CEL whose regex set includes the bare-token -// fragment), so the digest format and the repeated-charset formats are excluded -// automatically and a new token field is covered the moment it is added. -const ( - tokenBareRe = "^[a-z0-9-]+$" - tokenNsRe = "^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$" -) - -var matchesArgRe = regexp.MustCompile(`matches\('([^']*)'\)`) - -func TestTokenFormatCELsAreCanonical(t *testing.T) { - seen := 0 - eachMessage(func(md protoreflect.MessageDescriptor) { - for j := 0; j < md.Fields().Len(); j++ { - fd := md.Fields().Get(j) - fr, err := protovalidate.ResolveFieldRules(fd) - if err != nil || fr == nil { - continue - } - for _, r := range fr.GetCel() { - args := matchArgs(r.GetExpression()) - if !contains(args, tokenBareRe) { - continue // not a namespaced-token format (digest / repeated-charset formats) - } - seen++ - // (3a) charset cannot drift — exactly the two canonical fragments. - if !(len(args) == 2 && contains(args, tokenNsRe)) { - t.Errorf("%s: token-format CEL must use exactly the canonical fragments {%q, %q}, got %v. "+ - "Charset drift across the token-format copies is the disease; keep them identical.", - r.GetId(), tokenBareRe, tokenNsRe, args) - } - // (3b) the message must not claim registry/registration — the CEL - // is structure-only and never checks membership. - if strings.Contains(strings.ToLower(r.GetMessage()), "register") { - t.Errorf("%s: token-format CEL message %q claims registration/registry, but the CEL only checks structure. "+ - "Drop the 'registered' wording — it misleads and diverges from the sibling messages.", - r.GetId(), r.GetMessage()) - } - } - } - }) - if seen == 0 { - t.Fatal("no token-format CELs found — the structural selector (bare-token fragment) drifted; INV-3 would be vacuous.") - } -} - -func matchArgs(expr string) []string { - var out []string - for _, m := range matchesArgRe.FindAllStringSubmatch(expr, -1) { - out = append(out, m[1]) - } - return out -} - -func contains(ss []string, s string) bool { - for _, x := range ss { - if x == s { - return true - } - } - return false -} +// The namespaced-token format is now expressed as STANDARD protovalidate +// string.pattern / repeated.items.string.pattern constraints on the fields +// (Pricing.unit, Quota.metric, Usage.consumed_unit, Restriction.permitted/ +// prohibited, AcceptableRestriction.values), not custom CEL. There is no +// token-format CEL left to keep canonical, so the old INV-3 (which asserted the +// CEL regex fragments were identical across copies) is obsolete. The standard +// patterns survive into the generated JSON Schema / Pydantic / Zod — which was +// the point of the conversion. // ─── Positive controls ─────────────────────────────────────────────────────── // @@ -355,11 +295,7 @@ func TestInvariantHelpers(t *testing.T) { } pr := (&rampv1.Pricing{}).ProtoReflect().Descriptor() if !fieldRejectsZero(pr, pr.Fields().ByName("model")) { - t.Error("fieldRejectsZero(Pricing.model) = false, want true (message-level CEL rejects zero)") - } - - if args := matchArgs("a.matches('^x$') || b.matches('y:z')"); !(len(args) == 2 && args[0] == "^x$" && args[1] == "y:z") { - t.Errorf("matchArgs returned %v, want [^x$ y:z]", args) + t.Error("fieldRejectsZero(Pricing.model) = false, want true (field-level enum not_in:[0])") } } diff --git a/conformance/validate_test.go b/conformance/validate_test.go index 84796a7e..4a44357a 100644 --- a/conformance/validate_test.go +++ b/conformance/validate_test.go @@ -94,9 +94,9 @@ func licensingCases() []validationCase { // License.uri_digest — strong-hash structure only. {"uri_digest empty ok", &rampv1.License{UriDigest: proto.String("")}, true, ""}, {"uri_digest sha256 ok", &rampv1.License{UriDigest: proto.String("sha256:" + hex64)}, true, ""}, - {"uri_digest md5 rejected", &rampv1.License{UriDigest: proto.String("md5:" + hex64)}, false, "license.uri_digest.format"}, - {"uri_digest sha256 wrong length", &rampv1.License{UriDigest: proto.String("sha256:dead")}, false, "license.uri_digest.format"}, - {"uri_digest sha256 non-hex", &rampv1.License{UriDigest: proto.String("sha256:" + "g" + hex64[1:])}, false, "license.uri_digest.format"}, + {"uri_digest md5 rejected", &rampv1.License{UriDigest: proto.String("md5:" + hex64)}, false, "string.pattern"}, + {"uri_digest sha256 wrong length", &rampv1.License{UriDigest: proto.String("sha256:dead")}, false, "string.pattern"}, + {"uri_digest sha256 non-hex", &rampv1.License{UriDigest: proto.String("sha256:" + "g" + hex64[1:])}, false, "string.pattern"}, // Pricing message-level CEL: PER_UNIT⇒unit set; FREE⇒rate 0. {"pricing per_unit with unit ok", &rampv1.Pricing{Model: rampv1.PricingModel_PRICING_MODEL_PER_UNIT, Unit: proto.String("tokens"), Currency: "USD", Rate: 0.05}, true, ""}, @@ -107,25 +107,25 @@ func licensingCases() []validationCase { // Pricing.unit format: empty / bare-dashed / vendor:namespaced. {"pricing unit bare ok", &rampv1.Pricing{Model: rampv1.PricingModel_PRICING_MODEL_PER_UNIT, Unit: proto.String("sq-km"), Rate: 1}, true, ""}, {"pricing unit vendor ok", &rampv1.Pricing{Model: rampv1.PricingModel_PRICING_MODEL_PER_UNIT, Unit: proto.String("acme:widgets"), Rate: 1}, true, ""}, - {"pricing unit with space rejected", &rampv1.Pricing{Model: rampv1.PricingModel_PRICING_MODEL_PER_UNIT, Unit: proto.String("two words"), Rate: 1}, false, "pricing.unit.format"}, + {"pricing unit with space rejected", &rampv1.Pricing{Model: rampv1.PricingModel_PRICING_MODEL_PER_UNIT, Unit: proto.String("two words"), Rate: 1}, false, "string.pattern"}, // AcceptableRestriction.values charset + max_items. {"acceptable values ok", &rampv1.AcceptableRestriction{Axis: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Values: []string{"ai-train", "ai-input"}}, true, ""}, - {"acceptable values space rejected", &rampv1.AcceptableRestriction{Axis: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Values: []string{"ai train"}}, false, "acceptable_restriction.values.format"}, + {"acceptable values space rejected", &rampv1.AcceptableRestriction{Axis: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Values: []string{"ai train"}}, false, "string.pattern"}, {"acceptable values too many rejected", &rampv1.AcceptableRestriction{Axis: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Values: gen65()}, false, "repeated.max_items"}, // Restriction.permitted/prohibited charset. {"restriction permitted ok", &rampv1.Restriction{Kind: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Permitted: []string{"ai-input"}}, true, ""}, - {"restriction permitted control-char rejected", &rampv1.Restriction{Kind: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Permitted: []string{"bad\ttoken"}}, false, "restriction.permitted.format"}, + {"restriction permitted control-char rejected", &rampv1.Restriction{Kind: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Permitted: []string{"bad\ttoken"}}, false, "string.pattern"}, {"restriction prohibited ok", &rampv1.Restriction{Kind: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Prohibited: []string{"ai-train"}}, true, ""}, - {"restriction prohibited space rejected", &rampv1.Restriction{Kind: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Prohibited: []string{"ai train"}}, false, "restriction.prohibited.format"}, + {"restriction prohibited space rejected", &rampv1.Restriction{Kind: rampv1.RestrictionKind_RESTRICTION_KIND_FUNCTION, Prohibited: []string{"ai train"}}, false, "string.pattern"}, // Quota.metric format — bare-dashed or vendor:namespaced; empty rejected. // window set so the only variable under test is metric. {"quota metric bare ok", &rampv1.Quota{Metric: "display-words", Limit: 1, Window: rampv1.QuotaWindow_QUOTA_WINDOW_DAILY}, true, ""}, {"quota metric vendor ok", &rampv1.Quota{Metric: "acme:frames", Limit: 1, Window: rampv1.QuotaWindow_QUOTA_WINDOW_DAILY}, true, ""}, - {"quota metric empty rejected", &rampv1.Quota{Metric: "", Limit: 1, Window: rampv1.QuotaWindow_QUOTA_WINDOW_DAILY}, false, "quota.metric.format"}, - {"quota metric space rejected", &rampv1.Quota{Metric: "two words", Limit: 1, Window: rampv1.QuotaWindow_QUOTA_WINDOW_DAILY}, false, "quota.metric.format"}, + {"quota metric empty rejected", &rampv1.Quota{Metric: "", Limit: 1, Window: rampv1.QuotaWindow_QUOTA_WINDOW_DAILY}, false, "string.pattern"}, + {"quota metric space rejected", &rampv1.Quota{Metric: "two words", Limit: 1, Window: rampv1.QuotaWindow_QUOTA_WINDOW_DAILY}, false, "string.pattern"}, // License.uri present requires uri_digest (any semantics). {"license no uri ok", &rampv1.License{Id: proto.String("CC-BY-4.0")}, true, ""}, @@ -176,7 +176,7 @@ func licensingCases() []validationCase { {"dispute_request reason unspecified rejected", &rampv1.DisputeRequest{IdempotencyKey: "idem-dr-x"}, false, "enum.not_in"}, {"usage consumed_unit empty ok", &rampv1.Usage{}, true, ""}, {"usage consumed_unit bare ok", &rampv1.Usage{ConsumedUnit: proto.String("tokens")}, true, ""}, - {"usage consumed_unit space rejected", &rampv1.Usage{ConsumedUnit: proto.String("two words")}, false, "usage.consumed_unit.format"}, + {"usage consumed_unit space rejected", &rampv1.Usage{ConsumedUnit: proto.String("two words")}, false, "string.pattern"}, } } @@ -256,6 +256,7 @@ func errorDetailCases() []validationCase { // listing them lets the integrity check reject a mistyped wantRule that is // neither a real custom CEL id nor a known standard rule. var standardRuleIDs = map[string]bool{ + "string.pattern": true, "required": true, "repeated.max_items": true, "int64.gte": true, diff --git a/gen/descriptor.binpb b/gen/descriptor.binpb index ce1bcc7d60667fc5bf4d118c79d6d970399d0dd0..527ad2803d4c9bd4e5877f565d142104b7a0cf35 100644 GIT binary patch delta 37358 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 AFaQ7m delta 39037 zcmch=cbrs3_BY&pyKmj@+tXogCm5iofgv+PkRUok5OfiA(N)*DDk>_jX#w4J(;zuW zkT4~vfPzSpB+y9CLvRpKf*=wG2?7!%2om1!sjACGKhOJqe$V^)JkLMMxB8rKrBkO) zr8^%C&t36BZqGjMK3X47AMZT<(Uf**AAdZh&(`K^JeaHBReaKIvNt=w{6?4V6|}Uc zw*QWA+>6?8aW8V0y3M@K&pzAb^&Xv{dAZ9|-MVz|(XH#VJ-WX3YJrq5c>c9+uXOHV z-P@(}voEGaTKbhYy7x#w(!e#2r5mMd)^rjIi_*wLq@WbfzSyOE?OIR%KA(Ddwd&Lv;npIp|D-qxfTR~5|(INx1MeX}&i`+dm zv*OELpY8H$_bvsFklhTAIY~E~q5F%S8#irsTLb+6mRp;M|2J*a__p-(uf6>8Yk%+Z zT>6=}(w);UcKJtIW|)(H?fG<%7rUfIjk>=2Li*({ufEXZ#hiX_?*5lnrC1R@j)v@< z|NLM6)vU>XP{Z`U{|zlPn$r*}#~Xqzn*F~EQju;5Hfnq;Nw)X?$&U)P6YVg-?Y`~b zi`u`H!)q7lGqt@s-&LUBl|Jq^{jYcF_Da_tJ-R%ntmjKu&w5zTa<^HTZ*8E*i|zK2 zX42!ezjk@`M*IAa&E)^Tl@$MPnu${*>nFEqzTWM%7rQ>wl`7~F!=nrp+<*$MaGOZ!28HCfn}zZ0GJ>@}KM6{Y99$Y=hUj@v4=L==1j2|9z*{ zPahmO$@Uv{aypYqr>hpFYt^D*Ui)_z{a$=7;9G*ZuT*kLi8m)vi4%_(UCNdKR@mhB_WV9bZS)G4u-PXS!(#sYyS^x`ji;l>HkrU4Ae+esBsIuQjT`oo9Xm`?sFGU(aazmY4GIrDH`VMa?DZ0AcE)YyywSb$3tb9+BV|{x+iz0;cWRn`v&*Z`y~b-*HiG|0>-*`0 z`XAbu6A$}L!_xh(Wtm?_>u*^`AGbSakCx`)Ts@u{G6n9*-J2Iq*Y_0nc6-c->G!%c zx39n7(k#z^ybVq3MoQ9U>Hqcia_eTcX)39t%WZjz8HqVbn&s{3W>5Ym&0~4rcC+Wq zpWUYBbz5w(+qD`cIpj{;a|`b?Lq8N7?DoaYnx@z5)?Ai%h+E6fslbcd8_5=?88l&u znoAeyJ{!6T`m=0^jE1mZEm!Ii%8xMDDwu+ll-Tr`5aYJReI}|qG5-KSD zD7TiA^H)AQ&$yfaZKj@|j|5vU}lz}+kG*d5tiDGJ$CHA1i z+#SfaAsD#ZO4yKe+!b?d=p$IE0~*}5V?HlzP->Kzyt@1G(EFswr+ZgraK%uIHtP;)s>PCj_K~a`Zff| zba#V>=5$?fKzLCmFi-zXD_-PqFi=Zr9<=s|)p{yTeAeuYxF|MrODPW+;?^KnW;K2@sT< zZ0iFA)Y)1+k|9&o87UvStL|oeOvi$i}Y4STkU#i znud1S>JCIy8HjhQJ3DDZFl=?_R5IV8cG1WpxAO&y^r1!D9SRR9wz~t;Y#{@R?e2tZ zctFx|*QjY;APdvT!uDp~UabGaUA))fAPd{;4#@6-5IFX_D@tPl1jk-?&04D2&`$g8 zp4BumEI?b83~Qg=v-lON`)>5CsO}Fp_3WjVK(bHq8;F0f`xFpNKiGW=2&NyXPZyG( z@mTD*+tr`XTBc{h$K5{5d7`F(<&7xO6uKyTBFA1U^J}mve;nFRl?V-)dyLF zH9bb|Pj^wnzN2Z?`P+wBjXXeb0E+=fzoG@+(W+K69~8p)aVVdK#)fHLa?W@j!E=mRG}k zLCB!aqj|^mde<7GodRLddq-1&c2cD-8_J_cc8!swZZo z4>YZotR5h004xTP4hXgnGz_9v$k9!MbR5?=>TOcvG_8gx6%rvcPODwVd`8FsP2kUM z)St_pplLOg4ApLeR;RA{Gr9{zsNUqvk&XHr?$l&W6P7`#keaN)GM*GdsNWR+&oA|- zQ&TiebQ)x+ep9H^V8ehIIn($rU+NF!PIF46LuMM4XfGl>2*C>GWL_%MF&^h=S{+p; z2B|q({d{UEl7in}z+e1I|2Dlq(;6uu140Y5CQZ$iH2Az0TcWwv^UhoJ72zcsrggLn zoC|DZ8E?2%Zby*gWScF73VvM4$8FVbZ?@7=q0zQd^GQGI z6{BsX20z+GsGuloQ2d;S(+|Jch2OVTkMZi;^bYw*6sAUA4g_no%5r7`M4oFj%uM$Q z0-#bpcANgEcBS?h@rrR)s;T)A5DcYSUR_mc8fT?ieu24~q5itXzSUeOVNUZ{n%`d= z;ntmB>$N=LZ#7>P^A=>HQ(Nre|JtE9&EKP`IR%Me-J|)XuLK0^9<5Skvx!i_kKgmX zJM?Dx-`j1W3(xbt=8KAg07B(^Es-=E3l+4*0p5D2-X#Bkqe8Vmpur_l2k4^q2ef#? zY$#MfaEO1jQ*WGq$Wfu{9@2br-qD3yIi$hA$%4TGkCg1vn-v|g+e_ETryS7&vWWpf za73#ieF`9QIYQ<+lO`^m?DGWgzDu9o@`OX7Q>vzdC&+-}grL;R-d#It(S`igxdl34Euocjx!-K`hw#1M>rIP>I1Dsn5Amq3gA5pkcxp6I z4AkyJJdJNLr&8B3@){#}r+xbLq7e=Sqf}2ojyK4FVuVMHH$YH~@L;^XX9xRl`5$}KU|^a7rH?&+X{LZs`q%?AeMIOW1pI_wE7u<@_{346Fz*wOUxtlLqcHCi z55mSVH2X2lk03VF?~q=}T{PV(s~?Rp-J{G5Lg1M0vBYFTI^dY@$*XC8DywT+-r4;7 zAM~k3vmFW(6tf))6BM&OmfdS6C}w-A*Dx3RL@@&JHkmbt^&)T48iyl*CR^k5TL2tu zJh?I&U|IkiYdi%F&1Do(Ff9v#U#8`8y|q@f)#1nj$5yB3vcR#`>A5U$Z1ps5VxE;% z30mHreDO*BT+vR4A_$6|9<`QWS`ZXFJymZ}ogW0nPEWI2&1_V@fZcN;aQx_r+Qtw9$B&*=+T1LQ5w^Ui_|&udmf}+mMHm#PJOQ~KRfMO9`fBTi%NvwUqef zXZ=!3AQ^DtH+1Vor(3hZbkU<05%?8M7d;3#OZ;#^hQ&sBU6(Qq&g-MSkr7@jB1TdD z4Dvvne{)GMDdb*7jYLp$uQED7P;;-9E1DS))ZAOGy4hYZ;K#9i@@2h4(O8Fp9MV{a zfgI9UuO*{=LpY?dUMx=g$U?v&jpO;h>ir7GITSSf$2k-tZt+^OpA6xi#(5Es{XrB0 zMf!-J`c=QX=p%=L*0&!y3^YxA}qL}YZS2YKa zw=u|JmCo1MAWzp)uNG4+P9Cb%8<%bpGRU>m3pYug8W7&5)SLeZHc5N}_V>f)O1%XS zi=7S-F5KEqFHCEbcVwprYiH74_LNqH6lq?DW}w(Ronn)}+v(T< z`MaHD1B+=&F)&|y4`h}ww$xp8z~S(rHV3?FaR(uA9PlQj^8y6N0WTuqO_Bo+@OWl{ zkCnNLjyoLW0FOK6AP0Ed=>T$o$GtG~>C%$m08jH3Ci|@Tv_nA-@U%lg4)CsGjwz;R*=VvtE0+8sztWp*E$JfAfs~GvAlR zSUV)yjhcm${Nj{^T;MNGWyl5oLY3(m!kG10Y>e(&r@M2`1k=28eLb2f46?&4F-G@Q zGS||i;iKU@Ue^*i3$&4)TU5;4A7i!M1xS(m0Qem_jMr5x0f-#N>zLGcOLhD@IrC|p zJ>f2x>?qM_ovf>^E1wvxlXa{(KcqJHQTQ;8H%hYc1=DmDv?38Y)AY)qiK5G zdUEaWBRG>^OR}K_Go5^BK+bgXq4;4YZ%Kn3ZM^0mHrnoX&?{2Wx$%zKtT3yZ75Q5TL9kcb~7}i(VVY#fku4Ud#vD?h> zWsFy`tP(pczw+g^SwZfvx+c6k;!#>n{Yn{bMQZ?q`3ldf!@kbFqFRFzA#{a=-hpWY z176KstHXx6(^qv(l$}y3nWVl%kccv|0nD{DGov2cEN8_Y0OZn>8EvilM8Y@y z&?-Zj_ZHgW6DiyJd0=0|m^XcM5-L2Ld8^-?1nzg4x5mv$;2Kf8?*bY z6-1Z{5PGrB*RbL`ReenN=i{ zD`bFH^Dk~;Ra2{(j0hk@J-M1>stOs@aSi|F7FIpAhG`-!g$y zkh|95p(?EMOe^u{?*&S0rowHNQBI{B=ZR33%|woG8gBQ zTd;>~>}9?%h&*0DmI?=$_5<^pKe|l=xW6B>fJo!jZez!q9Aw_QBGi;WfwG)=Tild_ z;vJ%tUntP@Q;2dd)9QA1St~lnR3wB{^vgM>mKcC&n{!Mp5CFk(j$wgt1TGC6`1KNh zvn4xLc*&ulHO3`}f})m7%#txPR6ucwB`b(kil18W3V**9>ri;bVW4Q?io-zJTw!W~ z02MG?VOSviS(E|jIBGp7DR@_jjAPv$Bg1EjuQI& zaR|!ZHN2w@T?GAhB8Wy9tj2HB&=eyL_Sb6AHg9NqEPa&0#=6awVc3Rgu|A<*FuZ6J{72aaCGn;Au!nA0Y9M@|Wr+LqWnOKlUI2v3YC|1E0%GD{ZB)8TasrCQ&T6CbouZB; zpcXr;jXT4?=yO){nV*FD!JbpmKZ?GF45P5Gf)FKlQd2cXe&_pa~ z_zgyS3mTpdK`B9;M|(FKIFP2kkV(`Rn+)$)sxRzBaDQpA+GbNaleQDlL}i9LleW{4 z>t+LI(saUO!gATyhPIoJ?!@jZ#=q>MlktA-6rGIsYujd^1(L6An*l`8zc#AwzEN~d z75y8h=#)f7-)?xny-{?T2<{yQt7G0Gi!KvU^qo%8Wg2qbMMW3OLX!${Fw^%wEDIYP z#5z=r5~PCepkc^C14vSa6*Y&^UTMH$Ckz+Q{OwPOmZK*O?3I?&=n24D*fm2Nnz0^a z2R+63r(ERV2k>1p{E`n4eAkE%p)RSR>er0eP@f2OMZ(t<>Rvaz^+i9D$W{^R_Vmdh zRtO;pyl?wtsB0&o(!G3$g^I}nlqSe}`((&xC&B&p@xf2tB!%wk>yx3hEroffACcW8 zg;2M@&s*h2Qhz_~NDc6ztYl!6qv)khY@p9O#3x6)or>}f^08bo66`b-c(9Lk`%M}c z-|?|G%=gH<2FP+oaL=P`Y^M=Eb@G8kO7*Fe4?yUQ@Zscx933Er;Rv7AOqG)c0{O5J zzGzc%U>qQaTf$E~%33{F;?v~$2@*kC;tNS14G7W_AAGbVrCo#)U&VG}Y~xpuBAPDo z<+N3$7b&!nQQ~Xe#_Uh#l4Y?8KGzqSVUMwX?z{;;ad6=AX2DZ^?9(R06Ws?-m8Cot zCGi$duue@T`n=6WKJq7&c9PHg0IK6t!f=S6_`I{+W-YW)7P+dae9056&I?n0Y6BdJ zsLoVhw%pbNM0KY6Fl$kD08yQ(z8vZP2#V@V^;K#os-seXjM3bVpe+;hxZdGkjG$s2r)E z#7@u*-yhnW(`er%i+XBaX7^v%40qu?pK>oqg>laFsclj~6l|U^DtC*mh5am((xgfUKT(%2H|#mu3?$CpJq$-`rCbK z!U>`qclosM(2e6M8VRa?lxaDG-RU-b>+LMY|NA`a-QioGx3Q?Y6hpms`@HvxK9wox z(>*@#05_V;11^j0^J(Sa9)5!x69uL5jxVrbP4@e|4IDlS)DHN(x80P2Djf8AyO>|m zI0}-D9Oa=G+1A3Nb}Jwe?ReB~M?kc~QD0OZs{?}Ks1NZsomB;?k&p9AU0Ji%$9o`Zpo01w5Pg2!m%3XP%kJ~z{N1iB8aeK}^Dc9=EFFq}iqGrHc;P9h zbkxhId}=2}&-&CI z5J1xL;pnN6V1QdZ&m(_jw-lXs80awWyie^C2E_)?d7s)P1O&r*A9e|cleGqE*1MYN z`Byf={nS;5gHDC6I;~9mJy)Gprv09))XK8SbTrvjU#=XOV8o!PNGa)d=2nVXgVZX6 z{h7bL!nSEo4)&`tfn;Pp*sm-a5V;KYD~kq1E`$BBXqgLb%MSKe=_p(zenl?0yN0Ax z2XWmaNQc!!`A4s_hg%MH@}Pa!p-vvO?>f}4LP4k?kD-2qf|KYdHw5SBcP-2``x~q7 z2~Y4NhW{_hA0kVf$Y1QidKOIdt7#I6pql7c+j@YYn&`)No0tVcWP4M1;te)7e~P0+ zwl~G^m+l8L(3#@L0WRGm3X$iS&iB5-S{6^YD}Y2)V7gx!1Rxlu`?KX)2_P7z`w`C3 z;Yf(k48PnOAO!mWlo1Xfm}WRkWLh))%CzvS(1mHWHoXRvp*xFz^d`HbXqH1klhQ1Q zf&%MV{%q-?p#q9oehj5u6efnKuEziW`0`QjgJoV&(q>JoA`VK|!&eyt24B5qF@z;andX_H^`6=8*FwUWkqDyg{;-_50im zf$j0DEpEs_Wse_Q+lx>7qd?b4?7fOT8C}Zf($4Q`?IC%1O&xlKU^m*9>Zi=$9TLad!)@Vhk*?1n8QGZ zb&HZz zNS8JHMCx)!N@ohMnJE{c^L}t|fMUfA#16CQI!6{_1c2=*^17*!sP4 zGrtVfuTm>gpiZTb%c*OAZ!c5E>2@MI=(=CU>2?|#vZu-ZAp$i!4K4Y$$-0{#NK-~* z3^cXcIYYE``%LdXEa7emY+C_cQXOcjdvalML1Ca-$+kzDI0l-q#}Qak>hMM*P1k#w zoqbuh78_~m*)%A1aU49#)Y8>j^WjTa6<%=wD@Y+ho+999lya1bf$_AEMm!U08OU0txx+&nTAXBl zrV_(yCz`HLGfM`tZd!PviPI6fU?xt$Ch?+o*weX_Omz_tiO`*7V(d)80EQ3>`Uzk1 z4x3i<6H{&QArV5KkWf!41UT8$@~d@2Q2BIUR-Z2%!aB7;k{FR-p;AvKg)9^Z+h&Bk&_A_ zRQ8!_QUSz3-)E{xg`k*J_L*u@Q7JU3>@zW`+$Hh>MR~~>*1o9R9vBhf>&s0QwE-g6 za#PLUfTUu=J#vaKBjoFkXZns|W85u|I~?Tfk2@UX?2nu35Fa|=I8Hs=Cnz`|JSdQP z;(gYaJvAtxMredK*pYstAmr}{1yuNmUqLb`pu$H$RDV!Fg^vVf_&6wl@UfRHDhB+> zOzV$XA9wLcCl|WiG%}#V>4*qYM+Opd;Rc9YMh38OqxdUAA?WCUI_(C6Dxh4V0iuAT z1M0LJ5UQgC_Gx#7`se+?O{d*$k%ZPmnsiBksPOwvh3WkN{eZeWfnUM*egMba_h2|- z$8mhXHJ!ip3F~N$52!O(Z0F(VETC1D8|;9f0G4M-fUv6x0ffWtFj}yEh7&ZNJDJ^; z`Z%DDL68WUj|1pnDFZZ#_a>Q10p-`QJw~Yk43-Xp2L+qVk4$Fwq$aD@067h)$<#lv zG(gmJ3cvqT);={QppJKt2$?AXEHoq!sy~fqK4te*ofc5O2~~y6v;cz6?`Wqr+hSz_ zSMRJ$-W0am2$u!0fkCUSY^wQJJUE-(oBvfnjZ7q>ieCl%GJpj{NxvelM}-Q0+{XLQ zW{($ab5v+xZVUM3CPlUwnA-x_qfMRbzT`vR##a^=9Av7CiQxVHE>Cai%T~zLH&=@OsIB1NO2eRd289Lx74`86K zmBoO)ALTF4W2Hq$9SRyiM+53IZMGOdM+12cMI;Oeilc#Bn%eD$5p;sTKA(*&I1x~r zXW3%poCv7RGeGE^2q26dBD2NFIn5g_V8aSdJN-nX~u9< zj=3DDR7JRpY`PqC#da4!XedDGE&!o=#da5fP`z@)U1Zbcm|j^oxr=s4f*Bx9x(h%Q zrB{~nkAUFom8IMTAozM^!Cfq*cmUhP!?Ii-X6{_XnrqguEIlkv+ve?Qj*Y}wZ*RT`rjw`c#a&>P}nO9}0gB>7rFQDAD2SgcHWvT55 zKxDKk3)>OLkgwOG8kF*H*0JNAN*x{YWu;l_3OZzIDa(>Obb!cX6IGSsC5zBzv_noSdWBbk zf4!bH&PRfLg@>P^yg5s~!UGiI=zrQowy6KN^2QrjouaKy_T=@pI@y!g+nS|r_(BB? zTd8BQYe^Ik-p=3Kzy=j>cPME0YkQUo{UHO2?OB!Nln)4s?OAHdw`gx`XO^1sfh3e; z7!ayEv(%Ii2-Tfg_LOf?xUl!;G29kOJ&!~Xm1n6{J|Kw7v#`pi<#m+0>@ffM zOZG^E!;T6W%VFDCAOn@dWGtuY6-dltKV`W-<8{i|sSZD7;YJ+=L@~NK6V>@#mf9G^uV6YyV;jMP0cF4o{NAtFy~P(C3flF!;82jUUT_LS z#(Kdi406Ay94Gi-dj##m(4OtZEOqXUU%_-SOGWa4V7f>y4c9cNFv#{YPj6wZ^Dk$q z!xJPz=W>>s-T|R=nR0I<8Wa3i`H(HFZP8UHS2EVCS?cvbOc?9ctXz5h8xRavvzj#* zPeo#6t387}xRo_(*)w>f;1uHa465e?5JDk(2G#QcKv47y;`zV|iZNmo;`R$>{=Jp8 zaX07}ykQ44Rrd?3oBWW1R=*%d$$lE6F}le=ILJ?IV+V=`J2}%_JvgXlHwb}aa8SKJ z1q8?7V68gl=M>w=Xs#ZWF~4E+-9@7u4w|e-IUF=uj|wVZ0UdCR3gR^YK6pSJn61a~ zE8E%W!Z8j7P1<9EH+qgH?J>cKytfGzP>c!ItuIcaVl-!ez-#Yh4GTYT80a4V2SIfS zA2MM0AXrsKdVpZ~AXrD-LqQp^n=+n{+R0iLjdvL68vl5w40Mfud@v$CE>yrUK3FAJ zUcryiHU3FFyo+rqp5#!_E&fSPA?OzWq@a2U02NS73O2h{4QlMwOb#lS7t`qWKA?1Y zfKZ(rR4xw?s*|ZRugONF1GL~xVN3g%7Qt9RnmraG=#&{wr_h!D89^1cKp1>8f^d0{ z!|TK?HaqCr8+7N~o94^!)Z={SZq_fDQRETI{ zQ0?`{g-2N!M1VtHIZh5`F^_-8ninp%tByoeeX(72Krk#0D(?nJIzbHS>Vg5Swu}$> zj@8IthT{+sPRE7kSQa$o{0Rt^WkGB;(5vG(IgXWl_jjyS(Ml&%3h`GunUWt_X%7OZ zfMI126Q&phahmSd(IEJdxBi~7!gUT0d6RXv6+#d^>+F#L2%dE`60np*N#IR3@Lu1u zdx|zV4CG8U1Os*>lQY>6tROFzLj?>Qf_T9=fh;Lb&ZLY7_OXwP${Y&1B3~9%Q#WKl zQ5LKuUM`XfD9VCOnknOeW7#5HTD`mDnjh`C#Ub*8Xp8OG@GFS6*p3YlL|e$QjU&ev zC-<@=sMXCGrtve|SR&J7Kl8fVAW0fE1klJkoJJ;3v%~gQ_!V?J$Xnei*x+cs4Qe%V z>hiz7WaRL#53ox4NRaQu;$mU&ZBTi7Kq!ApW+4p=KIS`K=^$%f^qrGE`Izs5%G1Y% zkNGaBJUt*7zN6vY2xBT?vHd~UAwKLNYgoKL=*tp=K0zbtKu|rQ0788L4E1UjZBL7 z5;UKe^ZUwKomS;`)sP5^a=T>#K~Wx5M-PBtC=X&M0?R&4$FcaapsRO?FDz%7@UbBF zY3n1t7e~!M^8X&f2IG%GwTpp7pE}{lP`OW#OjRL+5}o9If57F^lR>qXz`-tLP6iQg$nwAzf8y(Yz*YI5f|}TK zMqaeC`6-A!XMD4S3WSQE;?cwG=hUg7dcliC2%QSz1@9d~2K|1T=N)0~Qm2DzbpvMs znbS0;;l03vv3Q2}JHql(XM$?of<(yRp+r@BI|vyJwzGWw5!N(y*5UC%<}C5F6*3r3 zKl4gQ*`2AMgKBd%sQDrDa}b-W`056DFi_6%{~l%kN}W?P2qi-1T(Cwh^EM#^^FPm% z$5>(Rc}FGyne!y`1txUpz|5~?x*cPS-Ki^16Jxc}NW` zpEm%4WIzbLk&m3j8TG&r=RdK6#|DNp`Hljq5E>Y&R^6;5gn$Nxv`W>2=|4SiPr6(8 zmkWCQqlXy4V4&fKU*#QXKp~9HLAs%fGi3x}A)b4R)yN$jQmb90LTGRZOF%L$anSru zh(CLZHOYM^r0fr=5PByB`@=mR2*K8eg!qC}xNbefVIpH6LQFC{82iu=_nt;}Lqlqh zA|$MRXb5{0czFvZSo^RLZ-1IKOb>G!hRl5!H4N^q(A337g5EGk*ln9mg zLJ9HWj389r3pM{EJ-!3Pk7K#_EW5kG*bo!D`IJbhp?F=D3pMT7P}7cdqnB#PCWKrw z_`lDx!;uLgyum-{1(kSmGd+fCvX}#sGzZKIsSOAqbPAw!-hhyu6;c}zfMA^!!fK8df;eEsud_q) zun3SGKcKBkj(>JYJt)Gj(48H^gCePm;?4=l@e5U2#{tSI1Q5MGC#1es0tlu#p^9>` z4hW_>Axw^eK@>G43D4*IF0glAn(t&!f!2H{dkVDXJJ}<@Oh|>hN%7pJP|bu? zxC;o?Ovny*lVrC`L%dN&zr;8H!dUTAr{ENKEe)v!3?xCcG^FBOKoBhrAXcO>b$I~4LUmOLyRK3dow7P4rxd7CrvS=M0R+=(yKaDBS{=gTx>#mJy|6lj z*-lactqIAg5L9$)1<gCVN0k+3uUYnGj9nMwlu$js{;k1hCLyzQO*i4-*{NBl4*LC6=+3Bvg<@E^*tdK z14ABkdqV2XJs{}zgbEs(Urxs^#Uk<^~qHWAXHC~2-QnBI;SEP_WEx+2T9;VnzS`QA)vrelSgcpr)lYR!4kUYp zeX^7})H%JwYQhBqE1>KgK*;tE+noap+TLL`cx266$zlV-uEDBum5}Lx zuupo}N>sUlcIALT3n&W+2-$&DIhrv5!8*{cTP3R7ps`=QzfM6XeOH}OjR;D5i zvzr?Tx`4JWm1vmV-1rr`!(?-7-YOOw5q6DMC8`3+5w-zTp%RU>O9TW~K*yJlyO`3%21 z{6QGo`Ls8dqT-C>xZQnw{y3WoiJ%%6R_{*$K{bw=o9-p1s1zUZuBLHc;YYR&Ara2- zqp&&?1|*@d`oIz(7(NQ)152F*1FUfpKW`fM7fx~*$O<>WT#=6)`rRlIVF>cLYAC}ub;Gx!EAFeF79RZ=TK8$V0 z`a%Ugzlq5$jIwHo;WqQx*+#SC%?<-?eQpk` zTSmF!9A$GjA@9Bef?;!5#ml+08MDPUMj)sHN@D~>=38uI1cd6A8^)MRvD%KCjj=6~ z&~iwV#t4X3+2K@%0=FHuG2&P7?I2^k7rPL+p1nKl`kucZHSP)T4&%Na?I_`XGGZxy zA!_8M_Jq~m01{yad&1Zos48SY`yIbEW>imo7gk#XxS$M~@2IJ0K`$;S@8xgBjGDQ7 zRRt*#GJDDV9>ZuzTkJsC^&?*vGad~e2>UA1zLz&mB`D`L<3_u}a=T_oM9s?WngOB+ zr)bu1i_FOC4gaE!{(0d=d2unkjHg!6>aK5~+*_)8kE zRjGDo_^E`kx$un5j6^V>v1xqJAnA}Fruza_X^{7f@JDitKNj_jD3e7hD0)UzqXMGfJtH?L zXwdhJfP#)5s!|8^j_~pvqhp)i4h5b0_l^YQh=UL)dPl0%R`nn!&^uDEzWJ@JJ1&n8 zh-kwi{IyEP&SLyi4xXyQ6AXwbPYwv00TE?lfS?%=LHE+#aX{R{9T3SI7LgBNDM4O) z9vD&Ao@ElfA{`X*4volb&vqiX2S->EEp1f|Il6;oHInoWtQ2m%P^1}L32AXKMB zR0IJC)hQ7>f~Zb#W<=~FwF5w-%(NQ?5G9{!Hwqw_W=2%(04P-9uE)~NqCAT&inz{Z zI#x5rxH~M0sNf-w8e_5D7(k!|l#Kxh%EfkL0D^KcHO4(?i##g%GG35p{IOt}qe4xw zETV2aLk23#A~=Q=pFGN=wphidP?=qjmzVM_!@HV0^Rn@6UxJA!YTZqs=7JUut_a&4ofy9h~g96$h>>~?BR zPG)yRU46i>pxYh6aTA@CfDZ9SdFDtRV=*pvIvliFRPJ!lW>I-W4NK^Nqnt*iY8SNJ zF}|;!ak}`JLqUPZu}DCA>O2v69E((w7drt#aV&C66X9O+DDF6Jn?Dd#0j2o^BKPCA z`2#}r_zm;Vqurr1k(&bOwn#!xA|q&;bn(`B8JQM)C3t4im1n@fMB>B!Td8A9!2H<2Xk2vFVIY&b>Xd=9xoS@- zPyxeLno@8E2L_;?+58U;jdn#naYI#DK2lMLp4lpF0R%>P2jL^?vLVIz9^2Z)yK zoz2%bG}^T6?NHDZ+dErLu@C}9?`$>20)nD)4$ARvHugzr^;v_0?NQmhMib+{qEQY7 z+5V_(wSa{XC`M)H$$JKXpcs{nFC?#}Ay|Wqe?n$%6Qk5!G{NDZK`_DLpg}MpTV0HX z4mc)c<6`t`$$>#IC9|NJvDV#kio-#MKP6jjY1a^Yq*JohgG@khOv$dCGD~qcUdN-A zvTWDanJ;cN*5PV=w(b|F&EnC@WqLK2GI z8G?}gDqF?_fIwUD4oVS`Dxi3NO+SiX*=MI0LjW~y{*Vm+RzMpq$Ydo00 zKU+<4NCegXY!%-CqE!2-KD4r|NfjvPTiO~;o0mH()CA>@3XSA)QlUj&O{(N!G*?c| zblW$&y~+2sHIn>+c1AoOsd8S03>XeO4Ac~diGjAnYZ5xfN4GPI@{c(xG;)tQDl~GB zkqVBop@QZ)!LPS7TIZi|RH&6sI4U$!Pml`T2&zc~^%Q^kPNP-+DMy6{=BaGI^d69b z%Bk#NNW2NENz>C=zUxk-eg0WTg~s98Y_&9p3{=i$V`=`3$OXd?w%NXpA^t7;|cmY(ksQY?b{9o;j7Ylk@swt5Q zuHKgFKR{&P+d?IA%ncp<*w5nGcf-K@S!xFisUlfjl>&rLKMOGm1q*-}_x-HM?c!lC zLGfIwpOt-^h^$o#J(ucdHNVwtE;2%|53;maPMvhy&ab}qYS(8wznp&VwO2ZKeKp;^ zOSd<>zRH)~ZB#CRjI@DT!UhIe>U<6mg&1UEaI_J8Ktn9<>tNi`a)_n8c`Xt246&3O z1w=iDSe9IJ0SYBdDIb#?twlyL!r}uu7!!*|I2;tyjIh*x1BAda!crdz00hSf3+|jg zO%D!O$=J+`9gR2KMPnTfa_3{6a*)-GwJiB%Ug&^htcCA=(G_}dAj9!I=U!t<;dqCF z?u?DMRA2-dP>i=y^7bSkD8^g(zE%&x04tivuib0BSvb*QAYVSwVIZTLXr&sfUL;>W z(Q4XEJg~1tzI-yD{YRr^;bez_UR6zYszI)NvZZ23sDNRzC7(N?7VzX#dEHLNU4>H} z2HG*1>M)QapK7VSNT`5es)hTP4~kmAkI&#UIvIa1oZ&E#8=v7YQ2a8(QhSlLgd3k> z;UX%1CZHCbbj{)|??WwSIShE><(=g)(COAJrwnwuHH*qX+qkvpaBD7Kc%N~5;arD- zo{P+N80c(ku2Tj&+nP&dz)c7+;B0F?Z*afSp=iFt5Cp?~hk@>)&UXxgj=1JqxWO|} z8U!xhEaD69HwG6jawzCjYmq}ir&^0FOGYZS#68qS7Vf~%J-J$REoUkJ&!3Fj+AMV# z=sN0BOI;#_3>cPL6=YNjh(av2Fso9?R*Np}tgy7(a_aNN_v5CW^?*^O5DC)r;b(BI zuvFXx2(A@YP7`HZbQN`l)x3rIgy6#6o;Cch4;W7tu5lRXtI}(n`p{RU*H~6<#Xw(` zUSrkE7gJL$y7*Jd^#_dy3riga3k;zJWC>SnbcE@8Sz_8ttS7=b|1Q@nk4H}sb2!FgSSo;p3K;fSxLAfeL_~p)pzP!24;v$j z_Bj+4L9x%Fpu^aGmf9eK3Mlqj)$+`N6!g{7au5<^=01Wsu=udUkpqsymJ0eH1dhX2 zw!AS82#&)RZj95uPA#nx-q%@b-vJ1%2q+g`fKWYZseK1Ps2;Vj?|{E)N4k}9Qfy)2 zwHY5^ZaaxJ<7Xc;K5mI5dw^6%NlrSoq2siZmWsxq4!V;T)?MGwlwR9nzgVv8nQf07 zU%SJyt*j6_RAZAb^5hvkL|&6x19E2)1h$=14p?)4X*o);sDN9OX-&GzP|c zN3kS)47t>yg7uAJI=_cL2F<%aWwdMnET?Y#3eLV!HFX1mvu_kr_jYQ#I#k3#QNI5v zV@JUtM~MnDD5_qMLI_HOqS)kk3gxJ4v7u4d1b*mg^{v@I$l|s={ zNwm{_!ZPa;#h9qFOdwb$ptMXt3A;uanv;>D!)2F-udIGF8;`yE?x{zjB2&TRmwd1 zRv1{`#sx$(O{5mM14k8j2TY$t81tObF7-)NUAIIcWIl;vIZD?^#oORd`LE9z9nzmh z)kjT{2$@f#I5fZ)xe#bsY(~_zfOqL)jI(A$)iX?sY~VBS%CZ0=J75v>>44z)EDC$3 z3#1m6Wfp((dE=4Ptf*SgArUgOqKK~%l0yb)4*%wPG_LZ<;rs|G|J7DZJ+4~U{HiXx!LZBTDLs^HS7RvBM)d%KiH z`SKTy3NIqTRwnaa8dXP&kcRTosM=z#M|E6g+Zhn@1+-O(dRbJhWAH0fmqoFTp^;dR z&`RE_D+bd_M};hPr9GG+Lqar|$Wzs$_F2QncSWeR#$0f2G6flwvn;Bf4FH0nEQ)6Xw0Tue zoJvNuraZir)oBlins0Ha#3^M|UFO2CpxP2u55)jMwIzzbR??dm9QDL0Wfboz&hgXR zSdy>(t8uJoheIZgD4q5bN0d<&6G0hdJEDjt#2>AxN85+H`SF*H=|#I83W~UQI}{Xg z?~bae94esL9mQ0RKLbtWLCC$IfBlMas%XDMK^MyQN7a@XWI(Y$s-9f|f?|IZAveDJ zOB9H?f8f_&HBJ=&;84(gvLB*q{R0_L{18=t&wH=bsK}eG`CLkK*q|+c2d7resCVmCqN%ERw=tF7s zEp{DlGxO2kj0&E6u19e}nu=JT#&pk^8q+|a1e9Y75R^S*YD@!yvS$oqTAZoXr;*n; z#`QOh-S_o%lxQsXjj6i_5Q0+Qn7Vrah+Xe`op)qwb0f=f0jj6Bj5){+t(3tuP zuS%imb7<_2wqo^DpB&e_G5*iL8!cMCi^qy8BU+Td8&i`XgizLZV=7b!M85CFu(#Qt zjIus0%16ienZFwYibp#fw8uKy;h-bPTI<+2wE?B{BKu>Oe@(mjUh4 z&?!TS!$c0GBxcD-6~bUDiPfoVe(b?_+MtbQ7`NapW0L!&aZYoSs~8tk`$Uj|(zuv9 zR;w?zR%0rN078W(pzBm)h%MEaiXreTR42sjK~bL^!{nHVA)W?6$tOD{C;u?nDLMIv z$uSi~Kp0GuV=9Qi!|Q1=*MgV~B4~Lv4GSi*w<=y=PmkFjT#@gtf#nBR0AZffV>q+K zGh&>NDt2B`6UxpT!XR;shKJXcn*ZAEQ%hR!jvENTk#locW_d2Bn+B z2mHr)JT)h#f|010xaY(Wj7T0-_jB(4FL*wWskbpvv4{G3414f+ONPAA2J`u=|23MY z=f_mwgGA&tKZd|(He7*@hu@_!*PhJU{~8TER;gWa@$!59jf%^+-oUcrfFM~<6{kly zc(_dyR;OM@>(s`Wx-f!7$ZVuRf{hc%0DZ|n>t*~o^`%`YBvL9>>V6@Eif`ssdm9g= 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 Isd4-N10mL=g#Z8m diff --git a/gen/go/ramp/v1/ramp.pb.go b/gen/go/ramp/v1/ramp.pb.go index 11597b25..941170ca 100644 --- a/gen/go/ramp/v1/ramp.pb.go +++ b/gen/go/ramp/v1/ramp.pb.go @@ -8314,11 +8314,10 @@ var File_ramp_v1_ramp_proto protoreflect.FileDescriptor const file_ramp_v1_ramp_proto_rawDesc = "" + "\n" + - "\x12ramp/v1/ramp.proto\x12\aramp.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bbuf/validate/validate.proto\x1a\x13ramp/v1/vocab.proto\"\xb5\x02\n" + + "\x12ramp/v1/ramp.proto\x12\aramp.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bbuf/validate/validate.proto\x1a\x13ramp/v1/vocab.proto\"\x84\x01\n" + "\x15AcceptableRestriction\x12,\n" + - "\x04axis\x18\x01 \x01(\x0e2\x18.ramp.v1.RestrictionKindR\x04axis\x12\xed\x01\n" + - "\x06values\x18\x02 \x03(\tB\xd4\x01\xbaH\xd0\x01\xba\x01\xc7\x01\n" + - "$acceptable_restriction.values.format\x12Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches('^[A-Za-z0-9._:*-]+$'))\x92\x01\x02\x10@R\x06values\"\xa1\x03\n" + + "\x04axis\x18\x01 \x01(\x0e2\x18.ramp.v1.RestrictionKindR\x04axis\x12=\n" + + "\x06values\x18\x02 \x03(\tB%\xbaH\"\x92\x01\x1f\x10@\"\x1br\x19\x10\x01\x18@2\x13^[A-Za-z0-9._:*-]+$R\x06values\"\xa1\x03\n" + "\rResourceQuery\x12\x10\n" + "\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n" + "\x02id\x18\x02 \x01(\tR\x02id\x120\n" + @@ -8431,35 +8430,31 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "attestedAt\x12\x10\n" + "\x03uri\x18\x04 \x01(\tR\x03uri\x12/\n" + "\x06claims\x18\x05 \x01(\v2\x17.google.protobuf.StructR\x06claims\x12\x1c\n" + - "\tsignature\x18\x06 \x01(\tR\tsignature\"\xd4\x04\n" + + "\tsignature\x18\x06 \x01(\tR\tsignature\"\x92\x03\n" + "\aLicense\x12\x15\n" + "\x03uri\x18\x01 \x01(\tH\x00R\x03uri\x88\x01\x01\x12\x13\n" + "\x02id\x18\x02 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x17\n" + "\x04name\x18\x03 \x01(\tH\x02R\x04name\x88\x01\x01\x12!\n" + - "\timmutable\x18\x04 \x01(\bH\x03R\timmutable\x88\x01\x01\x12\xad\x02\n" + + "\timmutable\x18\x04 \x01(\bH\x03R\timmutable\x88\x01\x01\x12l\n" + "\n" + - "uri_digest\x18\x05 \x01(\tB\x88\x02\xbaH\x84\x02\xba\x01\x80\x02\n" + - "\x19license.uri_digest.format\x12Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\x1a\x86\x01this == '' || this.matches('^sha256:[0-9a-f]{64}$') || this.matches('^sha384:[0-9a-f]{96}$') || this.matches('^sha512:[0-9a-f]{128}$')H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n" + + "uri_digest\x18\x05 \x01(\tBH\xbaHErC2A^(sha256:[0-9a-f]{64}|sha384:[0-9a-f]{96}|sha512:[0-9a-f]{128})?$H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n" + " license.digest_required_with_uri\x12*uri_digest is required whenever uri is set\x1a'this.uri == '' || this.uri_digest != ''B\x06\n" + "\x04_uriB\x05\n" + "\x03_idB\a\n" + "\x05_nameB\f\n" + "\n" + "_immutableB\r\n" + - "\v_uri_digest\"\xdd\x05\n" + + "\v_uri_digest\"\x8a\x03\n" + "\vRestriction\x126\n" + - "\x04kind\x18\x01 \x01(\x0e2\x18.ramp.v1.RestrictionKindB\b\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12\xeb\x01\n" + - "\tpermitted\x18\x02 \x03(\tB\xcc\x01\xbaH\xc8\x01\xba\x01\xbf\x01\n" + - "\x1crestriction.permitted.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches('^[A-Za-z0-9._:*-]+$'))\x92\x01\x02\x10@R\tpermitted\x12\xee\x01\n" + + "\x04kind\x18\x01 \x01(\x0e2\x18.ramp.v1.RestrictionKindB\b\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12C\n" + + "\tpermitted\x18\x02 \x03(\tB%\xbaH\"\x92\x01\x1f\x10@\"\x1br\x19\x10\x01\x18@2\x13^[A-Za-z0-9._:*-]+$R\tpermitted\x12E\n" + "\n" + - "prohibited\x18\x03 \x03(\tB\xcd\x01\xbaH\xc9\x01\xba\x01\xc0\x01\n" + - "\x1drestriction.prohibited.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches('^[A-Za-z0-9._:*-]+$'))\x92\x01\x02\x10@R\n" + + "prohibited\x18\x03 \x03(\tB%\xbaH\"\x92\x01\x1f\x10@\"\x1br\x19\x10\x01\x18@2\x13^[A-Za-z0-9._:*-]+$R\n" + "prohibited\x12\x1a\n" + "\badvisory\x18\x04 \x01(\bR\badvisory:\x9a\x01\xbaH\x96\x01\x1a\x93\x01\n" + - ")restriction.permitted_prohibited_disjoint\x126a token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\"\xe2\x03\n" + - "\x05Quota\x12\x81\x03\n" + - "\x06metric\x18\x01 \x01(\tB\xe8\x02\xbaH\xe5\x01\xba\x01\xdd\x01\n" + - "\x13quota.metric.format\x12cmetric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, ≤64 chars)\x1aathis != '' && (this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$'))r\x02\x18@\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\vimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\finput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\baccesses\x8a\xb5\x18\x06copies\x8a\xb5\x18\x05seats\x9a\xb5\x18\fquotametricsR\x06metric\x12\x1d\n" + + ")restriction.permitted_prohibited_disjoint\x126a token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\"\xb0\x02\n" + + "\x05Quota\x12\xcf\x01\n" + + "\x06metric\x18\x01 \x01(\tB\xb6\x01\xbaH4r2\x18@2.^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)$\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\vimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\finput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\baccesses\x8a\xb5\x18\x06copies\x8a\xb5\x18\x05seats\x9a\xb5\x18\fquotametricsR\x06metric\x12\x1d\n" + "\x05limit\x18\x02 \x01(\x03B\a\xbaH\x04\"\x02(\x01R\x05limit\x126\n" + "\x06window\x18\x03 \x01(\x0e2\x14.ramp.v1.QuotaWindowB\b\xbaH\x05\x82\x01\x02 \x00R\x06window\"\x98\x04\n" + "\n" + @@ -8499,16 +8494,15 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "\x06_widthB\t\n" + "\a_heightB\v\n" + "\t_durationB\a\n" + - "\x05_size\"\x8a\t\n" + + "\x05_size\"\xd5\a\n" + "\aPricing\x125\n" + "\x05model\x18\x01 \x01(\x0e2\x15.ramp.v1.PricingModelB\b\xbaH\x05\x82\x01\x02 \x00R\x05model\x12\x12\n" + "\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n" + "\bcurrency\x18\x03 \x01(\tR\bcurrency\x12 \n" + "\tunit_cost\x18\x04 \x01(\x01H\x00R\bunitCost\x88\x01\x01\x122\n" + "\x12estimated_quantity\x18\x05 \x01(\x05H\x01R\x11estimatedQuantity\x88\x01\x01\x12;\n" + - "\x17license_duration_months\x18\a \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\xc8\x03\n" + - "\x04unit\x18\b \x01(\tB\xae\x03\xbaH\xe9\x01\xba\x01\xe1\x01\n" + - "\x13pricing.unit.format\x12iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, ≤64 chars)\x1a_this == '' || this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$')r\x02\x18@\x8a\xb5\x18\afetches\x8a\xb5\x18\baccesses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05calls\x8a\xb5\x18\x05pages\x8a\xb5\x18\aseconds\x8a\xb5\x18\aminutes\x8a\xb5\x18\arecords\x8a\xb5\x18\astreams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\n" + + "\x17license_duration_months\x18\a \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\x93\x02\n" + + "\x04unit\x18\b \x01(\tB\xf9\x01\xbaH5r3\x18@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$\x8a\xb5\x18\afetches\x8a\xb5\x18\baccesses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05calls\x8a\xb5\x18\x05pages\x8a\xb5\x18\aseconds\x8a\xb5\x18\aminutes\x8a\xb5\x18\arecords\x8a\xb5\x18\astreams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\n" + "characters\x8a\xb5\x18\x05bytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-km\x9a\xb5\x18\fpricingunitsH\x03R\x04unit\x88\x01\x01\x129\n" + "\bmetering\x18\t \x01(\x0e2\x18.ramp.v1.PricingMeteringH\x04R\bmetering\x88\x01\x01:\xa7\x02\xbaH\xa3\x02\x1a\x97\x01\n" + "\x1epricing.per_unit.requires_unit\x12'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != ''\x1a\x86\x01\n" + @@ -8717,16 +8711,15 @@ const file_ramp_v1_ramp_proto_rawDesc = "" + "\x0fvisible_to_user\x18\x03 \x01(\bH\x02R\rvisibleToUser\x88\x01\x01B\x10\n" + "\x0e_displayed_urlB\t\n" + "\a_formatB\x12\n" + - "\x10_visible_to_user\"\xf0\x04\n" + + "\x10_visible_to_user\"\xa9\x03\n" + "\x05Usage\x12\x1a\n" + "\bfunction\x18\x01 \x03(\tR\bfunction\x12\x14\n" + "\x05subfn\x18\x02 \x03(\tR\x05subfn\x12+\n" + "\x11consumed_quantity\x18\x03 \x01(\x05R\x10consumedQuantity\x12/\n" + "\x11displayed_to_user\x18\x04 \x01(\bH\x00R\x0fdisplayedToUser\x88\x01\x01\x120\n" + "\x11citation_included\x18\x05 \x01(\bH\x01R\x10citationIncluded\x88\x01\x01\x12<\n" + - "\vattribution\x18\x06 \x03(\v2\x1a.ramp.v1.AttributionDetailR\vattribution\x12\xa8\x02\n" + - "\rconsumed_unit\x18\b \x01(\tB\xfd\x01\xbaH\xf9\x01\xba\x01\xf1\x01\n" + - "\x1ausage.consumed_unit.format\x12rconsumed_unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, ≤64 chars)\x1a_this == '' || this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$')r\x02\x18@H\x02R\fconsumedUnit\x88\x01\x01B\x14\n" + + "\vattribution\x18\x06 \x03(\v2\x1a.ramp.v1.AttributionDetailR\vattribution\x12b\n" + + "\rconsumed_unit\x18\b \x01(\tB8\xbaH5r3\x18@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$H\x02R\fconsumedUnit\x88\x01\x01B\x14\n" + "\x12_displayed_to_userB\x14\n" + "\x12_citation_includedB\x10\n" + "\x0e_consumed_unit\"v\n" + diff --git a/gen/python/ramp/v1/ramp_pb2.py b/gen/python/ramp/v1/ramp_pb2.py index 3526b602..01d1d7da 100644 --- a/gen/python/ramp/v1/ramp_pb2.py +++ b/gen/python/ramp/v1/ramp_pb2.py @@ -29,7 +29,7 @@ from ramp.v1 import vocab_pb2 as ramp_dot_v1_dot_vocab__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12ramp/v1/ramp.proto\x12\x07ramp.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x13ramp/v1/vocab.proto\"\xb5\x02\n\x15\x41\x63\x63\x65ptableRestriction\x12,\n\x04\x61xis\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04\x61xis\x12\xed\x01\n\x06values\x18\x02 \x03(\tB\xd4\x01\xbaH\xd0\x01\x92\x01\x02\x10@\xba\x01\xc7\x01\n$acceptable_restriction.values.format\x12Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\x06values\"\xa1\x03\n\rResourceQuery\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12:\n\x08\x64\x65\x61\x64line\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x08\x64\x65\x61\x64line\x88\x01\x01\x12-\n\x12supported_profiles\x18\x07 \x03(\tR\x11supportedProfiles\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_deadline\"\xb9\x02\n\x10ResourceResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x65xchange\x18\x03 \x01(\tR\x08\x65xchange\x12&\n\x06offers\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12\x36\n\x0coffer_groups\x18\x05 \x03(\x0b\x32\x13.ramp.v1.OfferGroupR\x0bofferGroups\x12:\n\nrate_limit\x18\x06 \x01(\x0b\x32\x16.ramp.v1.RateLimitInfoH\x00R\trateLimit\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_rate_limit\"\xcc\x02\n\nOfferGroup\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12&\n\x06offers\x18\x02 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12H\n\x10\x64iscovery_method\x18\x03 \x01(\x0e\x32\x18.ramp.v1.DiscoveryMethodH\x00R\x0f\x64iscoveryMethod\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x04 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x01R\rabsenceReason\x88\x01\x01\x12I\n\x13restriction_filters\x18\x05 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x12restrictionFiltersB\x13\n\x11_discovery_methodB\x11\n\x0f_absence_reason\"\xbd\x01\n\rRateLimitInfo\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x1c\n\tremaining\x18\x02 \x01(\x05R\tremaining\x12\x35\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07resetAt\x12\x36\n\x06window\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x42\t\n\x07_window\"\x97\x02\n\x15SubscriptionQuotaInfo\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1f\n\x0bquota_limit\x18\x02 \x01(\x05R\nquotaLimit\x12\x1d\n\nquota_used\x18\x03 \x01(\x05R\tquotaUsed\x12\'\n\x0fquota_remaining\x18\x04 \x01(\x05R\x0equotaRemaining\x12<\n\tresets_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x08resetsAt\x88\x01\x01\x12\x17\n\x04unit\x18\x06 \x01(\tH\x01R\x04unit\x88\x01\x01\x42\x0c\n\n_resets_atB\x07\n\x05_unit\"\xdb\x07\n\x05Offer\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12*\n\x07pricing\x18\x03 \x01(\x0b\x32\x10.ramp.v1.PricingR\x07pricing\x12@\n\x0f\x64\x65livery_method\x18\x04 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12?\n\treporting\x18\x05 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\treporting\x88\x01\x01\x12>\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12:\n\x08identity\x18\x07 \x01(\x0b\x32\x19.ramp.v1.ResourceIdentityH\x03R\x08identity\x88\x01\x01\x12\x1c\n\tsignature\x18\t \x01(\tR\tsignature\x12/\n\x13signature_algorithm\x18\n \x01(\tR\x12signatureAlgorithm\x12,\n\x0fsubscription_id\x18\x0b \x01(\tH\x04R\x0esubscriptionId\x88\x01\x01\x12%\n\x0eiab_categories\x18\r \x03(\tR\riabCategories\x12@\n\x0c\x61ttestations\x18\x0e \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12=\n\ndata_as_of\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\x08\x64\x61taAsOf\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12,\n\x08previews\x18\x12 \x03(\x0b\x32\x10.ramp.v1.PreviewR\x08previews\x12*\n\x05terms\x18\x13 \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x08\n\x06_titleB\x0c\n\n_reportingB\r\n\x0b_expires_atB\x0b\n\t_identityB\x12\n\x10_subscription_idB\r\n\x0b_data_as_of\"\xe1\x05\n\x10ResourceIdentity\x12(\n\rcanonical_url\x18\x01 \x01(\tH\x00R\x0c\x63\x61nonicalUrl\x88\x01\x01\x12\x15\n\x03\x64oi\x18\x02 \x01(\tH\x01R\x03\x64oi\x88\x01\x01\x12 \n\tiptc_guid\x18\x03 \x01(\tH\x02R\x08iptcGuid\x88\x01\x01\x12\x17\n\x04isni\x18\x04 \x01(\tH\x03R\x04isni\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x05 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x06 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12V\n\x13resource_mutability\x18\x08 \x01(\x0e\x32\x1b.ramp.v1.ResourceMutabilityB\x08\xbaH\x05\x82\x01\x02 \x00R\x12resourceMutability\x12(\n\rc2pa_manifest\x18\x07 \x01(\tH\x06R\x0c\x63\x32paManifest\x88\x01\x01\x12\x39\n\x0b\x63\x32pa_status\x18\t \x01(\x0e\x32\x13.ramp.v1.C2PAStatusH\x07R\nc2paStatus\x88\x01\x01\x12&\n\x0csoft_binding\x18\n \x01(\tH\x08R\x0bsoftBinding\x88\x01\x01\x12\x33\n\x13soft_binding_method\x18\x0b \x01(\tH\tR\x11softBindingMethod\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x10\n\x0e_canonical_urlB\x06\n\x04_doiB\x0c\n\n_iptc_guidB\x07\n\x05_isniB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\x10\n\x0e_c2pa_manifestB\x0e\n\x0c_c2pa_statusB\x0f\n\r_soft_bindingB\x16\n\x14_soft_binding_method\"\xe1\x01\n\x13ResourceAttestation\x12\x1a\n\x08verifier\x18\x01 \x01(\tR\x08verifier\x12\x10\n\x03kid\x18\x02 \x01(\tR\x03kid\x12;\n\x0b\x61ttested_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nattestedAt\x12\x10\n\x03uri\x18\x04 \x01(\tR\x03uri\x12/\n\x06\x63laims\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63laims\x12\x1c\n\tsignature\x18\x06 \x01(\tR\tsignature\"\xd4\x04\n\x07License\x12\x15\n\x03uri\x18\x01 \x01(\tH\x00R\x03uri\x88\x01\x01\x12\x13\n\x02id\x18\x02 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x17\n\x04name\x18\x03 \x01(\tH\x02R\x04name\x88\x01\x01\x12!\n\timmutable\x18\x04 \x01(\x08H\x03R\timmutable\x88\x01\x01\x12\xad\x02\n\nuri_digest\x18\x05 \x01(\tB\x88\x02\xbaH\x84\x02\xba\x01\x80\x02\n\x19license.uri_digest.format\x12Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\x1a\x86\x01this == \'\' || this.matches(\'^sha256:[0-9a-f]{64}$\') || this.matches(\'^sha384:[0-9a-f]{96}$\') || this.matches(\'^sha512:[0-9a-f]{128}$\')H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n license.digest_required_with_uri\x12*uri_digest is required whenever uri is set\x1a\'this.uri == \'\' || this.uri_digest != \'\'B\x06\n\x04_uriB\x05\n\x03_idB\x07\n\x05_nameB\x0c\n\n_immutableB\r\n\x0b_uri_digest\"\xdd\x05\n\x0bRestriction\x12\x36\n\x04kind\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindB\x08\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12\xeb\x01\n\tpermitted\x18\x02 \x03(\tB\xcc\x01\xbaH\xc8\x01\x92\x01\x02\x10@\xba\x01\xbf\x01\n\x1crestriction.permitted.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\tpermitted\x12\xee\x01\n\nprohibited\x18\x03 \x03(\tB\xcd\x01\xbaH\xc9\x01\x92\x01\x02\x10@\xba\x01\xc0\x01\n\x1drestriction.prohibited.format\x12Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\x1aPthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))R\nprohibited\x12\x1a\n\x08\x61\x64visory\x18\x04 \x01(\x08R\x08\x61\x64visory:\x9a\x01\xbaH\x96\x01\x1a\x93\x01\n)restriction.permitted_prohibited_disjoint\x12\x36\x61 token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\"\xe2\x03\n\x05Quota\x12\x81\x03\n\x06metric\x18\x01 \x01(\tB\xe8\x02\xbaH\xe5\x01r\x02\x18@\xba\x01\xdd\x01\n\x13quota.metric.format\x12\x63metric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a\x61this != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\x0bimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x0cinput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06\x63opies\x8a\xb5\x18\x05seats\x9a\xb5\x18\x0cquotametricsR\x06metric\x12\x1d\n\x05limit\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x05limit\x12\x36\n\x06window\x18\x03 \x01(\x0e\x32\x14.ramp.v1.QuotaWindowB\x08\xbaH\x05\x82\x01\x02 \x00R\x06window\"\x98\x04\n\nObligation\x12\x35\n\x04kind\x18\x01 \x01(\x0e\x32\x17.ramp.v1.ObligationKindB\x08\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12>\n\x07trigger\x18\x02 \x01(\x0e\x32\x1a.ramp.v1.ObligationTriggerB\x08\xbaH\x05\x82\x01\x02 \x00R\x07trigger\x12:\n\rscope_license\x18\x03 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x0cscopeLicense\x88\x01\x01\x12\x1b\n\x06\x64\x65tail\x18\x04 \x01(\tH\x01R\x06\x64\x65tail\x88\x01\x01:\x9c\x02\xbaH\x98\x02\x1a\x95\x02\n-obligation.share_alike.requires_scope_license\x12\x44SHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))B\x10\n\x0e_scope_licenseB\t\n\x07_detail\"\xd5\x06\n\x0bLicenseTerm\x12/\n\x07license\x18\x01 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x07license\x88\x01\x01\x12>\n\tsemantics\x18\x02 \x01(\x0e\x32\x16.ramp.v1.TermSemanticsB\x08\xbaH\x05\x82\x01\x02 \x00R\tsemantics\x12\x38\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x14.ramp.v1.RestrictionR\x0crestrictions\x12&\n\x06quotas\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.QuotaR\x06quotas\x12\x35\n\x0bobligations\x18\x05 \x03(\x0b\x32\x13.ramp.v1.ObligationR\x0bobligations\x12\x37\n\x07pricing\x18\x06 \x01(\x0b\x32\x10.ramp.v1.PricingB\x06\xbaH\x03\xc8\x01\x01H\x01R\x07pricing\x88\x01\x01\x12 \n\x06scopes\x18\x07 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\"\n\npart_label\x18\x08 \x01(\tH\x02R\tpartLabel\x88\x01\x01:\x95\x03\xbaH\x91\x03\x1a\xe2\x01\n(license_term.reference_only.requires_uri\x12>REFERENCE_ONLY terms must carry a license with a non-empty uri\x1avthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\x1a\xa9\x01\n%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)B\n\n\x08_licenseB\n\n\x08_pricingB\r\n\x0b_part_label\"\xd7\x01\n\x07Preview\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n\nmedia_type\x18\x02 \x01(\tR\tmediaType\x12\x19\n\x05width\x18\x03 \x01(\x05H\x00R\x05width\x88\x01\x01\x12\x1b\n\x06height\x18\x04 \x01(\x05H\x01R\x06height\x88\x01\x01\x12\x1f\n\x08\x64uration\x18\x05 \x01(\x05H\x02R\x08\x64uration\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\tH\x03R\x04size\x88\x01\x01\x42\x08\n\x06_widthB\t\n\x07_heightB\x0b\n\t_durationB\x07\n\x05_size\"\x8a\t\n\x07Pricing\x12\x35\n\x05model\x18\x01 \x01(\x0e\x32\x15.ramp.v1.PricingModelB\x08\xbaH\x05\x82\x01\x02 \x00R\x05model\x12\x12\n\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x04 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x05 \x01(\x05H\x01R\x11\x65stimatedQuantity\x88\x01\x01\x12;\n\x17license_duration_months\x18\x07 \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\xc8\x03\n\x04unit\x18\x08 \x01(\tB\xae\x03\xbaH\xe9\x01r\x02\x18@\xba\x01\xe1\x01\n\x13pricing.unit.format\x12iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\x8a\xb5\x18\x07\x66\x65tches\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05\x63\x61lls\x8a\xb5\x18\x05pages\x8a\xb5\x18\x07seconds\x8a\xb5\x18\x07minutes\x8a\xb5\x18\x07records\x8a\xb5\x18\x07streams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\ncharacters\x8a\xb5\x18\x05\x62ytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-km\x9a\xb5\x18\x0cpricingunitsH\x03R\x04unit\x88\x01\x01\x12\x39\n\x08metering\x18\t \x01(\x0e\x32\x18.ramp.v1.PricingMeteringH\x04R\x08metering\x88\x01\x01:\xa7\x02\xbaH\xa3\x02\x1a\x97\x01\n\x1epricing.per_unit.requires_unit\x12\'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\x1a\x86\x01\n\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0B\x0c\n\n_unit_costB\x15\n\x13_estimated_quantityB\x1a\n\x18_license_duration_monthsB\x07\n\x05_unitB\x0b\n\t_metering\"\xfa\x02\n\tRequester\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x34\n\x04type\x18\x03 \x01(\x0e\x32\x16.ramp.v1.RequesterTypeB\x08\xbaH\x05\x82\x01\x02 \x00R\x04type\x12\x17\n\x04name\x18\x04 \x01(\tH\x00R\x04name\x88\x01\x01\x12$\n\x0b\x62illing_ref\x18\x05 \x01(\tH\x01R\nbillingRef\x88\x01\x01\x12 \n\x06scopes\x18\x06 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\x38\n\ndelegation\x18\x07 \x01(\x0b\x32\x13.ramp.v1.DelegationH\x02R\ndelegation\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x07\n\x05_nameB\x0e\n\x0c_billing_refB\r\n\x0b_delegation\"\xe9\x04\n\nDelegation\x12)\n\x10principal_domain\x18\x01 \x01(\tR\x0fprincipalDomain\x12!\n\x0cprincipal_id\x18\x02 \x01(\tR\x0bprincipalId\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\x12\x39\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12+\n\x0fmax_spend_cents\x18\x05 \x01(\x03H\x00R\rmaxSpendCents\x88\x01\x01\x12&\n\x0cmax_accesses\x18\t \x01(\x05H\x01R\x0bmaxAccesses\x88\x01\x01\x12\x41\n\x0cquota_period\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x02R\x0bquotaPeriod\x88\x01\x01\x12\x14\n\x05token\x18\x06 \x01(\x0cR\x05token\x12!\n\x0ctoken_format\x18\x07 \x01(\tR\x0btokenFormat\x12*\n\x0erevocation_uri\x18\x08 \x01(\tH\x03R\rrevocationUri\x88\x01\x01\x12\x1b\n\x06issuer\x18\x0b \x01(\tH\x04R\x06issuer\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x12\n\x10_max_spend_centsB\x0f\n\r_max_accessesB\x0f\n\r_quota_periodB\x11\n\x0f_revocation_uriB\t\n\x07_issuer\"\xf7\x02\n\x12TransactionRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x12\x30\n\trequester\x18\x04 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12,\n\x0foffer_signature\x18\x06 \x01(\tH\x01R\x0eofferSignature\x88\x01\x01\x12.\n\x05items\x18\x07 \x03(\x0b\x32\x18.ramp.v1.TransactionItemR\x05items\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_offer_idB\x12\n\x10_offer_signature\"U\n\x0fTransactionItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\'\n\x0foffer_signature\x18\x02 \x01(\tR\x0eofferSignature\"\xc3\x08\n\x13TransactionResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12*\n\x0etransaction_id\x18\x03 \x01(\tH\x00R\rtransactionId\x88\x01\x01\x12\"\n\nbilling_id\x18\x04 \x01(\tH\x01R\tbillingId\x88\x01\x01\x12*\n\x0eresource_title\x18\x05 \x01(\tH\x02R\rresourceTitle\x88\x01\x01\x12&\n\x04\x63ost\x18\x06 \x01(\x0b\x32\r.ramp.v1.CostH\x03R\x04\x63ost\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\x07 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\x08 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x04R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\texpiresAt\x88\x01\x01\x12.\n\x13\x61gent_identity_hash\x18\n \x01(\tR\x11\x61gentIdentityHash\x12\x32\n\x12retrieval_endpoint\x18\x12 \x01(\tH\x06R\x11retrievalEndpoint\x88\x01\x01\x12,\n\x0fsubscription_id\x18\x0c \x01(\tH\x07R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x10 \x01(\x0b\x32\r.ramp.v1.CostH\x08R\x15subscriptionUnitValue\x88\x01\x01\x12\x34\n\x05items\x18\r \x03(\x0b\x32\x1e.ramp.v1.TransactionResultItemR\x05items\x12\x31\n\ntotal_cost\x18\x0e \x01(\x0b\x32\r.ramp.v1.CostH\tR\ttotalCost\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_transaction_idB\r\n\x0b_billing_idB\x11\n\x0f_resource_titleB\x07\n\x05_costB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\r\n\x0b_total_cost\"\xf3\x06\n\x15TransactionResultItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12%\n\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x03 \x01(\tR\tbillingId\x12*\n\x0eresource_title\x18\x04 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x05 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12,\n\x0fsubscription_id\x18\x06 \x01(\tH\x01R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x0b \x01(\x0b\x32\r.ramp.v1.CostH\x02R\x15subscriptionUnitValue\x88\x01\x01\x12?\n\rdenial_reason\x18\x07 \x01(\x0e\x32\x15.ramp.v1.DenialReasonH\x03R\x0c\x64\x65nialReason\x88\x01\x01\x12O\n\x16restriction_mismatches\x18\r \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12>\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\x0c \x01(\tH\x05R\x11retrievalEndpoint\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x06R\x13reportingObligation\x88\x01\x01\x42\x11\n\x0f_resource_titleB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\x10\n\x0e_denial_reasonB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x17\n\x15_reporting_obligation\"j\n\x04\x43ost\x12\x16\n\x06\x61mount\x18\x01 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x02 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x03 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x42\x0c\n\n_unit_cost\"\xe2\x01\n\x14PushResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x30\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x16.ramp.v1.ResourceEntryR\x07\x65ntries\x12\x1b\n\tcaller_id\x18\x04 \x01(\tR\x08\x63\x61llerId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xb3\x06\n\rResourceEntry\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\"\n\ncontent_id\x18\x03 \x01(\tH\x00R\tcontentId\x88\x01\x01\x12\x19\n\x05title\x18\x04 \x01(\tH\x01R\x05title\x88\x01\x01\x12\"\n\nword_count\x18\x05 \x01(\x05H\x02R\twordCount\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x06 \x01(\x05H\x03R\x11\x65stimatedQuantity\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x07 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x08 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12\x35\n\x06source\x18\t \x01(\x0e\x32\x18.ramp.v1.IngestionSourceH\x06R\x06source\x88\x01\x01\x12\x30\n\x11provenance_source\x18\n \x01(\tH\x07R\x10provenanceSource\x88\x01\x01\x12R\n\x14provenance_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x08R\x13provenanceTimestamp\x88\x01\x01\x12@\n\x0c\x61ttestations\x18\x0c \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12*\n\x05terms\x18\r \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_content_idB\x08\n\x06_titleB\r\n\x0b_word_countB\x15\n\x13_estimated_quantityB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\t\n\x07_sourceB\x14\n\x12_provenance_sourceB\x17\n\x15_provenance_timestamp\"\xcb\x01\n\x15PushResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x05R\x08\x61\x63\x63\x65pted\x12\x1a\n\x08rejected\x18\x03 \x01(\x05R\x08rejected\x12\x1a\n\x08warnings\x18\x04 \x03(\tR\x08warnings\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"]\n\x16RemoveResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\"E\n\x17RemoveResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07removed\x18\x02 \x01(\x05R\x07removed\"F\n\x15RefreshCatalogRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\"D\n\x16RefreshCatalogResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07started\x18\x02 \x01(\x08R\x07started\"\x99\x02\n\x13ReportingObligation\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\x12\x36\n\x06window\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x03 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12\'\n\x0frequired_fields\x18\x04 \x03(\tR\x0erequiredFields\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_windowB\x0b\n\t_endpoint\"\xa0\x03\n\x0bUsageReport\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12$\n\x05usage\x18\x05 \x01(\x0b\x32\x0e.ramp.v1.UsageR\x05usage\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1f\n\x08\x65xchange\x18\x08 \x01(\tH\x00R\x08\x65xchange\x88\x01\x01\x12+\n\x06\x61ssets\x18\t \x03(\x0b\x32\x13.ramp.v1.UsageAssetR\x06\x61ssets\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_exchange\"\xd1\x01\n\x11\x41ttributionDetail\x12(\n\rdisplayed_url\x18\x01 \x01(\tH\x00R\x0c\x64isplayedUrl\x88\x01\x01\x12\x34\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x17.ramp.v1.CitationFormatH\x01R\x06\x66ormat\x88\x01\x01\x12+\n\x0fvisible_to_user\x18\x03 \x01(\x08H\x02R\rvisibleToUser\x88\x01\x01\x42\x10\n\x0e_displayed_urlB\t\n\x07_formatB\x12\n\x10_visible_to_user\"\xf0\x04\n\x05Usage\x12\x1a\n\x08\x66unction\x18\x01 \x03(\tR\x08\x66unction\x12\x14\n\x05subfn\x18\x02 \x03(\tR\x05subfn\x12+\n\x11\x63onsumed_quantity\x18\x03 \x01(\x05R\x10\x63onsumedQuantity\x12/\n\x11\x64isplayed_to_user\x18\x04 \x01(\x08H\x00R\x0f\x64isplayedToUser\x88\x01\x01\x12\x30\n\x11\x63itation_included\x18\x05 \x01(\x08H\x01R\x10\x63itationIncluded\x88\x01\x01\x12<\n\x0b\x61ttribution\x18\x06 \x03(\x0b\x32\x1a.ramp.v1.AttributionDetailR\x0b\x61ttribution\x12\xa8\x02\n\rconsumed_unit\x18\x08 \x01(\tB\xfd\x01\xbaH\xf9\x01r\x02\x18@\xba\x01\xf1\x01\n\x1ausage.consumed_unit.format\x12rconsumed_unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \xe2\x89\xa4\x36\x34 chars)\x1a_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')H\x02R\x0c\x63onsumedUnit\x88\x01\x01\x42\x14\n\x12_displayed_to_userB\x14\n\x12_citation_includedB\x10\n\x0e_consumed_unit\"v\n\nUsageAsset\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\"\n\npackage_id\x18\x03 \x01(\tH\x01R\tpackageId\x88\x01\x01\x42\x08\n\x06_titleB\r\n\x0b_package_id\"\x92\x01\n\x13UsageReportResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\treport_id\x18\x03 \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xa7\x04\n\x0bRAMPRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12\x42\n\x0b\x63onstraints\x18\x04 \x01(\x0b\x32\x1b.ramp.v1.RequestConstraintsH\x00R\x0b\x63onstraints\x88\x01\x01\x12-\n\x12supported_profiles\x18\x05 \x03(\tR\x11supportedProfiles\x12\x19\n\x05query\x18\x06 \x01(\tH\x01R\x05query\x88\x01\x01\x12\x43\n\x0esearch_filters\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02R\rsearchFilters\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_constraintsB\x08\n\x06_queryB\x11\n\x0f_search_filters\"\xca\x05\n\x12RequestConstraints\x12\x1c\n\texchanges\x18\x01 \x03(\tR\texchanges\x12/\n\tmax_price\x18\x02 \x01(\x0b\x32\r.ramp.v1.CostH\x00R\x08maxPrice\x88\x01\x01\x12\'\n\rmax_unit_cost\x18\x03 \x01(\x01H\x01R\x0bmaxUnitCost\x88\x01\x01\x12H\n\x13\x64\x65livery_preference\x18\x04 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x12\x64\x65liveryPreference\x12\x30\n\x11reporting_capable\x18\x05 \x01(\x08H\x02R\x10reportingCapable\x88\x01\x01\x12/\n\x13preferred_exchanges\x18\x06 \x03(\tR\x12preferredExchanges\x12&\n\x0c\x62udget_scope\x18\x07 \x01(\tH\x03R\x0b\x62udgetScope\x88\x01\x01\x12\x37\n\rperiod_budget\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostH\x04R\x0cperiodBudget\x88\x01\x01\x12\x43\n\rbudget_period\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationH\x05R\x0c\x62udgetPeriod\x88\x01\x01\x12@\n\x0cmax_data_age\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x06R\nmaxDataAge\x88\x01\x01\x12\x1e\n\x08max_hops\x18\x0b \x01(\x05H\x07R\x07maxHops\x88\x01\x01\x42\x0c\n\n_max_priceB\x10\n\x0e_max_unit_costB\x14\n\x12_reporting_capableB\x0f\n\r_budget_scopeB\x10\n\x0e_period_budgetB\x10\n\x0e_budget_periodB\x0f\n\r_max_data_ageB\x0b\n\t_max_hops\"\xb0\x01\n\nJsonWebKey\x12\x10\n\x03kid\x18\x01 \x01(\tR\x03kid\x12\x10\n\x03kty\x18\x02 \x01(\tR\x03kty\x12\x10\n\x03\x63rv\x18\x03 \x01(\tR\x03\x63rv\x12\x10\n\x03use\x18\x04 \x01(\tR\x03use\x12\x10\n\x03\x61lg\x18\x05 \x01(\tR\x03\x61lg\x12\x0c\n\x01x\x18\x06 \x01(\tR\x01x\x12\x1d\n\nnot_before\x18\x07 \x01(\tR\tnotBefore\x12\x1b\n\tnot_after\x18\x08 \x01(\tR\x08notAfter\"\xef\x0c\n\x11WellKnownManifest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12+\n\x04role\x18\x02 \x01(\x0e\x32\r.ramp.v1.RoleB\x08\xbaH\x05\x82\x01\x02 \x00R\x04role\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x1d\n\x07\x63ontact\x18\x04 \x01(\tH\x00R\x07\x63ontact\x88\x01\x01\x12\x34\n\x0bpublic_keys\x18\x05 \x03(\x0b\x32\x13.ramp.v1.JsonWebKeyR\npublicKeys\x12.\n\x10invalidation_url\x18\x06 \x01(\tH\x01R\x0finvalidationUrl\x88\x01\x01\x12\x39\n\texchanges\x18\x07 \x03(\x0b\x32\x1b.ramp.v1.AuthorizedExchangeR\texchanges\x12N\n\x14\x63\x61talog_contributors\x18\x08 \x03(\x0b\x32\x1b.ramp.v1.CatalogContributorR\x13\x63\x61talogContributors\x12\x17\n\x04name\x18\t \x01(\tH\x02R\x04name\x88\x01\x01\x12\x1f\n\x08operator\x18\n \x01(\tH\x03R\x08operator\x88\x01\x01\x12,\n\x0foperator_domain\x18\x0b \x01(\tH\x04R\x0eoperatorDomain\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x0c \x01(\tH\x05R\x08\x65ndpoint\x88\x01\x01\x12,\n\x0fhealth_endpoint\x18\r \x01(\tH\x06R\x0ehealthEndpoint\x88\x01\x01\x12.\n\x10\x63\x61talog_endpoint\x18\x0e \x01(\tH\x07R\x0f\x63\x61talogEndpoint\x88\x01\x01\x12>\n\x1bprotocol_versions_supported\x18\x10 \x03(\tR\x19protocolVersionsSupported\x12O\n\x18pricing_models_supported\x18\x11 \x03(\x0e\x32\x15.ramp.v1.PricingModelR\x16pricingModelsSupported\x12U\n\x1a\x64\x65livery_methods_supported\x18\x12 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x18\x64\x65liveryMethodsSupported\x12\x34\n\x16hash_methods_supported\x18\x13 \x03(\tR\x14hashMethodsSupported\x12-\n\x12\x61\x63\x63\x65pted_verifiers\x18\x14 \x03(\tR\x11\x61\x63\x63\x65ptedVerifiers\x12 \n\tterms_uri\x18\x15 \x01(\tH\x08R\x08termsUri\x88\x01\x01\x12$\n\x0bprivacy_uri\x18\x16 \x01(\tH\tR\nprivacyUri\x88\x01\x01\x12-\n\x12supported_profiles\x18\x17 \x03(\tR\x11supportedProfiles\x12I\n\x16supported_auth_methods\x18\x18 \x03(\x0e\x32\x13.ramp.v1.AuthMethodR\x14supportedAuthMethods\x12$\n\x0boidc_issuer\x18\x19 \x01(\tH\nR\noidcIssuer\x88\x01\x01\x12\x33\n\x13gnap_grant_endpoint\x18\x1a \x01(\tH\x0bR\x11gnapGrantEndpoint\x88\x01\x01\x12(\n\rbase_currency\x18\x1b \x01(\tH\x0cR\x0c\x62\x61seCurrency\x88\x01\x01\x12\x37\n\x15max_intermediary_hops\x18\x1c \x01(\x05H\rR\x13maxIntermediaryHops\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\n\n\x08_contactB\x13\n\x11_invalidation_urlB\x07\n\x05_nameB\x0b\n\t_operatorB\x12\n\x10_operator_domainB\x0b\n\t_endpointB\x12\n\x10_health_endpointB\x13\n\x11_catalog_endpointB\x0c\n\n_terms_uriB\x0e\n\x0c_privacy_uriB\x0e\n\x0c_oidc_issuerB\x16\n\x14_gnap_grant_endpointB\x10\n\x0e_base_currencyB\x18\n\x16_max_intermediary_hops\"`\n\x13KeyInvalidationList\x12/\n\x05\x61s_of\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04\x61sOf\x12\x18\n\x07revoked\x18\x02 \x03(\tR\x07revoked\"P\n\x12\x43\x61talogContributor\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\"\n\x0crelationship\x18\x02 \x01(\tR\x0crelationship\"\xe3\x01\n\x12\x41uthorizedExchange\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12K\n\x0crelationship\x18\x03 \x01(\x0e\x32\x1d.ramp.v1.ProviderRelationshipB\x08\xbaH\x05\x82\x01\x02 \x00R\x0crelationship\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xe8\x06\n\x0cRAMPResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12%\n\x0etransaction_id\x18\x04 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x05 \x01(\tR\tbillingId\x12\x1a\n\x08\x65xchange\x18\x06 \x01(\tR\x08\x65xchange\x12*\n\x0eresource_title\x18\x07 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\r \x01(\tH\x03R\x11retrievalEndpoint\x88\x01\x01\x12\x33\n\x13\x61gent_identity_hash\x18\x0e \x01(\tH\x04R\x11\x61gentIdentityHash\x88\x01\x01\x12\x31\n\nbroker_fee\x18\x0c \x01(\x0b\x32\r.ramp.v1.CostH\x05R\tbrokerFee\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x10 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x06R\rabsenceReason\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_resource_titleB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x16\n\x14_agent_identity_hashB\r\n\x0b_broker_feeB\x11\n\x0f_absence_reason\"\x99\x04\n\x0e\x44isputeRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12\x38\n\x06reason\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeReasonB\x08\xbaH\x05\x82\x01\x02 \x00R\x06reason\x12%\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x37\n\x15received_content_hash\x18\x07 \x01(\tH\x01R\x13receivedContentHash\x88\x01\x01\x12\x35\n\x14received_hash_method\x18\x08 \x01(\tH\x02R\x12receivedHashMethod\x88\x01\x01\x12\x1b\n\treport_id\x18\t \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_descriptionB\x18\n\x16_received_content_hashB\x17\n\x15_received_hash_method\"\x8d\x03\n\x0f\x44isputeResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\"\n\ndispute_id\x18\x02 \x01(\tH\x00R\tdisputeId\x88\x01\x01\x12Q\n\x14\x65stimated_resolution\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01R\x13\x65stimatedResolution\x88\x01\x01\x12.\n\x06status\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeStatusR\x06status\x12<\n\nresolution\x18\x06 \x01(\x0e\x32\x17.ramp.v1.ResolutionTypeH\x02R\nresolution\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_dispute_idB\x17\n\x15_estimated_resolutionB\r\n\x0b_resolution\"\xc3\x01\n\x19\x44omainVerificationRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12 \n\tcaller_id\x18\x03 \x01(\tH\x00R\x08\x63\x61llerId\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0c\n\n_caller_id\"\xf9\x01\n\x1b\x44omainVerificationChallenge\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12)\n\x10verification_url\x18\x04 \x01(\tR\x0fverificationUrl\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\x91\x02\n\x1e\x44omainVerificationConfirmation\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12$\n\x0bsigning_key\x18\x04 \x01(\tH\x00R\nsigningKey\x88\x01\x01\x12\x1e\n\x08\x63\x64n_type\x18\x05 \x01(\tH\x01R\x07\x63\x64nType\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_signing_keyB\x0b\n\t_cdn_type\"\xf3\x01\n\x18\x44omainVerificationResult\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x06key_id\x18\x02 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12@\n\x0bvalid_until\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nvalidUntil\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_key_idB\x0e\n\x0c_valid_until\"\x88\x06\n\x0b\x45rrorDetail\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12>\n\x08metadata\x18\x03 \x03(\x0b\x32\".ramp.v1.ErrorDetail.MetadataEntryR\x08metadata\x12K\n\x12transaction_denial\x18\n \x01(\x0b\x32\x1a.ramp.v1.TransactionDenialH\x00R\x11transactionDenial\x12H\n\x11\x63\x61talog_rejection\x18\x0b \x01(\x0b\x32\x19.ramp.v1.CatalogRejectionH\x00R\x10\x63\x61talogRejection\x12Q\n\x14registration_failure\x18\x0c \x01(\x0b\x32\x1c.ramp.v1.RegistrationFailureH\x00R\x13registrationFailure\x12\x42\n\x0f\x64ispute_failure\x18\r \x01(\x0b\x32\x17.ramp.v1.DisputeFailureH\x00R\x0e\x64isputeFailure\x12\x64\n\x1b\x64omain_verification_failure\x18\x0e \x01(\x0b\x32\".ramp.v1.DomainVerificationFailureH\x00R\x19\x64omainVerificationFailure\x12U\n\x16retrieval_auth_failure\x18\x0f \x01(\x0b\x32\x1d.ramp.v1.RetrievalAuthFailureH\x00R\x14retrievalAuthFailure\x12U\n\x16usage_report_rejection\x18\x10 \x01(\x0b\x32\x1d.ramp.v1.UsageReportRejectionH\x00R\x14usageReportRejection\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06reason\"\xcc\x01\n\x11TransactionDenial\x12\x39\n\x06reason\x18\x01 \x01(\x0e\x32\x15.ramp.v1.DenialReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12O\n\x16restriction_mismatches\x18\x02 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x42\x0b\n\t_offer_id\"~\n\x10\x43\x61talogRejection\x12\x43\n\x06reason\x18\x01 \x01(\x0e\x32\x1f.ramp.v1.CatalogRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12%\n\x0erejected_paths\x18\x02 \x03(\tR\rrejectedPaths\"]\n\x13RegistrationFailure\x12\x46\n\x06reason\x18\x01 \x01(\x0e\x32\".ramp.v1.RegistrationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"S\n\x0e\x44isputeFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32\x1d.ramp.v1.DisputeFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"i\n\x19\x44omainVerificationFailure\x12L\n\x06reason\x18\x01 \x01(\x0e\x32(.ramp.v1.DomainVerificationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14RetrievalAuthFailure\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.RetrievalAuthFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14UsageReportRejection\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.UsageReportRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason*\xb6\x01\n\x0f\x44iscoveryMethod\x12 \n\x1c\x44ISCOVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x44ISCOVERY_METHOD_EXCHANGE\x10\x01\x12\x1b\n\x17\x44ISCOVERY_METHOD_SEARCH\x10\x02\x12#\n\x1f\x44ISCOVERY_METHOD_RECOMMENDATION\x10\x03\x12 \n\x1c\x44ISCOVERY_METHOD_SYNDICATION\x10\x04*\xf9\x02\n\x12OfferAbsenceReason\x12$\n OFFER_ABSENCE_REASON_UNSPECIFIED\x10\x00\x12\'\n#OFFER_ABSENCE_REASON_NOT_IN_CATALOG\x10\x01\x12(\n$OFFER_ABSENCE_REASON_CONTENT_BLOCKED\x10\x02\x12-\n)OFFER_ABSENCE_REASON_RESTRICTION_FILTERED\x10\x03\x12\x30\n,OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE\x10\x04\x12\'\n#OFFER_ABSENCE_REASON_NOT_AUTHORIZED\x10\x05\x12+\n\'OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT\x10\x06\x12\x33\n/OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION\x10\x07*q\n\rTermSemantics\x12\x1e\n\x1aTERM_SEMANTICS_UNSPECIFIED\x10\x00\x12\x1d\n\x19TERM_SEMANTICS_ENUMERATED\x10\x01\x12!\n\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xe5\x04\n\x0fRestrictionKind\x12 \n\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xbe\x02\n\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x9e\x02\x92\xb5\x18\x03\x61ll\x92\xb5\x18\x06\x61i-all\x92\xb5\x18\x08\x61i-train\x92\xb5\x18\x08\x61i-input\x92\xb5\x18\x08\x61i-index\x92\xb5\x18\x06search\x92\xb5\x18\x05\x63rawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\ncommercial\x92\xb5\x18\x0b\x61\x64vertising\x92\xb5\x18\teditorial\x92\xb5\x18\x08research\x92\xb5\x18\treproduce\x92\xb5\x18\ndistribute\x92\xb5\x18\x06modify\x92\xb5\x18\x07\x64isplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\x0bmanufacture\x92\xb5\x18\x04sell\xa2\xb5\x18\x0e\x66unctiontokens\x12\x45\n\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a%\x92\xb5\x18\x01*\x92\xb5\x18\x02\x45U\x92\xb5\x18\x03\x45\x45\x41\xa2\xb5\x18\x0fgeographytokens\x12\x8b\x01\n\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1ak\x92\xb5\x18\nindividual\x92\xb5\x18\x08\x61\x63\x61\x64\x65mic\x92\xb5\x18\nnon_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\x0b\x62roadcaster\x92\xb5\x18\x11\x63ommercial_entity\xa2\xb5\x18\tusertypes\x12\x1a\n\x16RESTRICTION_KIND_OTHER\x10\x04*\x8e\x01\n\x0bQuotaWindow\x12\x1c\n\x18QUOTA_WINDOW_UNSPECIFIED\x10\x00\x12\x17\n\x13QUOTA_WINDOW_HOURLY\x10\x01\x12\x16\n\x12QUOTA_WINDOW_DAILY\x10\x02\x12\x18\n\x14QUOTA_WINDOW_MONTHLY\x10\x03\x12\x16\n\x12QUOTA_WINDOW_TOTAL\x10\x04*\xf2\x01\n\x0eObligationKind\x12\x1f\n\x1bOBLIGATION_KIND_UNSPECIFIED\x10\x00\x12\x1f\n\x1bOBLIGATION_KIND_ATTRIBUTION\x10\x01\x12 \n\x1cOBLIGATION_KIND_CONTRIBUTION\x10\x02\x12\x1f\n\x1bOBLIGATION_KIND_SHARE_ALIKE\x10\x03\x12$\n OBLIGATION_KIND_NETWORK_COPYLEFT\x10\x04\x12\x1a\n\x16OBLIGATION_KIND_NOTICE\x10\x05\x12\x19\n\x15OBLIGATION_KIND_OTHER\x10\x06*\xcf\x01\n\x11ObligationTrigger\x12\"\n\x1eOBLIGATION_TRIGGER_UNSPECIFIED\x10\x00\x12\x1d\n\x19OBLIGATION_TRIGGER_ON_USE\x10\x01\x12&\n\"OBLIGATION_TRIGGER_ON_DISTRIBUTION\x10\x02\x12)\n%OBLIGATION_TRIGGER_ON_NETWORK_SERVICE\x10\x03\x12$\n OBLIGATION_TRIGGER_ON_DERIVATIVE\x10\x04*y\n\x0cPricingModel\x12\x1d\n\x19PRICING_MODEL_UNSPECIFIED\x10\x00\x12\x16\n\x12PRICING_MODEL_FREE\x10\x01\x12\x1a\n\x16PRICING_MODEL_PER_UNIT\x10\x02\x12\x16\n\x12PRICING_MODEL_FLAT\x10\x03*u\n\x0fPricingMetering\x12\x1b\n\x17PRICING_METERING_ONLINE\x10\x00\x12\x19\n\x15PRICING_METERING_NONE\x10\x01\x12*\n&PRICING_METERING_OFFLINE_SELF_REPORTED\x10\x02*\x8e\x01\n\x0e\x44\x65liveryMethod\x12\x1f\n\x1b\x44\x45LIVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x44\x45LIVERY_METHOD_DIRECT\x10\x01\x12 \n\x1c\x44\x45LIVERY_METHOD_INSTRUCTIONS\x10\x02\x12\x1d\n\x19\x44\x45LIVERY_METHOD_STREAMING\x10\x03*\xbf\x01\n\rRequesterType\x12\x1e\n\x1aREQUESTER_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14REQUESTER_TYPE_AGENT\x10\x01\x12\x1d\n\x19REQUESTER_TYPE_HUMAN_TOOL\x10\x02\x12\x1a\n\x16REQUESTER_TYPE_SERVICE\x10\x03\x12\x1c\n\x18REQUESTER_TYPE_DELEGATED\x10\x04\x12\x1b\n\x17REQUESTER_TYPE_RESEARCH\x10\x05*\x8a\x01\n\nC2PAStatus\x12\x1b\n\x17\x43\x32PA_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x43\x32PA_STATUS_TRUSTED\x10\x01\x12\x15\n\x11\x43\x32PA_STATUS_VALID\x10\x02\x12\x17\n\x13\x43\x32PA_STATUS_INVALID\x10\x03\x12\x16\n\x12\x43\x32PA_STATUS_ABSENT\x10\x04*\x98\x01\n\x12ResourceMutability\x12#\n\x1fRESOURCE_MUTABILITY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aRESOURCE_MUTABILITY_STATIC\x10\x01\x12\x1f\n\x1bRESOURCE_MUTABILITY_DYNAMIC\x10\x02\x12\x1c\n\x18RESOURCE_MUTABILITY_LIVE\x10\x03*\xef\x05\n\x0c\x44\x65nialReason\x12\x1d\n\x19\x44\x45NIAL_REASON_UNSPECIFIED\x10\x00\x12&\n\"DENIAL_REASON_BILLING_REF_INACTIVE\x10\x01\x12&\n\"DENIAL_REASON_INSUFFICIENT_BALANCE\x10\x02\x12\x1e\n\x1a\x44\x45NIAL_REASON_RATE_LIMITED\x10\x03\x12%\n!DENIAL_REASON_CONTENT_UNAVAILABLE\x10\x04\x12+\n\'DENIAL_REASON_RESTRICTION_NOT_SATISFIED\x10\x05\x12#\n\x1f\x44\x45NIAL_REASON_REPORTING_OVERDUE\x10\x06\x12\x1f\n\x1b\x44\x45NIAL_REASON_OFFER_EXPIRED\x10\x07\x12#\n\x1f\x44\x45NIAL_REASON_SIGNATURE_INVALID\x10\x08\x12 \n\x1c\x44\x45NIAL_REASON_QUOTA_EXCEEDED\x10\t\x12$\n DENIAL_REASON_DELEGATION_INVALID\x10\n\x12$\n DENIAL_REASON_SCOPE_INSUFFICIENT\x10\x0b\x12%\n!DENIAL_REASON_ENTITLEMENT_MISSING\x10\x0c\x12\'\n#DENIAL_REASON_ENTITLEMENT_MALFORMED\x10\r\x12%\n!DENIAL_REASON_ENTITLEMENT_EXPIRED\x10\x0e\x12)\n%DENIAL_REASON_ENTITLEMENT_WRONG_BUYER\x10\x0f\x12%\n!DENIAL_REASON_SUBSCRIPTION_LAPSED\x10\x10\x12)\n%DENIAL_REASON_ENTITLEMENT_NOT_GRANTED\x10\x11\x12/\n+DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION\x10\x12*\x8c\x02\n\x0fIngestionSource\x12 \n\x1cINGESTION_SOURCE_UNSPECIFIED\x10\x00\x12!\n\x1dINGESTION_SOURCE_RAMP_SITEMAP\x10\x01\x12\x18\n\x14INGESTION_SOURCE_RSL\x10\x02\x12\x1c\n\x18INGESTION_SOURCE_SITEMAP\x10\x03\x12\x1f\n\x1bINGESTION_SOURCE_HTML_CRAWL\x10\x04\x12\x1c\n\x18INGESTION_SOURCE_CMS_API\x10\x05\x12\x1b\n\x17INGESTION_SOURCE_MANUAL\x10\x06\x12 \n\x1cINGESTION_SOURCE_CATALOG_API\x10\x07*d\n\x0e\x43itationFormat\x12\x18\n\x14\x43ITATION_FORMAT_LINK\x10\x00\x12\x1c\n\x18\x43ITATION_FORMAT_FOOTNOTE\x10\x01\x12\x1a\n\x16\x43ITATION_FORMAT_INLINE\x10\x02*d\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x0e\n\nROLE_AGENT\x10\x01\x12\x11\n\rROLE_EXCHANGE\x10\x02\x12\x0f\n\x0bROLE_BROKER\x10\x03\x12\x12\n\x0eROLE_PUBLISHER\x10\x04*\x83\x01\n\x14ProviderRelationship\x12%\n!PROVIDER_RELATIONSHIP_UNSPECIFIED\x10\x00\x12 \n\x1cPROVIDER_RELATIONSHIP_DIRECT\x10\x01\x12\"\n\x1ePROVIDER_RELATIONSHIP_RESELLER\x10\x02*\x95\x01\n\nAuthMethod\x12\x1b\n\x17\x41UTH_METHOD_UNSPECIFIED\x10\x00\x12\x14\n\x10\x41UTH_METHOD_GNAP\x10\x01\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_DPOP\x10\x02\x12\x1c\n\x18\x41UTH_METHOD_OAUTH_BEARER\x10\x03\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_MTLS\x10\x04*\xea\x01\n\rDisputeReason\x12\x1e\n\x1a\x44ISPUTE_REASON_UNSPECIFIED\x10\x00\x12#\n\x1f\x44ISPUTE_REASON_CONTENT_MISMATCH\x10\x01\x12\"\n\x1e\x44ISPUTE_REASON_DELIVERY_FAILED\x10\x02\x12 \n\x1c\x44ISPUTE_REASON_WRONG_CONTENT\x10\x03\x12\'\n#DISPUTE_REASON_EXPIRED_BEFORE_FETCH\x10\x04\x12%\n!DISPUTE_REASON_INCOMPLETE_CONTENT\x10\x05*\xbe\x02\n\rDisputeStatus\x12\x1e\n\x1a\x44ISPUTE_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14\x44ISPUTE_STATUS_FILED\x10\x01\x12 \n\x1c\x44ISPUTE_STATUS_AUTO_RESOLVED\x10\x02\x12\"\n\x1e\x44ISPUTE_STATUS_EVIDENCE_NEEDED\x10\x03\x12\x1f\n\x1b\x44ISPUTE_STATUS_UNDER_REVIEW\x10\x04\x12\x1c\n\x18\x44ISPUTE_STATUS_ESCALATED\x10\x05\x12\x1b\n\x17\x44ISPUTE_STATUS_RESOLVED\x10\x06\x12\x1b\n\x17\x44ISPUTE_STATUS_APPEALED\x10\x07\x12\x1a\n\x16\x44ISPUTE_STATUS_SETTLED\x10\x08\x12\x18\n\x14\x44ISPUTE_STATUS_FINAL\x10\t*\xae\x01\n\x0eResolutionType\x12\x1f\n\x1bRESOLUTION_TYPE_UNSPECIFIED\x10\x00\x12\x1a\n\x16RESOLUTION_TYPE_CREDIT\x10\x01\x12\x1e\n\x1aRESOLUTION_TYPE_REDELIVERY\x10\x02\x12\x1c\n\x18RESOLUTION_TYPE_REJECTED\x10\x03\x12!\n\x1dRESOLUTION_TYPE_INVESTIGATION\x10\x04*\x95\x03\n\x16\x43\x61talogRejectionReason\x12(\n$CATALOG_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x34\n0CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR\x10\x01\x12,\n(CATALOG_REJECTION_REASON_TENANT_MISMATCH\x10\x02\x12\x30\n,CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED\x10\x03\x12.\n*CATALOG_REJECTION_REASON_SIGNATURE_INVALID\x10\x04\x12,\n(CATALOG_REJECTION_REASON_MALFORMED_ENTRY\x10\x05\x12\x30\n,CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN\x10\x06\x12+\n\'CATALOG_REJECTION_REASON_QUOTA_EXCEEDED\x10\x07*\xc1\x02\n\x19RegistrationFailureReason\x12+\n\'REGISTRATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x33\n/REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED\x10\x01\x12+\n\'REGISTRATION_FAILURE_REASON_INVALID_KEY\x10\x02\x12\x31\n-REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID\x10\x03\x12\x32\n.REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED\x10\x04\x12.\n*REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED\x10\x05*\x95\x02\n\x14\x44isputeFailureReason\x12&\n\"DISPUTE_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x30\n,DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'DISPUTE_FAILURE_REASON_REPORT_NOT_FILED\x10\x02\x12)\n%DISPUTE_FAILURE_REASON_WINDOW_EXPIRED\x10\x03\x12$\n DISPUTE_FAILURE_REASON_DUPLICATE\x10\x04\x12%\n!DISPUTE_FAILURE_REASON_INELIGIBLE\x10\x05*\xbb\x03\n\x1f\x44omainVerificationFailureReason\x12\x32\n.DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12:\n6DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND\x10\x01\x12\x39\n5DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH\x10\x02\x12\x38\n4DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED\x10\x03\x12\x33\n/DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED\x10\x04\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED\x10\x05\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED\x10\x06*\xd9\x05\n\x1aRetrievalAuthFailureReason\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED\x10\x00\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED\x10\x01\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING\x10\x02\x12\x34\n0RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING\x10\x03\x12\x38\n4RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH\x10\x04\x12\x33\n/RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING\x10\x05\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING\x10\x06\x12\x30\n,RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH\x10\x07\x12\x35\n1RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH\x10\x08\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING\x10\t\x12\x36\n2RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING\x10\n\x12/\n+RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED\x10\x0b\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID\x10\x0c*\xcb\x02\n\x1aUsageReportRejectionReason\x12-\n)USAGE_REPORT_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x37\n3USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'USAGE_REPORT_REJECTION_REASON_DUPLICATE\x10\x02\x12\x30\n,USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED\x10\x03\x12\x39\n5USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS\x10\x04\x12+\n\'USAGE_REPORT_REJECTION_REASON_MALFORMED\x10\x05\x32\x86\x04\n\x0f\x45xchangeService\x12\x46\n\x11\x44iscoverResources\x12\x16.ramp.v1.ResourceQuery\x1a\x19.ramp.v1.ResourceResponse\x12O\n\x12\x45xecuteTransaction\x12\x1b.ramp.v1.TransactionRequest\x1a\x1c.ramp.v1.TransactionResponse\x12\x41\n\x0bReportUsage\x12\x14.ramp.v1.UsageReport\x1a\x1c.ramp.v1.UsageReportResponse\x12G\n\x12\x44isputeTransaction\x12\x17.ramp.v1.DisputeRequest\x1a\x18.ramp.v1.DisputeResponse\x12\x65\n\x19RequestDomainVerification\x12\".ramp.v1.DomainVerificationRequest\x1a$.ramp.v1.DomainVerificationChallenge\x12g\n\x19\x43onfirmDomainVerification\x12\'.ramp.v1.DomainVerificationConfirmation\x1a!.ramp.v1.DomainVerificationResult2\x89\x02\n\x0e\x43\x61talogService\x12N\n\rPushResources\x12\x1d.ramp.v1.PushResourcesRequest\x1a\x1e.ramp.v1.PushResourcesResponse\x12T\n\x0fRemoveResources\x12\x1f.ramp.v1.RemoveResourcesRequest\x1a .ramp.v1.RemoveResourcesResponse\x12Q\n\x0eRefreshCatalog\x12\x1e.ramp.v1.RefreshCatalogRequest\x1a\x1f.ramp.v1.RefreshCatalogResponse2G\n\rBrokerService\x12\x36\n\x07Resolve\x12\x14.ramp.v1.RAMPRequest\x1a\x15.ramp.v1.RAMPResponseB\x8e\x01\n\x0b\x63om.ramp.v1B\tRampProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12ramp/v1/ramp.proto\x12\x07ramp.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x13ramp/v1/vocab.proto\"\x84\x01\n\x15\x41\x63\x63\x65ptableRestriction\x12,\n\x04\x61xis\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04\x61xis\x12=\n\x06values\x18\x02 \x03(\tB%\xbaH\"\x92\x01\x1f\x10@\"\x1br\x19\x10\x01\x18@2\x13^[A-Za-z0-9._:*-]+$R\x06values\"\xa1\x03\n\rResourceQuery\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12:\n\x08\x64\x65\x61\x64line\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x08\x64\x65\x61\x64line\x88\x01\x01\x12-\n\x12supported_profiles\x18\x07 \x03(\tR\x11supportedProfiles\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_deadline\"\xb9\x02\n\x10ResourceResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x65xchange\x18\x03 \x01(\tR\x08\x65xchange\x12&\n\x06offers\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12\x36\n\x0coffer_groups\x18\x05 \x03(\x0b\x32\x13.ramp.v1.OfferGroupR\x0bofferGroups\x12:\n\nrate_limit\x18\x06 \x01(\x0b\x32\x16.ramp.v1.RateLimitInfoH\x00R\trateLimit\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_rate_limit\"\xcc\x02\n\nOfferGroup\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12&\n\x06offers\x18\x02 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12H\n\x10\x64iscovery_method\x18\x03 \x01(\x0e\x32\x18.ramp.v1.DiscoveryMethodH\x00R\x0f\x64iscoveryMethod\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x04 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x01R\rabsenceReason\x88\x01\x01\x12I\n\x13restriction_filters\x18\x05 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x12restrictionFiltersB\x13\n\x11_discovery_methodB\x11\n\x0f_absence_reason\"\xbd\x01\n\rRateLimitInfo\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x1c\n\tremaining\x18\x02 \x01(\x05R\tremaining\x12\x35\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07resetAt\x12\x36\n\x06window\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x42\t\n\x07_window\"\x97\x02\n\x15SubscriptionQuotaInfo\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1f\n\x0bquota_limit\x18\x02 \x01(\x05R\nquotaLimit\x12\x1d\n\nquota_used\x18\x03 \x01(\x05R\tquotaUsed\x12\'\n\x0fquota_remaining\x18\x04 \x01(\x05R\x0equotaRemaining\x12<\n\tresets_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x08resetsAt\x88\x01\x01\x12\x17\n\x04unit\x18\x06 \x01(\tH\x01R\x04unit\x88\x01\x01\x42\x0c\n\n_resets_atB\x07\n\x05_unit\"\xdb\x07\n\x05Offer\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12*\n\x07pricing\x18\x03 \x01(\x0b\x32\x10.ramp.v1.PricingR\x07pricing\x12@\n\x0f\x64\x65livery_method\x18\x04 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12?\n\treporting\x18\x05 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\treporting\x88\x01\x01\x12>\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12:\n\x08identity\x18\x07 \x01(\x0b\x32\x19.ramp.v1.ResourceIdentityH\x03R\x08identity\x88\x01\x01\x12\x1c\n\tsignature\x18\t \x01(\tR\tsignature\x12/\n\x13signature_algorithm\x18\n \x01(\tR\x12signatureAlgorithm\x12,\n\x0fsubscription_id\x18\x0b \x01(\tH\x04R\x0esubscriptionId\x88\x01\x01\x12%\n\x0eiab_categories\x18\r \x03(\tR\riabCategories\x12@\n\x0c\x61ttestations\x18\x0e \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12=\n\ndata_as_of\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\x08\x64\x61taAsOf\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12,\n\x08previews\x18\x12 \x03(\x0b\x32\x10.ramp.v1.PreviewR\x08previews\x12*\n\x05terms\x18\x13 \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x08\n\x06_titleB\x0c\n\n_reportingB\r\n\x0b_expires_atB\x0b\n\t_identityB\x12\n\x10_subscription_idB\r\n\x0b_data_as_of\"\xe1\x05\n\x10ResourceIdentity\x12(\n\rcanonical_url\x18\x01 \x01(\tH\x00R\x0c\x63\x61nonicalUrl\x88\x01\x01\x12\x15\n\x03\x64oi\x18\x02 \x01(\tH\x01R\x03\x64oi\x88\x01\x01\x12 \n\tiptc_guid\x18\x03 \x01(\tH\x02R\x08iptcGuid\x88\x01\x01\x12\x17\n\x04isni\x18\x04 \x01(\tH\x03R\x04isni\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x05 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x06 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12V\n\x13resource_mutability\x18\x08 \x01(\x0e\x32\x1b.ramp.v1.ResourceMutabilityB\x08\xbaH\x05\x82\x01\x02 \x00R\x12resourceMutability\x12(\n\rc2pa_manifest\x18\x07 \x01(\tH\x06R\x0c\x63\x32paManifest\x88\x01\x01\x12\x39\n\x0b\x63\x32pa_status\x18\t \x01(\x0e\x32\x13.ramp.v1.C2PAStatusH\x07R\nc2paStatus\x88\x01\x01\x12&\n\x0csoft_binding\x18\n \x01(\tH\x08R\x0bsoftBinding\x88\x01\x01\x12\x33\n\x13soft_binding_method\x18\x0b \x01(\tH\tR\x11softBindingMethod\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x10\n\x0e_canonical_urlB\x06\n\x04_doiB\x0c\n\n_iptc_guidB\x07\n\x05_isniB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\x10\n\x0e_c2pa_manifestB\x0e\n\x0c_c2pa_statusB\x0f\n\r_soft_bindingB\x16\n\x14_soft_binding_method\"\xe1\x01\n\x13ResourceAttestation\x12\x1a\n\x08verifier\x18\x01 \x01(\tR\x08verifier\x12\x10\n\x03kid\x18\x02 \x01(\tR\x03kid\x12;\n\x0b\x61ttested_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nattestedAt\x12\x10\n\x03uri\x18\x04 \x01(\tR\x03uri\x12/\n\x06\x63laims\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63laims\x12\x1c\n\tsignature\x18\x06 \x01(\tR\tsignature\"\x92\x03\n\x07License\x12\x15\n\x03uri\x18\x01 \x01(\tH\x00R\x03uri\x88\x01\x01\x12\x13\n\x02id\x18\x02 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x17\n\x04name\x18\x03 \x01(\tH\x02R\x04name\x88\x01\x01\x12!\n\timmutable\x18\x04 \x01(\x08H\x03R\timmutable\x88\x01\x01\x12l\n\nuri_digest\x18\x05 \x01(\tBH\xbaHErC2A^(sha256:[0-9a-f]{64}|sha384:[0-9a-f]{96}|sha512:[0-9a-f]{128})?$H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n license.digest_required_with_uri\x12*uri_digest is required whenever uri is set\x1a\'this.uri == \'\' || this.uri_digest != \'\'B\x06\n\x04_uriB\x05\n\x03_idB\x07\n\x05_nameB\x0c\n\n_immutableB\r\n\x0b_uri_digest\"\x8a\x03\n\x0bRestriction\x12\x36\n\x04kind\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindB\x08\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12\x43\n\tpermitted\x18\x02 \x03(\tB%\xbaH\"\x92\x01\x1f\x10@\"\x1br\x19\x10\x01\x18@2\x13^[A-Za-z0-9._:*-]+$R\tpermitted\x12\x45\n\nprohibited\x18\x03 \x03(\tB%\xbaH\"\x92\x01\x1f\x10@\"\x1br\x19\x10\x01\x18@2\x13^[A-Za-z0-9._:*-]+$R\nprohibited\x12\x1a\n\x08\x61\x64visory\x18\x04 \x01(\x08R\x08\x61\x64visory:\x9a\x01\xbaH\x96\x01\x1a\x93\x01\n)restriction.permitted_prohibited_disjoint\x12\x36\x61 token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\"\xb0\x02\n\x05Quota\x12\xcf\x01\n\x06metric\x18\x01 \x01(\tB\xb6\x01\xbaH4r2\x18@2.^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)$\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\x0bimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x0cinput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06\x63opies\x8a\xb5\x18\x05seats\x9a\xb5\x18\x0cquotametricsR\x06metric\x12\x1d\n\x05limit\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x05limit\x12\x36\n\x06window\x18\x03 \x01(\x0e\x32\x14.ramp.v1.QuotaWindowB\x08\xbaH\x05\x82\x01\x02 \x00R\x06window\"\x98\x04\n\nObligation\x12\x35\n\x04kind\x18\x01 \x01(\x0e\x32\x17.ramp.v1.ObligationKindB\x08\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12>\n\x07trigger\x18\x02 \x01(\x0e\x32\x1a.ramp.v1.ObligationTriggerB\x08\xbaH\x05\x82\x01\x02 \x00R\x07trigger\x12:\n\rscope_license\x18\x03 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x0cscopeLicense\x88\x01\x01\x12\x1b\n\x06\x64\x65tail\x18\x04 \x01(\tH\x01R\x06\x64\x65tail\x88\x01\x01:\x9c\x02\xbaH\x98\x02\x1a\x95\x02\n-obligation.share_alike.requires_scope_license\x12\x44SHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))B\x10\n\x0e_scope_licenseB\t\n\x07_detail\"\xd5\x06\n\x0bLicenseTerm\x12/\n\x07license\x18\x01 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x07license\x88\x01\x01\x12>\n\tsemantics\x18\x02 \x01(\x0e\x32\x16.ramp.v1.TermSemanticsB\x08\xbaH\x05\x82\x01\x02 \x00R\tsemantics\x12\x38\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x14.ramp.v1.RestrictionR\x0crestrictions\x12&\n\x06quotas\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.QuotaR\x06quotas\x12\x35\n\x0bobligations\x18\x05 \x03(\x0b\x32\x13.ramp.v1.ObligationR\x0bobligations\x12\x37\n\x07pricing\x18\x06 \x01(\x0b\x32\x10.ramp.v1.PricingB\x06\xbaH\x03\xc8\x01\x01H\x01R\x07pricing\x88\x01\x01\x12 \n\x06scopes\x18\x07 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\"\n\npart_label\x18\x08 \x01(\tH\x02R\tpartLabel\x88\x01\x01:\x95\x03\xbaH\x91\x03\x1a\xe2\x01\n(license_term.reference_only.requires_uri\x12>REFERENCE_ONLY terms must carry a license with a non-empty uri\x1avthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\x1a\xa9\x01\n%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)B\n\n\x08_licenseB\n\n\x08_pricingB\r\n\x0b_part_label\"\xd7\x01\n\x07Preview\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n\nmedia_type\x18\x02 \x01(\tR\tmediaType\x12\x19\n\x05width\x18\x03 \x01(\x05H\x00R\x05width\x88\x01\x01\x12\x1b\n\x06height\x18\x04 \x01(\x05H\x01R\x06height\x88\x01\x01\x12\x1f\n\x08\x64uration\x18\x05 \x01(\x05H\x02R\x08\x64uration\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\tH\x03R\x04size\x88\x01\x01\x42\x08\n\x06_widthB\t\n\x07_heightB\x0b\n\t_durationB\x07\n\x05_size\"\xd5\x07\n\x07Pricing\x12\x35\n\x05model\x18\x01 \x01(\x0e\x32\x15.ramp.v1.PricingModelB\x08\xbaH\x05\x82\x01\x02 \x00R\x05model\x12\x12\n\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x04 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x05 \x01(\x05H\x01R\x11\x65stimatedQuantity\x88\x01\x01\x12;\n\x17license_duration_months\x18\x07 \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\x93\x02\n\x04unit\x18\x08 \x01(\tB\xf9\x01\xbaH5r3\x18@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$\x8a\xb5\x18\x07\x66\x65tches\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05\x63\x61lls\x8a\xb5\x18\x05pages\x8a\xb5\x18\x07seconds\x8a\xb5\x18\x07minutes\x8a\xb5\x18\x07records\x8a\xb5\x18\x07streams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\ncharacters\x8a\xb5\x18\x05\x62ytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-km\x9a\xb5\x18\x0cpricingunitsH\x03R\x04unit\x88\x01\x01\x12\x39\n\x08metering\x18\t \x01(\x0e\x32\x18.ramp.v1.PricingMeteringH\x04R\x08metering\x88\x01\x01:\xa7\x02\xbaH\xa3\x02\x1a\x97\x01\n\x1epricing.per_unit.requires_unit\x12\'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\x1a\x86\x01\n\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0B\x0c\n\n_unit_costB\x15\n\x13_estimated_quantityB\x1a\n\x18_license_duration_monthsB\x07\n\x05_unitB\x0b\n\t_metering\"\xfa\x02\n\tRequester\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x34\n\x04type\x18\x03 \x01(\x0e\x32\x16.ramp.v1.RequesterTypeB\x08\xbaH\x05\x82\x01\x02 \x00R\x04type\x12\x17\n\x04name\x18\x04 \x01(\tH\x00R\x04name\x88\x01\x01\x12$\n\x0b\x62illing_ref\x18\x05 \x01(\tH\x01R\nbillingRef\x88\x01\x01\x12 \n\x06scopes\x18\x06 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\x38\n\ndelegation\x18\x07 \x01(\x0b\x32\x13.ramp.v1.DelegationH\x02R\ndelegation\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x07\n\x05_nameB\x0e\n\x0c_billing_refB\r\n\x0b_delegation\"\xe9\x04\n\nDelegation\x12)\n\x10principal_domain\x18\x01 \x01(\tR\x0fprincipalDomain\x12!\n\x0cprincipal_id\x18\x02 \x01(\tR\x0bprincipalId\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\x12\x39\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12+\n\x0fmax_spend_cents\x18\x05 \x01(\x03H\x00R\rmaxSpendCents\x88\x01\x01\x12&\n\x0cmax_accesses\x18\t \x01(\x05H\x01R\x0bmaxAccesses\x88\x01\x01\x12\x41\n\x0cquota_period\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x02R\x0bquotaPeriod\x88\x01\x01\x12\x14\n\x05token\x18\x06 \x01(\x0cR\x05token\x12!\n\x0ctoken_format\x18\x07 \x01(\tR\x0btokenFormat\x12*\n\x0erevocation_uri\x18\x08 \x01(\tH\x03R\rrevocationUri\x88\x01\x01\x12\x1b\n\x06issuer\x18\x0b \x01(\tH\x04R\x06issuer\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x12\n\x10_max_spend_centsB\x0f\n\r_max_accessesB\x0f\n\r_quota_periodB\x11\n\x0f_revocation_uriB\t\n\x07_issuer\"\xf7\x02\n\x12TransactionRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x12\x30\n\trequester\x18\x04 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12,\n\x0foffer_signature\x18\x06 \x01(\tH\x01R\x0eofferSignature\x88\x01\x01\x12.\n\x05items\x18\x07 \x03(\x0b\x32\x18.ramp.v1.TransactionItemR\x05items\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_offer_idB\x12\n\x10_offer_signature\"U\n\x0fTransactionItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\'\n\x0foffer_signature\x18\x02 \x01(\tR\x0eofferSignature\"\xc3\x08\n\x13TransactionResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12*\n\x0etransaction_id\x18\x03 \x01(\tH\x00R\rtransactionId\x88\x01\x01\x12\"\n\nbilling_id\x18\x04 \x01(\tH\x01R\tbillingId\x88\x01\x01\x12*\n\x0eresource_title\x18\x05 \x01(\tH\x02R\rresourceTitle\x88\x01\x01\x12&\n\x04\x63ost\x18\x06 \x01(\x0b\x32\r.ramp.v1.CostH\x03R\x04\x63ost\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\x07 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\x08 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x04R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\texpiresAt\x88\x01\x01\x12.\n\x13\x61gent_identity_hash\x18\n \x01(\tR\x11\x61gentIdentityHash\x12\x32\n\x12retrieval_endpoint\x18\x12 \x01(\tH\x06R\x11retrievalEndpoint\x88\x01\x01\x12,\n\x0fsubscription_id\x18\x0c \x01(\tH\x07R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x10 \x01(\x0b\x32\r.ramp.v1.CostH\x08R\x15subscriptionUnitValue\x88\x01\x01\x12\x34\n\x05items\x18\r \x03(\x0b\x32\x1e.ramp.v1.TransactionResultItemR\x05items\x12\x31\n\ntotal_cost\x18\x0e \x01(\x0b\x32\r.ramp.v1.CostH\tR\ttotalCost\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_transaction_idB\r\n\x0b_billing_idB\x11\n\x0f_resource_titleB\x07\n\x05_costB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\r\n\x0b_total_cost\"\xf3\x06\n\x15TransactionResultItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12%\n\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x03 \x01(\tR\tbillingId\x12*\n\x0eresource_title\x18\x04 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x05 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12,\n\x0fsubscription_id\x18\x06 \x01(\tH\x01R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x0b \x01(\x0b\x32\r.ramp.v1.CostH\x02R\x15subscriptionUnitValue\x88\x01\x01\x12?\n\rdenial_reason\x18\x07 \x01(\x0e\x32\x15.ramp.v1.DenialReasonH\x03R\x0c\x64\x65nialReason\x88\x01\x01\x12O\n\x16restriction_mismatches\x18\r \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12>\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\x0c \x01(\tH\x05R\x11retrievalEndpoint\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x06R\x13reportingObligation\x88\x01\x01\x42\x11\n\x0f_resource_titleB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\x10\n\x0e_denial_reasonB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x17\n\x15_reporting_obligation\"j\n\x04\x43ost\x12\x16\n\x06\x61mount\x18\x01 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x02 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x03 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x42\x0c\n\n_unit_cost\"\xe2\x01\n\x14PushResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x30\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x16.ramp.v1.ResourceEntryR\x07\x65ntries\x12\x1b\n\tcaller_id\x18\x04 \x01(\tR\x08\x63\x61llerId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xb3\x06\n\rResourceEntry\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\"\n\ncontent_id\x18\x03 \x01(\tH\x00R\tcontentId\x88\x01\x01\x12\x19\n\x05title\x18\x04 \x01(\tH\x01R\x05title\x88\x01\x01\x12\"\n\nword_count\x18\x05 \x01(\x05H\x02R\twordCount\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x06 \x01(\x05H\x03R\x11\x65stimatedQuantity\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x07 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x08 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12\x35\n\x06source\x18\t \x01(\x0e\x32\x18.ramp.v1.IngestionSourceH\x06R\x06source\x88\x01\x01\x12\x30\n\x11provenance_source\x18\n \x01(\tH\x07R\x10provenanceSource\x88\x01\x01\x12R\n\x14provenance_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x08R\x13provenanceTimestamp\x88\x01\x01\x12@\n\x0c\x61ttestations\x18\x0c \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12*\n\x05terms\x18\r \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_content_idB\x08\n\x06_titleB\r\n\x0b_word_countB\x15\n\x13_estimated_quantityB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\t\n\x07_sourceB\x14\n\x12_provenance_sourceB\x17\n\x15_provenance_timestamp\"\xcb\x01\n\x15PushResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x05R\x08\x61\x63\x63\x65pted\x12\x1a\n\x08rejected\x18\x03 \x01(\x05R\x08rejected\x12\x1a\n\x08warnings\x18\x04 \x03(\tR\x08warnings\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"]\n\x16RemoveResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\"E\n\x17RemoveResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07removed\x18\x02 \x01(\x05R\x07removed\"F\n\x15RefreshCatalogRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\"D\n\x16RefreshCatalogResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07started\x18\x02 \x01(\x08R\x07started\"\x99\x02\n\x13ReportingObligation\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\x12\x36\n\x06window\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x03 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12\'\n\x0frequired_fields\x18\x04 \x03(\tR\x0erequiredFields\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_windowB\x0b\n\t_endpoint\"\xa0\x03\n\x0bUsageReport\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12$\n\x05usage\x18\x05 \x01(\x0b\x32\x0e.ramp.v1.UsageR\x05usage\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1f\n\x08\x65xchange\x18\x08 \x01(\tH\x00R\x08\x65xchange\x88\x01\x01\x12+\n\x06\x61ssets\x18\t \x03(\x0b\x32\x13.ramp.v1.UsageAssetR\x06\x61ssets\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_exchange\"\xd1\x01\n\x11\x41ttributionDetail\x12(\n\rdisplayed_url\x18\x01 \x01(\tH\x00R\x0c\x64isplayedUrl\x88\x01\x01\x12\x34\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x17.ramp.v1.CitationFormatH\x01R\x06\x66ormat\x88\x01\x01\x12+\n\x0fvisible_to_user\x18\x03 \x01(\x08H\x02R\rvisibleToUser\x88\x01\x01\x42\x10\n\x0e_displayed_urlB\t\n\x07_formatB\x12\n\x10_visible_to_user\"\xa9\x03\n\x05Usage\x12\x1a\n\x08\x66unction\x18\x01 \x03(\tR\x08\x66unction\x12\x14\n\x05subfn\x18\x02 \x03(\tR\x05subfn\x12+\n\x11\x63onsumed_quantity\x18\x03 \x01(\x05R\x10\x63onsumedQuantity\x12/\n\x11\x64isplayed_to_user\x18\x04 \x01(\x08H\x00R\x0f\x64isplayedToUser\x88\x01\x01\x12\x30\n\x11\x63itation_included\x18\x05 \x01(\x08H\x01R\x10\x63itationIncluded\x88\x01\x01\x12<\n\x0b\x61ttribution\x18\x06 \x03(\x0b\x32\x1a.ramp.v1.AttributionDetailR\x0b\x61ttribution\x12\x62\n\rconsumed_unit\x18\x08 \x01(\tB8\xbaH5r3\x18@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$H\x02R\x0c\x63onsumedUnit\x88\x01\x01\x42\x14\n\x12_displayed_to_userB\x14\n\x12_citation_includedB\x10\n\x0e_consumed_unit\"v\n\nUsageAsset\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\"\n\npackage_id\x18\x03 \x01(\tH\x01R\tpackageId\x88\x01\x01\x42\x08\n\x06_titleB\r\n\x0b_package_id\"\x92\x01\n\x13UsageReportResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\treport_id\x18\x03 \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xa7\x04\n\x0bRAMPRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12\x42\n\x0b\x63onstraints\x18\x04 \x01(\x0b\x32\x1b.ramp.v1.RequestConstraintsH\x00R\x0b\x63onstraints\x88\x01\x01\x12-\n\x12supported_profiles\x18\x05 \x03(\tR\x11supportedProfiles\x12\x19\n\x05query\x18\x06 \x01(\tH\x01R\x05query\x88\x01\x01\x12\x43\n\x0esearch_filters\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02R\rsearchFilters\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_constraintsB\x08\n\x06_queryB\x11\n\x0f_search_filters\"\xca\x05\n\x12RequestConstraints\x12\x1c\n\texchanges\x18\x01 \x03(\tR\texchanges\x12/\n\tmax_price\x18\x02 \x01(\x0b\x32\r.ramp.v1.CostH\x00R\x08maxPrice\x88\x01\x01\x12\'\n\rmax_unit_cost\x18\x03 \x01(\x01H\x01R\x0bmaxUnitCost\x88\x01\x01\x12H\n\x13\x64\x65livery_preference\x18\x04 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x12\x64\x65liveryPreference\x12\x30\n\x11reporting_capable\x18\x05 \x01(\x08H\x02R\x10reportingCapable\x88\x01\x01\x12/\n\x13preferred_exchanges\x18\x06 \x03(\tR\x12preferredExchanges\x12&\n\x0c\x62udget_scope\x18\x07 \x01(\tH\x03R\x0b\x62udgetScope\x88\x01\x01\x12\x37\n\rperiod_budget\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostH\x04R\x0cperiodBudget\x88\x01\x01\x12\x43\n\rbudget_period\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationH\x05R\x0c\x62udgetPeriod\x88\x01\x01\x12@\n\x0cmax_data_age\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x06R\nmaxDataAge\x88\x01\x01\x12\x1e\n\x08max_hops\x18\x0b \x01(\x05H\x07R\x07maxHops\x88\x01\x01\x42\x0c\n\n_max_priceB\x10\n\x0e_max_unit_costB\x14\n\x12_reporting_capableB\x0f\n\r_budget_scopeB\x10\n\x0e_period_budgetB\x10\n\x0e_budget_periodB\x0f\n\r_max_data_ageB\x0b\n\t_max_hops\"\xb0\x01\n\nJsonWebKey\x12\x10\n\x03kid\x18\x01 \x01(\tR\x03kid\x12\x10\n\x03kty\x18\x02 \x01(\tR\x03kty\x12\x10\n\x03\x63rv\x18\x03 \x01(\tR\x03\x63rv\x12\x10\n\x03use\x18\x04 \x01(\tR\x03use\x12\x10\n\x03\x61lg\x18\x05 \x01(\tR\x03\x61lg\x12\x0c\n\x01x\x18\x06 \x01(\tR\x01x\x12\x1d\n\nnot_before\x18\x07 \x01(\tR\tnotBefore\x12\x1b\n\tnot_after\x18\x08 \x01(\tR\x08notAfter\"\xef\x0c\n\x11WellKnownManifest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12+\n\x04role\x18\x02 \x01(\x0e\x32\r.ramp.v1.RoleB\x08\xbaH\x05\x82\x01\x02 \x00R\x04role\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x1d\n\x07\x63ontact\x18\x04 \x01(\tH\x00R\x07\x63ontact\x88\x01\x01\x12\x34\n\x0bpublic_keys\x18\x05 \x03(\x0b\x32\x13.ramp.v1.JsonWebKeyR\npublicKeys\x12.\n\x10invalidation_url\x18\x06 \x01(\tH\x01R\x0finvalidationUrl\x88\x01\x01\x12\x39\n\texchanges\x18\x07 \x03(\x0b\x32\x1b.ramp.v1.AuthorizedExchangeR\texchanges\x12N\n\x14\x63\x61talog_contributors\x18\x08 \x03(\x0b\x32\x1b.ramp.v1.CatalogContributorR\x13\x63\x61talogContributors\x12\x17\n\x04name\x18\t \x01(\tH\x02R\x04name\x88\x01\x01\x12\x1f\n\x08operator\x18\n \x01(\tH\x03R\x08operator\x88\x01\x01\x12,\n\x0foperator_domain\x18\x0b \x01(\tH\x04R\x0eoperatorDomain\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x0c \x01(\tH\x05R\x08\x65ndpoint\x88\x01\x01\x12,\n\x0fhealth_endpoint\x18\r \x01(\tH\x06R\x0ehealthEndpoint\x88\x01\x01\x12.\n\x10\x63\x61talog_endpoint\x18\x0e \x01(\tH\x07R\x0f\x63\x61talogEndpoint\x88\x01\x01\x12>\n\x1bprotocol_versions_supported\x18\x10 \x03(\tR\x19protocolVersionsSupported\x12O\n\x18pricing_models_supported\x18\x11 \x03(\x0e\x32\x15.ramp.v1.PricingModelR\x16pricingModelsSupported\x12U\n\x1a\x64\x65livery_methods_supported\x18\x12 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x18\x64\x65liveryMethodsSupported\x12\x34\n\x16hash_methods_supported\x18\x13 \x03(\tR\x14hashMethodsSupported\x12-\n\x12\x61\x63\x63\x65pted_verifiers\x18\x14 \x03(\tR\x11\x61\x63\x63\x65ptedVerifiers\x12 \n\tterms_uri\x18\x15 \x01(\tH\x08R\x08termsUri\x88\x01\x01\x12$\n\x0bprivacy_uri\x18\x16 \x01(\tH\tR\nprivacyUri\x88\x01\x01\x12-\n\x12supported_profiles\x18\x17 \x03(\tR\x11supportedProfiles\x12I\n\x16supported_auth_methods\x18\x18 \x03(\x0e\x32\x13.ramp.v1.AuthMethodR\x14supportedAuthMethods\x12$\n\x0boidc_issuer\x18\x19 \x01(\tH\nR\noidcIssuer\x88\x01\x01\x12\x33\n\x13gnap_grant_endpoint\x18\x1a \x01(\tH\x0bR\x11gnapGrantEndpoint\x88\x01\x01\x12(\n\rbase_currency\x18\x1b \x01(\tH\x0cR\x0c\x62\x61seCurrency\x88\x01\x01\x12\x37\n\x15max_intermediary_hops\x18\x1c \x01(\x05H\rR\x13maxIntermediaryHops\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\n\n\x08_contactB\x13\n\x11_invalidation_urlB\x07\n\x05_nameB\x0b\n\t_operatorB\x12\n\x10_operator_domainB\x0b\n\t_endpointB\x12\n\x10_health_endpointB\x13\n\x11_catalog_endpointB\x0c\n\n_terms_uriB\x0e\n\x0c_privacy_uriB\x0e\n\x0c_oidc_issuerB\x16\n\x14_gnap_grant_endpointB\x10\n\x0e_base_currencyB\x18\n\x16_max_intermediary_hops\"`\n\x13KeyInvalidationList\x12/\n\x05\x61s_of\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04\x61sOf\x12\x18\n\x07revoked\x18\x02 \x03(\tR\x07revoked\"P\n\x12\x43\x61talogContributor\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\"\n\x0crelationship\x18\x02 \x01(\tR\x0crelationship\"\xe3\x01\n\x12\x41uthorizedExchange\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12K\n\x0crelationship\x18\x03 \x01(\x0e\x32\x1d.ramp.v1.ProviderRelationshipB\x08\xbaH\x05\x82\x01\x02 \x00R\x0crelationship\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xe8\x06\n\x0cRAMPResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12%\n\x0etransaction_id\x18\x04 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x05 \x01(\tR\tbillingId\x12\x1a\n\x08\x65xchange\x18\x06 \x01(\tR\x08\x65xchange\x12*\n\x0eresource_title\x18\x07 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\r \x01(\tH\x03R\x11retrievalEndpoint\x88\x01\x01\x12\x33\n\x13\x61gent_identity_hash\x18\x0e \x01(\tH\x04R\x11\x61gentIdentityHash\x88\x01\x01\x12\x31\n\nbroker_fee\x18\x0c \x01(\x0b\x32\r.ramp.v1.CostH\x05R\tbrokerFee\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x10 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x06R\rabsenceReason\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_resource_titleB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x16\n\x14_agent_identity_hashB\r\n\x0b_broker_feeB\x11\n\x0f_absence_reason\"\x99\x04\n\x0e\x44isputeRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12\x38\n\x06reason\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeReasonB\x08\xbaH\x05\x82\x01\x02 \x00R\x06reason\x12%\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x37\n\x15received_content_hash\x18\x07 \x01(\tH\x01R\x13receivedContentHash\x88\x01\x01\x12\x35\n\x14received_hash_method\x18\x08 \x01(\tH\x02R\x12receivedHashMethod\x88\x01\x01\x12\x1b\n\treport_id\x18\t \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_descriptionB\x18\n\x16_received_content_hashB\x17\n\x15_received_hash_method\"\x8d\x03\n\x0f\x44isputeResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\"\n\ndispute_id\x18\x02 \x01(\tH\x00R\tdisputeId\x88\x01\x01\x12Q\n\x14\x65stimated_resolution\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01R\x13\x65stimatedResolution\x88\x01\x01\x12.\n\x06status\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeStatusR\x06status\x12<\n\nresolution\x18\x06 \x01(\x0e\x32\x17.ramp.v1.ResolutionTypeH\x02R\nresolution\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_dispute_idB\x17\n\x15_estimated_resolutionB\r\n\x0b_resolution\"\xc3\x01\n\x19\x44omainVerificationRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12 \n\tcaller_id\x18\x03 \x01(\tH\x00R\x08\x63\x61llerId\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0c\n\n_caller_id\"\xf9\x01\n\x1b\x44omainVerificationChallenge\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12)\n\x10verification_url\x18\x04 \x01(\tR\x0fverificationUrl\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\x91\x02\n\x1e\x44omainVerificationConfirmation\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12$\n\x0bsigning_key\x18\x04 \x01(\tH\x00R\nsigningKey\x88\x01\x01\x12\x1e\n\x08\x63\x64n_type\x18\x05 \x01(\tH\x01R\x07\x63\x64nType\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_signing_keyB\x0b\n\t_cdn_type\"\xf3\x01\n\x18\x44omainVerificationResult\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x06key_id\x18\x02 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12@\n\x0bvalid_until\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nvalidUntil\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_key_idB\x0e\n\x0c_valid_until\"\x88\x06\n\x0b\x45rrorDetail\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12>\n\x08metadata\x18\x03 \x03(\x0b\x32\".ramp.v1.ErrorDetail.MetadataEntryR\x08metadata\x12K\n\x12transaction_denial\x18\n \x01(\x0b\x32\x1a.ramp.v1.TransactionDenialH\x00R\x11transactionDenial\x12H\n\x11\x63\x61talog_rejection\x18\x0b \x01(\x0b\x32\x19.ramp.v1.CatalogRejectionH\x00R\x10\x63\x61talogRejection\x12Q\n\x14registration_failure\x18\x0c \x01(\x0b\x32\x1c.ramp.v1.RegistrationFailureH\x00R\x13registrationFailure\x12\x42\n\x0f\x64ispute_failure\x18\r \x01(\x0b\x32\x17.ramp.v1.DisputeFailureH\x00R\x0e\x64isputeFailure\x12\x64\n\x1b\x64omain_verification_failure\x18\x0e \x01(\x0b\x32\".ramp.v1.DomainVerificationFailureH\x00R\x19\x64omainVerificationFailure\x12U\n\x16retrieval_auth_failure\x18\x0f \x01(\x0b\x32\x1d.ramp.v1.RetrievalAuthFailureH\x00R\x14retrievalAuthFailure\x12U\n\x16usage_report_rejection\x18\x10 \x01(\x0b\x32\x1d.ramp.v1.UsageReportRejectionH\x00R\x14usageReportRejection\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06reason\"\xcc\x01\n\x11TransactionDenial\x12\x39\n\x06reason\x18\x01 \x01(\x0e\x32\x15.ramp.v1.DenialReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12O\n\x16restriction_mismatches\x18\x02 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x42\x0b\n\t_offer_id\"~\n\x10\x43\x61talogRejection\x12\x43\n\x06reason\x18\x01 \x01(\x0e\x32\x1f.ramp.v1.CatalogRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12%\n\x0erejected_paths\x18\x02 \x03(\tR\rrejectedPaths\"]\n\x13RegistrationFailure\x12\x46\n\x06reason\x18\x01 \x01(\x0e\x32\".ramp.v1.RegistrationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"S\n\x0e\x44isputeFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32\x1d.ramp.v1.DisputeFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"i\n\x19\x44omainVerificationFailure\x12L\n\x06reason\x18\x01 \x01(\x0e\x32(.ramp.v1.DomainVerificationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14RetrievalAuthFailure\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.RetrievalAuthFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14UsageReportRejection\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.UsageReportRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason*\xb6\x01\n\x0f\x44iscoveryMethod\x12 \n\x1c\x44ISCOVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x44ISCOVERY_METHOD_EXCHANGE\x10\x01\x12\x1b\n\x17\x44ISCOVERY_METHOD_SEARCH\x10\x02\x12#\n\x1f\x44ISCOVERY_METHOD_RECOMMENDATION\x10\x03\x12 \n\x1c\x44ISCOVERY_METHOD_SYNDICATION\x10\x04*\xf9\x02\n\x12OfferAbsenceReason\x12$\n OFFER_ABSENCE_REASON_UNSPECIFIED\x10\x00\x12\'\n#OFFER_ABSENCE_REASON_NOT_IN_CATALOG\x10\x01\x12(\n$OFFER_ABSENCE_REASON_CONTENT_BLOCKED\x10\x02\x12-\n)OFFER_ABSENCE_REASON_RESTRICTION_FILTERED\x10\x03\x12\x30\n,OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE\x10\x04\x12\'\n#OFFER_ABSENCE_REASON_NOT_AUTHORIZED\x10\x05\x12+\n\'OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT\x10\x06\x12\x33\n/OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION\x10\x07*q\n\rTermSemantics\x12\x1e\n\x1aTERM_SEMANTICS_UNSPECIFIED\x10\x00\x12\x1d\n\x19TERM_SEMANTICS_ENUMERATED\x10\x01\x12!\n\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xe5\x04\n\x0fRestrictionKind\x12 \n\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xbe\x02\n\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x9e\x02\x92\xb5\x18\x03\x61ll\x92\xb5\x18\x06\x61i-all\x92\xb5\x18\x08\x61i-train\x92\xb5\x18\x08\x61i-input\x92\xb5\x18\x08\x61i-index\x92\xb5\x18\x06search\x92\xb5\x18\x05\x63rawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\ncommercial\x92\xb5\x18\x0b\x61\x64vertising\x92\xb5\x18\teditorial\x92\xb5\x18\x08research\x92\xb5\x18\treproduce\x92\xb5\x18\ndistribute\x92\xb5\x18\x06modify\x92\xb5\x18\x07\x64isplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\x0bmanufacture\x92\xb5\x18\x04sell\xa2\xb5\x18\x0e\x66unctiontokens\x12\x45\n\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a%\x92\xb5\x18\x01*\x92\xb5\x18\x02\x45U\x92\xb5\x18\x03\x45\x45\x41\xa2\xb5\x18\x0fgeographytokens\x12\x8b\x01\n\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1ak\x92\xb5\x18\nindividual\x92\xb5\x18\x08\x61\x63\x61\x64\x65mic\x92\xb5\x18\nnon_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\x0b\x62roadcaster\x92\xb5\x18\x11\x63ommercial_entity\xa2\xb5\x18\tusertypes\x12\x1a\n\x16RESTRICTION_KIND_OTHER\x10\x04*\x8e\x01\n\x0bQuotaWindow\x12\x1c\n\x18QUOTA_WINDOW_UNSPECIFIED\x10\x00\x12\x17\n\x13QUOTA_WINDOW_HOURLY\x10\x01\x12\x16\n\x12QUOTA_WINDOW_DAILY\x10\x02\x12\x18\n\x14QUOTA_WINDOW_MONTHLY\x10\x03\x12\x16\n\x12QUOTA_WINDOW_TOTAL\x10\x04*\xf2\x01\n\x0eObligationKind\x12\x1f\n\x1bOBLIGATION_KIND_UNSPECIFIED\x10\x00\x12\x1f\n\x1bOBLIGATION_KIND_ATTRIBUTION\x10\x01\x12 \n\x1cOBLIGATION_KIND_CONTRIBUTION\x10\x02\x12\x1f\n\x1bOBLIGATION_KIND_SHARE_ALIKE\x10\x03\x12$\n OBLIGATION_KIND_NETWORK_COPYLEFT\x10\x04\x12\x1a\n\x16OBLIGATION_KIND_NOTICE\x10\x05\x12\x19\n\x15OBLIGATION_KIND_OTHER\x10\x06*\xcf\x01\n\x11ObligationTrigger\x12\"\n\x1eOBLIGATION_TRIGGER_UNSPECIFIED\x10\x00\x12\x1d\n\x19OBLIGATION_TRIGGER_ON_USE\x10\x01\x12&\n\"OBLIGATION_TRIGGER_ON_DISTRIBUTION\x10\x02\x12)\n%OBLIGATION_TRIGGER_ON_NETWORK_SERVICE\x10\x03\x12$\n OBLIGATION_TRIGGER_ON_DERIVATIVE\x10\x04*y\n\x0cPricingModel\x12\x1d\n\x19PRICING_MODEL_UNSPECIFIED\x10\x00\x12\x16\n\x12PRICING_MODEL_FREE\x10\x01\x12\x1a\n\x16PRICING_MODEL_PER_UNIT\x10\x02\x12\x16\n\x12PRICING_MODEL_FLAT\x10\x03*u\n\x0fPricingMetering\x12\x1b\n\x17PRICING_METERING_ONLINE\x10\x00\x12\x19\n\x15PRICING_METERING_NONE\x10\x01\x12*\n&PRICING_METERING_OFFLINE_SELF_REPORTED\x10\x02*\x8e\x01\n\x0e\x44\x65liveryMethod\x12\x1f\n\x1b\x44\x45LIVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x44\x45LIVERY_METHOD_DIRECT\x10\x01\x12 \n\x1c\x44\x45LIVERY_METHOD_INSTRUCTIONS\x10\x02\x12\x1d\n\x19\x44\x45LIVERY_METHOD_STREAMING\x10\x03*\xbf\x01\n\rRequesterType\x12\x1e\n\x1aREQUESTER_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14REQUESTER_TYPE_AGENT\x10\x01\x12\x1d\n\x19REQUESTER_TYPE_HUMAN_TOOL\x10\x02\x12\x1a\n\x16REQUESTER_TYPE_SERVICE\x10\x03\x12\x1c\n\x18REQUESTER_TYPE_DELEGATED\x10\x04\x12\x1b\n\x17REQUESTER_TYPE_RESEARCH\x10\x05*\x8a\x01\n\nC2PAStatus\x12\x1b\n\x17\x43\x32PA_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x43\x32PA_STATUS_TRUSTED\x10\x01\x12\x15\n\x11\x43\x32PA_STATUS_VALID\x10\x02\x12\x17\n\x13\x43\x32PA_STATUS_INVALID\x10\x03\x12\x16\n\x12\x43\x32PA_STATUS_ABSENT\x10\x04*\x98\x01\n\x12ResourceMutability\x12#\n\x1fRESOURCE_MUTABILITY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aRESOURCE_MUTABILITY_STATIC\x10\x01\x12\x1f\n\x1bRESOURCE_MUTABILITY_DYNAMIC\x10\x02\x12\x1c\n\x18RESOURCE_MUTABILITY_LIVE\x10\x03*\xef\x05\n\x0c\x44\x65nialReason\x12\x1d\n\x19\x44\x45NIAL_REASON_UNSPECIFIED\x10\x00\x12&\n\"DENIAL_REASON_BILLING_REF_INACTIVE\x10\x01\x12&\n\"DENIAL_REASON_INSUFFICIENT_BALANCE\x10\x02\x12\x1e\n\x1a\x44\x45NIAL_REASON_RATE_LIMITED\x10\x03\x12%\n!DENIAL_REASON_CONTENT_UNAVAILABLE\x10\x04\x12+\n\'DENIAL_REASON_RESTRICTION_NOT_SATISFIED\x10\x05\x12#\n\x1f\x44\x45NIAL_REASON_REPORTING_OVERDUE\x10\x06\x12\x1f\n\x1b\x44\x45NIAL_REASON_OFFER_EXPIRED\x10\x07\x12#\n\x1f\x44\x45NIAL_REASON_SIGNATURE_INVALID\x10\x08\x12 \n\x1c\x44\x45NIAL_REASON_QUOTA_EXCEEDED\x10\t\x12$\n DENIAL_REASON_DELEGATION_INVALID\x10\n\x12$\n DENIAL_REASON_SCOPE_INSUFFICIENT\x10\x0b\x12%\n!DENIAL_REASON_ENTITLEMENT_MISSING\x10\x0c\x12\'\n#DENIAL_REASON_ENTITLEMENT_MALFORMED\x10\r\x12%\n!DENIAL_REASON_ENTITLEMENT_EXPIRED\x10\x0e\x12)\n%DENIAL_REASON_ENTITLEMENT_WRONG_BUYER\x10\x0f\x12%\n!DENIAL_REASON_SUBSCRIPTION_LAPSED\x10\x10\x12)\n%DENIAL_REASON_ENTITLEMENT_NOT_GRANTED\x10\x11\x12/\n+DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION\x10\x12*\x8c\x02\n\x0fIngestionSource\x12 \n\x1cINGESTION_SOURCE_UNSPECIFIED\x10\x00\x12!\n\x1dINGESTION_SOURCE_RAMP_SITEMAP\x10\x01\x12\x18\n\x14INGESTION_SOURCE_RSL\x10\x02\x12\x1c\n\x18INGESTION_SOURCE_SITEMAP\x10\x03\x12\x1f\n\x1bINGESTION_SOURCE_HTML_CRAWL\x10\x04\x12\x1c\n\x18INGESTION_SOURCE_CMS_API\x10\x05\x12\x1b\n\x17INGESTION_SOURCE_MANUAL\x10\x06\x12 \n\x1cINGESTION_SOURCE_CATALOG_API\x10\x07*d\n\x0e\x43itationFormat\x12\x18\n\x14\x43ITATION_FORMAT_LINK\x10\x00\x12\x1c\n\x18\x43ITATION_FORMAT_FOOTNOTE\x10\x01\x12\x1a\n\x16\x43ITATION_FORMAT_INLINE\x10\x02*d\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x0e\n\nROLE_AGENT\x10\x01\x12\x11\n\rROLE_EXCHANGE\x10\x02\x12\x0f\n\x0bROLE_BROKER\x10\x03\x12\x12\n\x0eROLE_PUBLISHER\x10\x04*\x83\x01\n\x14ProviderRelationship\x12%\n!PROVIDER_RELATIONSHIP_UNSPECIFIED\x10\x00\x12 \n\x1cPROVIDER_RELATIONSHIP_DIRECT\x10\x01\x12\"\n\x1ePROVIDER_RELATIONSHIP_RESELLER\x10\x02*\x95\x01\n\nAuthMethod\x12\x1b\n\x17\x41UTH_METHOD_UNSPECIFIED\x10\x00\x12\x14\n\x10\x41UTH_METHOD_GNAP\x10\x01\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_DPOP\x10\x02\x12\x1c\n\x18\x41UTH_METHOD_OAUTH_BEARER\x10\x03\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_MTLS\x10\x04*\xea\x01\n\rDisputeReason\x12\x1e\n\x1a\x44ISPUTE_REASON_UNSPECIFIED\x10\x00\x12#\n\x1f\x44ISPUTE_REASON_CONTENT_MISMATCH\x10\x01\x12\"\n\x1e\x44ISPUTE_REASON_DELIVERY_FAILED\x10\x02\x12 \n\x1c\x44ISPUTE_REASON_WRONG_CONTENT\x10\x03\x12\'\n#DISPUTE_REASON_EXPIRED_BEFORE_FETCH\x10\x04\x12%\n!DISPUTE_REASON_INCOMPLETE_CONTENT\x10\x05*\xbe\x02\n\rDisputeStatus\x12\x1e\n\x1a\x44ISPUTE_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14\x44ISPUTE_STATUS_FILED\x10\x01\x12 \n\x1c\x44ISPUTE_STATUS_AUTO_RESOLVED\x10\x02\x12\"\n\x1e\x44ISPUTE_STATUS_EVIDENCE_NEEDED\x10\x03\x12\x1f\n\x1b\x44ISPUTE_STATUS_UNDER_REVIEW\x10\x04\x12\x1c\n\x18\x44ISPUTE_STATUS_ESCALATED\x10\x05\x12\x1b\n\x17\x44ISPUTE_STATUS_RESOLVED\x10\x06\x12\x1b\n\x17\x44ISPUTE_STATUS_APPEALED\x10\x07\x12\x1a\n\x16\x44ISPUTE_STATUS_SETTLED\x10\x08\x12\x18\n\x14\x44ISPUTE_STATUS_FINAL\x10\t*\xae\x01\n\x0eResolutionType\x12\x1f\n\x1bRESOLUTION_TYPE_UNSPECIFIED\x10\x00\x12\x1a\n\x16RESOLUTION_TYPE_CREDIT\x10\x01\x12\x1e\n\x1aRESOLUTION_TYPE_REDELIVERY\x10\x02\x12\x1c\n\x18RESOLUTION_TYPE_REJECTED\x10\x03\x12!\n\x1dRESOLUTION_TYPE_INVESTIGATION\x10\x04*\x95\x03\n\x16\x43\x61talogRejectionReason\x12(\n$CATALOG_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x34\n0CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR\x10\x01\x12,\n(CATALOG_REJECTION_REASON_TENANT_MISMATCH\x10\x02\x12\x30\n,CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED\x10\x03\x12.\n*CATALOG_REJECTION_REASON_SIGNATURE_INVALID\x10\x04\x12,\n(CATALOG_REJECTION_REASON_MALFORMED_ENTRY\x10\x05\x12\x30\n,CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN\x10\x06\x12+\n\'CATALOG_REJECTION_REASON_QUOTA_EXCEEDED\x10\x07*\xc1\x02\n\x19RegistrationFailureReason\x12+\n\'REGISTRATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x33\n/REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED\x10\x01\x12+\n\'REGISTRATION_FAILURE_REASON_INVALID_KEY\x10\x02\x12\x31\n-REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID\x10\x03\x12\x32\n.REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED\x10\x04\x12.\n*REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED\x10\x05*\x95\x02\n\x14\x44isputeFailureReason\x12&\n\"DISPUTE_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x30\n,DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'DISPUTE_FAILURE_REASON_REPORT_NOT_FILED\x10\x02\x12)\n%DISPUTE_FAILURE_REASON_WINDOW_EXPIRED\x10\x03\x12$\n DISPUTE_FAILURE_REASON_DUPLICATE\x10\x04\x12%\n!DISPUTE_FAILURE_REASON_INELIGIBLE\x10\x05*\xbb\x03\n\x1f\x44omainVerificationFailureReason\x12\x32\n.DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12:\n6DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND\x10\x01\x12\x39\n5DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH\x10\x02\x12\x38\n4DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED\x10\x03\x12\x33\n/DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED\x10\x04\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED\x10\x05\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED\x10\x06*\xd9\x05\n\x1aRetrievalAuthFailureReason\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED\x10\x00\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED\x10\x01\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING\x10\x02\x12\x34\n0RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING\x10\x03\x12\x38\n4RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH\x10\x04\x12\x33\n/RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING\x10\x05\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING\x10\x06\x12\x30\n,RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH\x10\x07\x12\x35\n1RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH\x10\x08\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING\x10\t\x12\x36\n2RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING\x10\n\x12/\n+RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED\x10\x0b\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID\x10\x0c*\xcb\x02\n\x1aUsageReportRejectionReason\x12-\n)USAGE_REPORT_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x37\n3USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'USAGE_REPORT_REJECTION_REASON_DUPLICATE\x10\x02\x12\x30\n,USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED\x10\x03\x12\x39\n5USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS\x10\x04\x12+\n\'USAGE_REPORT_REJECTION_REASON_MALFORMED\x10\x05\x32\x86\x04\n\x0f\x45xchangeService\x12\x46\n\x11\x44iscoverResources\x12\x16.ramp.v1.ResourceQuery\x1a\x19.ramp.v1.ResourceResponse\x12O\n\x12\x45xecuteTransaction\x12\x1b.ramp.v1.TransactionRequest\x1a\x1c.ramp.v1.TransactionResponse\x12\x41\n\x0bReportUsage\x12\x14.ramp.v1.UsageReport\x1a\x1c.ramp.v1.UsageReportResponse\x12G\n\x12\x44isputeTransaction\x12\x17.ramp.v1.DisputeRequest\x1a\x18.ramp.v1.DisputeResponse\x12\x65\n\x19RequestDomainVerification\x12\".ramp.v1.DomainVerificationRequest\x1a$.ramp.v1.DomainVerificationChallenge\x12g\n\x19\x43onfirmDomainVerification\x12\'.ramp.v1.DomainVerificationConfirmation\x1a!.ramp.v1.DomainVerificationResult2\x89\x02\n\x0e\x43\x61talogService\x12N\n\rPushResources\x12\x1d.ramp.v1.PushResourcesRequest\x1a\x1e.ramp.v1.PushResourcesResponse\x12T\n\x0fRemoveResources\x12\x1f.ramp.v1.RemoveResourcesRequest\x1a .ramp.v1.RemoveResourcesResponse\x12Q\n\x0eRefreshCatalog\x12\x1e.ramp.v1.RefreshCatalogRequest\x1a\x1f.ramp.v1.RefreshCatalogResponse2G\n\rBrokerService\x12\x36\n\x07Resolve\x12\x14.ramp.v1.RAMPRequest\x1a\x15.ramp.v1.RAMPResponseB\x8e\x01\n\x0b\x63om.ramp.v1B\tRampProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -44,25 +44,25 @@ _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_USER_TYPE"]._loaded_options = None _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_USER_TYPE"]._serialized_options = b'\222\265\030\nindividual\222\265\030\010academic\222\265\030\nnon_profit\222\265\030\016news_publisher\222\265\030\013broadcaster\222\265\030\021commercial_entity\242\265\030\tusertypes' _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._loaded_options = None - _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._serialized_options = b'\272H\320\001\222\001\002\020@\272\001\307\001\n$acceptable_restriction.values.format\022Meach value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' + _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._serialized_options = b'\272H\"\222\001\037\020@\"\033r\031\020\001\030@2\023^[A-Za-z0-9._:*-]+$' _globals['_RESOURCEQUERY'].fields_by_name['uris']._loaded_options = None _globals['_RESOURCEQUERY'].fields_by_name['uris']._serialized_options = b'\272H\006\222\001\003\020\200\002' _globals['_RESOURCEIDENTITY'].fields_by_name['resource_mutability']._loaded_options = None _globals['_RESOURCEIDENTITY'].fields_by_name['resource_mutability']._serialized_options = b'\272H\005\202\001\002 \000' _globals['_LICENSE'].fields_by_name['uri_digest']._loaded_options = None - _globals['_LICENSE'].fields_by_name['uri_digest']._serialized_options = b'\272H\204\002\272\001\200\002\n\031license.uri_digest.format\022Zuri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length\032\206\001this == \'\' || this.matches(\'^sha256:[0-9a-f]{64}$\') || this.matches(\'^sha384:[0-9a-f]{96}$\') || this.matches(\'^sha512:[0-9a-f]{128}$\')' + _globals['_LICENSE'].fields_by_name['uri_digest']._serialized_options = b'\272HErC2A^(sha256:[0-9a-f]{64}|sha384:[0-9a-f]{96}|sha512:[0-9a-f]{128})?$' _globals['_LICENSE']._loaded_options = None _globals['_LICENSE']._serialized_options = b'\272Hy\032w\n license.digest_required_with_uri\022*uri_digest is required whenever uri is set\032\'this.uri == \'\' || this.uri_digest != \'\'' _globals['_RESTRICTION'].fields_by_name['kind']._loaded_options = None _globals['_RESTRICTION'].fields_by_name['kind']._serialized_options = b'\272H\005\202\001\002 \000' _globals['_RESTRICTION'].fields_by_name['permitted']._loaded_options = None - _globals['_RESTRICTION'].fields_by_name['permitted']._serialized_options = b'\272H\310\001\222\001\002\020@\272\001\277\001\n\034restriction.permitted.format\022Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' + _globals['_RESTRICTION'].fields_by_name['permitted']._serialized_options = b'\272H\"\222\001\037\020@\"\033r\031\020\001\030@2\023^[A-Za-z0-9._:*-]+$' _globals['_RESTRICTION'].fields_by_name['prohibited']._loaded_options = None - _globals['_RESTRICTION'].fields_by_name['prohibited']._serialized_options = b'\272H\311\001\222\001\002\020@\272\001\300\001\n\035restriction.prohibited.format\022Meach token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)\032Pthis.all(t, t.size() >= 1 && t.size() <= 64 && t.matches(\'^[A-Za-z0-9._:*-]+$\'))' + _globals['_RESTRICTION'].fields_by_name['prohibited']._serialized_options = b'\272H\"\222\001\037\020@\"\033r\031\020\001\030@2\023^[A-Za-z0-9._:*-]+$' _globals['_RESTRICTION']._loaded_options = None _globals['_RESTRICTION']._serialized_options = b'\272H\226\001\032\223\001\n)restriction.permitted_prohibited_disjoint\0226a token cannot appear in both permitted and prohibited\032.this.permitted.all(p, !(p in this.prohibited))' _globals['_QUOTA'].fields_by_name['metric']._loaded_options = None - _globals['_QUOTA'].fields_by_name['metric']._serialized_options = b'\272H\345\001r\002\030@\272\001\335\001\n\023quota.metric.format\022cmetric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032athis != \'\' && (this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\'))\212\265\030\rdisplay-words\212\265\030\013impressions\212\265\030\006tokens\212\265\030\014input-tokens\212\265\030\022units-manufactured\212\265\030\010accesses\212\265\030\006copies\212\265\030\005seats\232\265\030\014quotametrics' + _globals['_QUOTA'].fields_by_name['metric']._serialized_options = b'\272H4r2\030@2.^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)$\212\265\030\rdisplay-words\212\265\030\013impressions\212\265\030\006tokens\212\265\030\014input-tokens\212\265\030\022units-manufactured\212\265\030\010accesses\212\265\030\006copies\212\265\030\005seats\232\265\030\014quotametrics' _globals['_QUOTA'].fields_by_name['limit']._loaded_options = None _globals['_QUOTA'].fields_by_name['limit']._serialized_options = b'\272H\004\"\002(\001' _globals['_QUOTA'].fields_by_name['window']._loaded_options = None @@ -84,7 +84,7 @@ _globals['_PRICING'].fields_by_name['model']._loaded_options = None _globals['_PRICING'].fields_by_name['model']._serialized_options = b'\272H\005\202\001\002 \000' _globals['_PRICING'].fields_by_name['unit']._loaded_options = None - _globals['_PRICING'].fields_by_name['unit']._serialized_options = b'\272H\351\001r\002\030@\272\001\341\001\n\023pricing.unit.format\022iunit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')\212\265\030\007fetches\212\265\030\010accesses\212\265\030\006tokens\212\265\030\005calls\212\265\030\005pages\212\265\030\007seconds\212\265\030\007minutes\212\265\030\007records\212\265\030\007streams\212\265\030\006images\212\265\030\005seats\212\265\030\022units-manufactured\212\265\030\ncharacters\212\265\030\005bytes\212\265\030\005items\212\265\030\005sq-km\232\265\030\014pricingunits' + _globals['_PRICING'].fields_by_name['unit']._serialized_options = b'\272H5r3\030@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$\212\265\030\007fetches\212\265\030\010accesses\212\265\030\006tokens\212\265\030\005calls\212\265\030\005pages\212\265\030\007seconds\212\265\030\007minutes\212\265\030\007records\212\265\030\007streams\212\265\030\006images\212\265\030\005seats\212\265\030\022units-manufactured\212\265\030\ncharacters\212\265\030\005bytes\212\265\030\005items\212\265\030\005sq-km\232\265\030\014pricingunits' _globals['_PRICING']._loaded_options = None _globals['_PRICING']._serialized_options = b'\272H\243\002\032\227\001\n\036pricing.per_unit.requires_unit\022\'unit is required when model is PER_UNIT\032Lthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\032\206\001\n\026pricing.free.zero_rate\022!rate must be 0 when model is FREE\032Ithis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0' _globals['_REQUESTER'].fields_by_name['type']._loaded_options = None @@ -96,7 +96,7 @@ _globals['_USAGEREPORT'].fields_by_name['idempotency_key']._loaded_options = None _globals['_USAGEREPORT'].fields_by_name['idempotency_key']._serialized_options = b'\272H\004r\002\020\001' _globals['_USAGE'].fields_by_name['consumed_unit']._loaded_options = None - _globals['_USAGE'].fields_by_name['consumed_unit']._serialized_options = b'\272H\371\001r\002\030@\272\001\361\001\n\032usage.consumed_unit.format\022rconsumed_unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, \342\211\24464 chars)\032_this == \'\' || this.matches(\'^[a-z0-9-]+$\') || this.matches(\'^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$\')' + _globals['_USAGE'].fields_by_name['consumed_unit']._serialized_options = b'\272H5r3\030@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$' _globals['_RAMPREQUEST'].fields_by_name['uris']._loaded_options = None _globals['_RAMPREQUEST'].fields_by_name['uris']._serialized_options = b'\272H\006\222\001\003\020\200\002' _globals['_WELLKNOWNMANIFEST'].fields_by_name['role']._loaded_options = None @@ -123,184 +123,184 @@ _globals['_RETRIEVALAUTHFAILURE'].fields_by_name['reason']._serialized_options = b'\272H\007\202\001\004\020\001 \000' _globals['_USAGEREPORTREJECTION'].fields_by_name['reason']._loaded_options = None _globals['_USAGEREPORTREJECTION'].fields_by_name['reason']._serialized_options = b'\272H\007\202\001\004\020\001 \000' - _globals['_DISCOVERYMETHOD']._serialized_start=23412 - _globals['_DISCOVERYMETHOD']._serialized_end=23594 - _globals['_OFFERABSENCEREASON']._serialized_start=23597 - _globals['_OFFERABSENCEREASON']._serialized_end=23974 - _globals['_TERMSEMANTICS']._serialized_start=23976 - _globals['_TERMSEMANTICS']._serialized_end=24089 - _globals['_RESTRICTIONKIND']._serialized_start=24092 - _globals['_RESTRICTIONKIND']._serialized_end=24705 - _globals['_QUOTAWINDOW']._serialized_start=24708 - _globals['_QUOTAWINDOW']._serialized_end=24850 - _globals['_OBLIGATIONKIND']._serialized_start=24853 - _globals['_OBLIGATIONKIND']._serialized_end=25095 - _globals['_OBLIGATIONTRIGGER']._serialized_start=25098 - _globals['_OBLIGATIONTRIGGER']._serialized_end=25305 - _globals['_PRICINGMODEL']._serialized_start=25307 - _globals['_PRICINGMODEL']._serialized_end=25428 - _globals['_PRICINGMETERING']._serialized_start=25430 - _globals['_PRICINGMETERING']._serialized_end=25547 - _globals['_DELIVERYMETHOD']._serialized_start=25550 - _globals['_DELIVERYMETHOD']._serialized_end=25692 - _globals['_REQUESTERTYPE']._serialized_start=25695 - _globals['_REQUESTERTYPE']._serialized_end=25886 - _globals['_C2PASTATUS']._serialized_start=25889 - _globals['_C2PASTATUS']._serialized_end=26027 - _globals['_RESOURCEMUTABILITY']._serialized_start=26030 - _globals['_RESOURCEMUTABILITY']._serialized_end=26182 - _globals['_DENIALREASON']._serialized_start=26185 - _globals['_DENIALREASON']._serialized_end=26936 - _globals['_INGESTIONSOURCE']._serialized_start=26939 - _globals['_INGESTIONSOURCE']._serialized_end=27207 - _globals['_CITATIONFORMAT']._serialized_start=27209 - _globals['_CITATIONFORMAT']._serialized_end=27309 - _globals['_ROLE']._serialized_start=27311 - _globals['_ROLE']._serialized_end=27411 - _globals['_PROVIDERRELATIONSHIP']._serialized_start=27414 - _globals['_PROVIDERRELATIONSHIP']._serialized_end=27545 - _globals['_AUTHMETHOD']._serialized_start=27548 - _globals['_AUTHMETHOD']._serialized_end=27697 - _globals['_DISPUTEREASON']._serialized_start=27700 - _globals['_DISPUTEREASON']._serialized_end=27934 - _globals['_DISPUTESTATUS']._serialized_start=27937 - _globals['_DISPUTESTATUS']._serialized_end=28255 - _globals['_RESOLUTIONTYPE']._serialized_start=28258 - _globals['_RESOLUTIONTYPE']._serialized_end=28432 - _globals['_CATALOGREJECTIONREASON']._serialized_start=28435 - _globals['_CATALOGREJECTIONREASON']._serialized_end=28840 - _globals['_REGISTRATIONFAILUREREASON']._serialized_start=28843 - _globals['_REGISTRATIONFAILUREREASON']._serialized_end=29164 - _globals['_DISPUTEFAILUREREASON']._serialized_start=29167 - _globals['_DISPUTEFAILUREREASON']._serialized_end=29444 - _globals['_DOMAINVERIFICATIONFAILUREREASON']._serialized_start=29447 - _globals['_DOMAINVERIFICATIONFAILUREREASON']._serialized_end=29890 - _globals['_RETRIEVALAUTHFAILUREREASON']._serialized_start=29893 - _globals['_RETRIEVALAUTHFAILUREREASON']._serialized_end=30622 - _globals['_USAGEREPORTREJECTIONREASON']._serialized_start=30625 - _globals['_USAGEREPORTREJECTIONREASON']._serialized_end=30956 + _globals['_DISCOVERYMETHOD']._serialized_start=22144 + _globals['_DISCOVERYMETHOD']._serialized_end=22326 + _globals['_OFFERABSENCEREASON']._serialized_start=22329 + _globals['_OFFERABSENCEREASON']._serialized_end=22706 + _globals['_TERMSEMANTICS']._serialized_start=22708 + _globals['_TERMSEMANTICS']._serialized_end=22821 + _globals['_RESTRICTIONKIND']._serialized_start=22824 + _globals['_RESTRICTIONKIND']._serialized_end=23437 + _globals['_QUOTAWINDOW']._serialized_start=23440 + _globals['_QUOTAWINDOW']._serialized_end=23582 + _globals['_OBLIGATIONKIND']._serialized_start=23585 + _globals['_OBLIGATIONKIND']._serialized_end=23827 + _globals['_OBLIGATIONTRIGGER']._serialized_start=23830 + _globals['_OBLIGATIONTRIGGER']._serialized_end=24037 + _globals['_PRICINGMODEL']._serialized_start=24039 + _globals['_PRICINGMODEL']._serialized_end=24160 + _globals['_PRICINGMETERING']._serialized_start=24162 + _globals['_PRICINGMETERING']._serialized_end=24279 + _globals['_DELIVERYMETHOD']._serialized_start=24282 + _globals['_DELIVERYMETHOD']._serialized_end=24424 + _globals['_REQUESTERTYPE']._serialized_start=24427 + _globals['_REQUESTERTYPE']._serialized_end=24618 + _globals['_C2PASTATUS']._serialized_start=24621 + _globals['_C2PASTATUS']._serialized_end=24759 + _globals['_RESOURCEMUTABILITY']._serialized_start=24762 + _globals['_RESOURCEMUTABILITY']._serialized_end=24914 + _globals['_DENIALREASON']._serialized_start=24917 + _globals['_DENIALREASON']._serialized_end=25668 + _globals['_INGESTIONSOURCE']._serialized_start=25671 + _globals['_INGESTIONSOURCE']._serialized_end=25939 + _globals['_CITATIONFORMAT']._serialized_start=25941 + _globals['_CITATIONFORMAT']._serialized_end=26041 + _globals['_ROLE']._serialized_start=26043 + _globals['_ROLE']._serialized_end=26143 + _globals['_PROVIDERRELATIONSHIP']._serialized_start=26146 + _globals['_PROVIDERRELATIONSHIP']._serialized_end=26277 + _globals['_AUTHMETHOD']._serialized_start=26280 + _globals['_AUTHMETHOD']._serialized_end=26429 + _globals['_DISPUTEREASON']._serialized_start=26432 + _globals['_DISPUTEREASON']._serialized_end=26666 + _globals['_DISPUTESTATUS']._serialized_start=26669 + _globals['_DISPUTESTATUS']._serialized_end=26987 + _globals['_RESOLUTIONTYPE']._serialized_start=26990 + _globals['_RESOLUTIONTYPE']._serialized_end=27164 + _globals['_CATALOGREJECTIONREASON']._serialized_start=27167 + _globals['_CATALOGREJECTIONREASON']._serialized_end=27572 + _globals['_REGISTRATIONFAILUREREASON']._serialized_start=27575 + _globals['_REGISTRATIONFAILUREREASON']._serialized_end=27896 + _globals['_DISPUTEFAILUREREASON']._serialized_start=27899 + _globals['_DISPUTEFAILUREREASON']._serialized_end=28176 + _globals['_DOMAINVERIFICATIONFAILUREREASON']._serialized_start=28179 + _globals['_DOMAINVERIFICATIONFAILUREREASON']._serialized_end=28622 + _globals['_RETRIEVALAUTHFAILUREREASON']._serialized_start=28625 + _globals['_RETRIEVALAUTHFAILUREREASON']._serialized_end=29354 + _globals['_USAGEREPORTREJECTIONREASON']._serialized_start=29357 + _globals['_USAGEREPORTREJECTIONREASON']._serialized_end=29688 _globals['_ACCEPTABLERESTRICTION']._serialized_start=177 - _globals['_ACCEPTABLERESTRICTION']._serialized_end=486 - _globals['_RESOURCEQUERY']._serialized_start=489 - _globals['_RESOURCEQUERY']._serialized_end=906 - _globals['_RESOURCERESPONSE']._serialized_start=909 - _globals['_RESOURCERESPONSE']._serialized_end=1222 - _globals['_OFFERGROUP']._serialized_start=1225 - _globals['_OFFERGROUP']._serialized_end=1557 - _globals['_RATELIMITINFO']._serialized_start=1560 - _globals['_RATELIMITINFO']._serialized_end=1749 - _globals['_SUBSCRIPTIONQUOTAINFO']._serialized_start=1752 - _globals['_SUBSCRIPTIONQUOTAINFO']._serialized_end=2031 - _globals['_OFFER']._serialized_start=2034 - _globals['_OFFER']._serialized_end=3021 - _globals['_RESOURCEIDENTITY']._serialized_start=3024 - _globals['_RESOURCEIDENTITY']._serialized_end=3761 - _globals['_RESOURCEATTESTATION']._serialized_start=3764 - _globals['_RESOURCEATTESTATION']._serialized_end=3989 - _globals['_LICENSE']._serialized_start=3992 - _globals['_LICENSE']._serialized_end=4588 - _globals['_RESTRICTION']._serialized_start=4591 - _globals['_RESTRICTION']._serialized_end=5324 - _globals['_QUOTA']._serialized_start=5327 - _globals['_QUOTA']._serialized_end=5809 - _globals['_OBLIGATION']._serialized_start=5812 - _globals['_OBLIGATION']._serialized_end=6348 - _globals['_LICENSETERM']._serialized_start=6351 - _globals['_LICENSETERM']._serialized_end=7204 - _globals['_PREVIEW']._serialized_start=7207 - _globals['_PREVIEW']._serialized_end=7422 - _globals['_PRICING']._serialized_start=7425 - _globals['_PRICING']._serialized_end=8587 - _globals['_REQUESTER']._serialized_start=8590 - _globals['_REQUESTER']._serialized_end=8968 - _globals['_DELEGATION']._serialized_start=8971 - _globals['_DELEGATION']._serialized_end=9588 - _globals['_TRANSACTIONREQUEST']._serialized_start=9591 - _globals['_TRANSACTIONREQUEST']._serialized_end=9966 - _globals['_TRANSACTIONITEM']._serialized_start=9968 - _globals['_TRANSACTIONITEM']._serialized_end=10053 - _globals['_TRANSACTIONRESPONSE']._serialized_start=10056 - _globals['_TRANSACTIONRESPONSE']._serialized_end=11147 - _globals['_TRANSACTIONRESULTITEM']._serialized_start=11150 - _globals['_TRANSACTIONRESULTITEM']._serialized_end=12033 - _globals['_COST']._serialized_start=12035 - _globals['_COST']._serialized_end=12141 - _globals['_PUSHRESOURCESREQUEST']._serialized_start=12144 - _globals['_PUSHRESOURCESREQUEST']._serialized_end=12370 - _globals['_RESOURCEENTRY']._serialized_start=12373 - _globals['_RESOURCEENTRY']._serialized_end=13192 - _globals['_PUSHRESOURCESRESPONSE']._serialized_start=13195 - _globals['_PUSHRESOURCESRESPONSE']._serialized_end=13398 - _globals['_REMOVERESOURCESREQUEST']._serialized_start=13400 - _globals['_REMOVERESOURCESREQUEST']._serialized_end=13493 - _globals['_REMOVERESOURCESRESPONSE']._serialized_start=13495 - _globals['_REMOVERESOURCESRESPONSE']._serialized_end=13564 - _globals['_REFRESHCATALOGREQUEST']._serialized_start=13566 - _globals['_REFRESHCATALOGREQUEST']._serialized_end=13636 - _globals['_REFRESHCATALOGRESPONSE']._serialized_start=13638 - _globals['_REFRESHCATALOGRESPONSE']._serialized_end=13706 - _globals['_REPORTINGOBLIGATION']._serialized_start=13709 - _globals['_REPORTINGOBLIGATION']._serialized_end=13990 - _globals['_USAGEREPORT']._serialized_start=13993 - _globals['_USAGEREPORT']._serialized_end=14409 - _globals['_ATTRIBUTIONDETAIL']._serialized_start=14412 - _globals['_ATTRIBUTIONDETAIL']._serialized_end=14621 - _globals['_USAGE']._serialized_start=14624 - _globals['_USAGE']._serialized_end=15248 - _globals['_USAGEASSET']._serialized_start=15250 - _globals['_USAGEASSET']._serialized_end=15368 - _globals['_USAGEREPORTRESPONSE']._serialized_start=15371 - _globals['_USAGEREPORTRESPONSE']._serialized_end=15517 - _globals['_RAMPREQUEST']._serialized_start=15520 - _globals['_RAMPREQUEST']._serialized_end=16071 - _globals['_REQUESTCONSTRAINTS']._serialized_start=16074 - _globals['_REQUESTCONSTRAINTS']._serialized_end=16788 - _globals['_JSONWEBKEY']._serialized_start=16791 - _globals['_JSONWEBKEY']._serialized_end=16967 - _globals['_WELLKNOWNMANIFEST']._serialized_start=16970 - _globals['_WELLKNOWNMANIFEST']._serialized_end=18617 - _globals['_KEYINVALIDATIONLIST']._serialized_start=18619 - _globals['_KEYINVALIDATIONLIST']._serialized_end=18715 - _globals['_CATALOGCONTRIBUTOR']._serialized_start=18717 - _globals['_CATALOGCONTRIBUTOR']._serialized_end=18797 - _globals['_AUTHORIZEDEXCHANGE']._serialized_start=18800 - _globals['_AUTHORIZEDEXCHANGE']._serialized_end=19027 - _globals['_RAMPRESPONSE']._serialized_start=19030 - _globals['_RAMPRESPONSE']._serialized_end=19902 - _globals['_DISPUTEREQUEST']._serialized_start=19905 - _globals['_DISPUTEREQUEST']._serialized_end=20442 - _globals['_DISPUTERESPONSE']._serialized_start=20445 - _globals['_DISPUTERESPONSE']._serialized_end=20842 - _globals['_DOMAINVERIFICATIONREQUEST']._serialized_start=20845 - _globals['_DOMAINVERIFICATIONREQUEST']._serialized_end=21040 - _globals['_DOMAINVERIFICATIONCHALLENGE']._serialized_start=21043 - _globals['_DOMAINVERIFICATIONCHALLENGE']._serialized_end=21292 - _globals['_DOMAINVERIFICATIONCONFIRMATION']._serialized_start=21295 - _globals['_DOMAINVERIFICATIONCONFIRMATION']._serialized_end=21568 - _globals['_DOMAINVERIFICATIONRESULT']._serialized_start=21571 - _globals['_DOMAINVERIFICATIONRESULT']._serialized_end=21814 - _globals['_ERRORDETAIL']._serialized_start=21817 - _globals['_ERRORDETAIL']._serialized_end=22593 - _globals['_ERRORDETAIL_METADATAENTRY']._serialized_start=22524 - _globals['_ERRORDETAIL_METADATAENTRY']._serialized_end=22583 - _globals['_TRANSACTIONDENIAL']._serialized_start=22596 - _globals['_TRANSACTIONDENIAL']._serialized_end=22800 - _globals['_CATALOGREJECTION']._serialized_start=22802 - _globals['_CATALOGREJECTION']._serialized_end=22928 - _globals['_REGISTRATIONFAILURE']._serialized_start=22930 - _globals['_REGISTRATIONFAILURE']._serialized_end=23023 - _globals['_DISPUTEFAILURE']._serialized_start=23025 - _globals['_DISPUTEFAILURE']._serialized_end=23108 - _globals['_DOMAINVERIFICATIONFAILURE']._serialized_start=23110 - _globals['_DOMAINVERIFICATIONFAILURE']._serialized_end=23215 - _globals['_RETRIEVALAUTHFAILURE']._serialized_start=23217 - _globals['_RETRIEVALAUTHFAILURE']._serialized_end=23312 - _globals['_USAGEREPORTREJECTION']._serialized_start=23314 - _globals['_USAGEREPORTREJECTION']._serialized_end=23409 - _globals['_EXCHANGESERVICE']._serialized_start=30959 - _globals['_EXCHANGESERVICE']._serialized_end=31477 - _globals['_CATALOGSERVICE']._serialized_start=31480 - _globals['_CATALOGSERVICE']._serialized_end=31745 - _globals['_BROKERSERVICE']._serialized_start=31747 - _globals['_BROKERSERVICE']._serialized_end=31818 + _globals['_ACCEPTABLERESTRICTION']._serialized_end=309 + _globals['_RESOURCEQUERY']._serialized_start=312 + _globals['_RESOURCEQUERY']._serialized_end=729 + _globals['_RESOURCERESPONSE']._serialized_start=732 + _globals['_RESOURCERESPONSE']._serialized_end=1045 + _globals['_OFFERGROUP']._serialized_start=1048 + _globals['_OFFERGROUP']._serialized_end=1380 + _globals['_RATELIMITINFO']._serialized_start=1383 + _globals['_RATELIMITINFO']._serialized_end=1572 + _globals['_SUBSCRIPTIONQUOTAINFO']._serialized_start=1575 + _globals['_SUBSCRIPTIONQUOTAINFO']._serialized_end=1854 + _globals['_OFFER']._serialized_start=1857 + _globals['_OFFER']._serialized_end=2844 + _globals['_RESOURCEIDENTITY']._serialized_start=2847 + _globals['_RESOURCEIDENTITY']._serialized_end=3584 + _globals['_RESOURCEATTESTATION']._serialized_start=3587 + _globals['_RESOURCEATTESTATION']._serialized_end=3812 + _globals['_LICENSE']._serialized_start=3815 + _globals['_LICENSE']._serialized_end=4217 + _globals['_RESTRICTION']._serialized_start=4220 + _globals['_RESTRICTION']._serialized_end=4614 + _globals['_QUOTA']._serialized_start=4617 + _globals['_QUOTA']._serialized_end=4921 + _globals['_OBLIGATION']._serialized_start=4924 + _globals['_OBLIGATION']._serialized_end=5460 + _globals['_LICENSETERM']._serialized_start=5463 + _globals['_LICENSETERM']._serialized_end=6316 + _globals['_PREVIEW']._serialized_start=6319 + _globals['_PREVIEW']._serialized_end=6534 + _globals['_PRICING']._serialized_start=6537 + _globals['_PRICING']._serialized_end=7518 + _globals['_REQUESTER']._serialized_start=7521 + _globals['_REQUESTER']._serialized_end=7899 + _globals['_DELEGATION']._serialized_start=7902 + _globals['_DELEGATION']._serialized_end=8519 + _globals['_TRANSACTIONREQUEST']._serialized_start=8522 + _globals['_TRANSACTIONREQUEST']._serialized_end=8897 + _globals['_TRANSACTIONITEM']._serialized_start=8899 + _globals['_TRANSACTIONITEM']._serialized_end=8984 + _globals['_TRANSACTIONRESPONSE']._serialized_start=8987 + _globals['_TRANSACTIONRESPONSE']._serialized_end=10078 + _globals['_TRANSACTIONRESULTITEM']._serialized_start=10081 + _globals['_TRANSACTIONRESULTITEM']._serialized_end=10964 + _globals['_COST']._serialized_start=10966 + _globals['_COST']._serialized_end=11072 + _globals['_PUSHRESOURCESREQUEST']._serialized_start=11075 + _globals['_PUSHRESOURCESREQUEST']._serialized_end=11301 + _globals['_RESOURCEENTRY']._serialized_start=11304 + _globals['_RESOURCEENTRY']._serialized_end=12123 + _globals['_PUSHRESOURCESRESPONSE']._serialized_start=12126 + _globals['_PUSHRESOURCESRESPONSE']._serialized_end=12329 + _globals['_REMOVERESOURCESREQUEST']._serialized_start=12331 + _globals['_REMOVERESOURCESREQUEST']._serialized_end=12424 + _globals['_REMOVERESOURCESRESPONSE']._serialized_start=12426 + _globals['_REMOVERESOURCESRESPONSE']._serialized_end=12495 + _globals['_REFRESHCATALOGREQUEST']._serialized_start=12497 + _globals['_REFRESHCATALOGREQUEST']._serialized_end=12567 + _globals['_REFRESHCATALOGRESPONSE']._serialized_start=12569 + _globals['_REFRESHCATALOGRESPONSE']._serialized_end=12637 + _globals['_REPORTINGOBLIGATION']._serialized_start=12640 + _globals['_REPORTINGOBLIGATION']._serialized_end=12921 + _globals['_USAGEREPORT']._serialized_start=12924 + _globals['_USAGEREPORT']._serialized_end=13340 + _globals['_ATTRIBUTIONDETAIL']._serialized_start=13343 + _globals['_ATTRIBUTIONDETAIL']._serialized_end=13552 + _globals['_USAGE']._serialized_start=13555 + _globals['_USAGE']._serialized_end=13980 + _globals['_USAGEASSET']._serialized_start=13982 + _globals['_USAGEASSET']._serialized_end=14100 + _globals['_USAGEREPORTRESPONSE']._serialized_start=14103 + _globals['_USAGEREPORTRESPONSE']._serialized_end=14249 + _globals['_RAMPREQUEST']._serialized_start=14252 + _globals['_RAMPREQUEST']._serialized_end=14803 + _globals['_REQUESTCONSTRAINTS']._serialized_start=14806 + _globals['_REQUESTCONSTRAINTS']._serialized_end=15520 + _globals['_JSONWEBKEY']._serialized_start=15523 + _globals['_JSONWEBKEY']._serialized_end=15699 + _globals['_WELLKNOWNMANIFEST']._serialized_start=15702 + _globals['_WELLKNOWNMANIFEST']._serialized_end=17349 + _globals['_KEYINVALIDATIONLIST']._serialized_start=17351 + _globals['_KEYINVALIDATIONLIST']._serialized_end=17447 + _globals['_CATALOGCONTRIBUTOR']._serialized_start=17449 + _globals['_CATALOGCONTRIBUTOR']._serialized_end=17529 + _globals['_AUTHORIZEDEXCHANGE']._serialized_start=17532 + _globals['_AUTHORIZEDEXCHANGE']._serialized_end=17759 + _globals['_RAMPRESPONSE']._serialized_start=17762 + _globals['_RAMPRESPONSE']._serialized_end=18634 + _globals['_DISPUTEREQUEST']._serialized_start=18637 + _globals['_DISPUTEREQUEST']._serialized_end=19174 + _globals['_DISPUTERESPONSE']._serialized_start=19177 + _globals['_DISPUTERESPONSE']._serialized_end=19574 + _globals['_DOMAINVERIFICATIONREQUEST']._serialized_start=19577 + _globals['_DOMAINVERIFICATIONREQUEST']._serialized_end=19772 + _globals['_DOMAINVERIFICATIONCHALLENGE']._serialized_start=19775 + _globals['_DOMAINVERIFICATIONCHALLENGE']._serialized_end=20024 + _globals['_DOMAINVERIFICATIONCONFIRMATION']._serialized_start=20027 + _globals['_DOMAINVERIFICATIONCONFIRMATION']._serialized_end=20300 + _globals['_DOMAINVERIFICATIONRESULT']._serialized_start=20303 + _globals['_DOMAINVERIFICATIONRESULT']._serialized_end=20546 + _globals['_ERRORDETAIL']._serialized_start=20549 + _globals['_ERRORDETAIL']._serialized_end=21325 + _globals['_ERRORDETAIL_METADATAENTRY']._serialized_start=21256 + _globals['_ERRORDETAIL_METADATAENTRY']._serialized_end=21315 + _globals['_TRANSACTIONDENIAL']._serialized_start=21328 + _globals['_TRANSACTIONDENIAL']._serialized_end=21532 + _globals['_CATALOGREJECTION']._serialized_start=21534 + _globals['_CATALOGREJECTION']._serialized_end=21660 + _globals['_REGISTRATIONFAILURE']._serialized_start=21662 + _globals['_REGISTRATIONFAILURE']._serialized_end=21755 + _globals['_DISPUTEFAILURE']._serialized_start=21757 + _globals['_DISPUTEFAILURE']._serialized_end=21840 + _globals['_DOMAINVERIFICATIONFAILURE']._serialized_start=21842 + _globals['_DOMAINVERIFICATIONFAILURE']._serialized_end=21947 + _globals['_RETRIEVALAUTHFAILURE']._serialized_start=21949 + _globals['_RETRIEVALAUTHFAILURE']._serialized_end=22044 + _globals['_USAGEREPORTREJECTION']._serialized_start=22046 + _globals['_USAGEREPORTREJECTION']._serialized_end=22141 + _globals['_EXCHANGESERVICE']._serialized_start=29691 + _globals['_EXCHANGESERVICE']._serialized_end=30209 + _globals['_CATALOGSERVICE']._serialized_start=30212 + _globals['_CATALOGSERVICE']._serialized_end=30477 + _globals['_BROKERSERVICE']._serialized_start=30479 + _globals['_BROKERSERVICE']._serialized_end=30550 # @@protoc_insertion_point(module_scope) diff --git a/gen/ts/ramp/v1/ramp_pb.ts b/gen/ts/ramp/v1/ramp_pb.ts index 55d479a2..4be7c449 100644 --- a/gen/ts/ramp/v1/ramp_pb.ts +++ b/gen/ts/ramp/v1/ramp_pb.ts @@ -23,7 +23,7 @@ import type { JsonObject, Message } from "@bufbuild/protobuf"; * Describes the file ramp/v1/ramp.proto. */ export const file_ramp_v1_ramp: GenFile = /*@__PURE__*/ - fileDesc("ChJyYW1wL3YxL3JhbXAucHJvdG8SB3JhbXAudjEipwIKFUFjY2VwdGFibGVSZXN0cmljdGlvbhImCgRheGlzGAEgASgOMhgucmFtcC52MS5SZXN0cmljdGlvbktpbmQS5QEKBnZhbHVlcxgCIAMoCULUAbpI0AG6AccBCiRhY2NlcHRhYmxlX3Jlc3RyaWN0aW9uLnZhbHVlcy5mb3JtYXQSTWVhY2ggdmFsdWUgbXVzdCBiZSAxLTY0IGNoYXJzIGZyb20gW0EtWmEtejAtOS5fOiotXSAobm8gc3BhY2VzL2NvbnRyb2wgY2hhcnMpGlB0aGlzLmFsbCh0LCB0LnNpemUoKSA+PSAxICYmIHQuc2l6ZSgpIDw9IDY0ICYmIHQubWF0Y2hlcygnXltBLVphLXowLTkuXzoqLV0rJCcpKZIBAhBAIsACCg1SZXNvdXJjZVF1ZXJ5EgsKA3ZlchgBIAEoCRIKCgJpZBgCIAEoCRIlCglyZXF1ZXN0ZXIYAyABKAsyEi5yYW1wLnYxLlJlcXVlc3RlchIXCgR1cmlzGAggAygJQgm6SAaSAQMQgAISPwoXYWNjZXB0YWJsZV9yZXN0cmljdGlvbnMYCSADKAsyHi5yYW1wLnYxLkFjY2VwdGFibGVSZXN0cmljdGlvbhIwCghkZWFkbGluZRgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkgAiAEBEhoKEnN1cHBvcnRlZF9wcm9maWxlcxgHIAMoCRIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUILCglfZGVhZGxpbmUi+AEKEFJlc291cmNlUmVzcG9uc2USCwoDdmVyGAEgASgJEhAKCGV4Y2hhbmdlGAMgASgJEh4KBm9mZmVycxgEIAMoCzIOLnJhbXAudjEuT2ZmZXISKQoMb2ZmZXJfZ3JvdXBzGAUgAygLMhMucmFtcC52MS5PZmZlckdyb3VwEi8KCnJhdGVfbGltaXQYBiABKAsyFi5yYW1wLnYxLlJhdGVMaW1pdEluZm9IAIgBARIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUINCgtfcmF0ZV9saW1pdCKLAgoKT2ZmZXJHcm91cBILCgN1cmkYASABKAkSHgoGb2ZmZXJzGAIgAygLMg4ucmFtcC52MS5PZmZlchI3ChBkaXNjb3ZlcnlfbWV0aG9kGAMgASgOMhgucmFtcC52MS5EaXNjb3ZlcnlNZXRob2RIAIgBARI4Cg5hYnNlbmNlX3JlYXNvbhgEIAEoDjIbLnJhbXAudjEuT2ZmZXJBYnNlbmNlUmVhc29uSAGIAQESNQoTcmVzdHJpY3Rpb25fZmlsdGVycxgFIAMoDjIYLnJhbXAudjEuUmVzdHJpY3Rpb25LaW5kQhMKEV9kaXNjb3ZlcnlfbWV0aG9kQhEKD19hYnNlbmNlX3JlYXNvbiKaAQoNUmF0ZUxpbWl0SW5mbxINCgVsaW1pdBgBIAEoBRIRCglyZW1haW5pbmcYAiABKAUSLAoIcmVzZXRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KBndpbmRvdxgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkgAiAEBQgkKB193aW5kb3ci0AEKFVN1YnNjcmlwdGlvblF1b3RhSW5mbxIXCg9zdWJzY3JpcHRpb25faWQYASABKAkSEwoLcXVvdGFfbGltaXQYAiABKAUSEgoKcXVvdGFfdXNlZBgDIAEoBRIXCg9xdW90YV9yZW1haW5pbmcYBCABKAUSMgoJcmVzZXRzX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEhEKBHVuaXQYBiABKAlIAYgBAUIMCgpfcmVzZXRzX2F0QgcKBV91bml0IoYGCgVPZmZlchIQCghvZmZlcl9pZBgBIAEoCRISCgV0aXRsZRgCIAEoCUgAiAEBEiEKB3ByaWNpbmcYAyABKAsyEC5yYW1wLnYxLlByaWNpbmcSMAoPZGVsaXZlcnlfbWV0aG9kGAQgASgOMhcucmFtcC52MS5EZWxpdmVyeU1ldGhvZBI0CglyZXBvcnRpbmcYBSABKAsyHC5yYW1wLnYxLlJlcG9ydGluZ09ibGlnYXRpb25IAYgBARIzCgpleHBpcmVzX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgCiAEBEjAKCGlkZW50aXR5GAcgASgLMhkucmFtcC52MS5SZXNvdXJjZUlkZW50aXR5SAOIAQESEQoJc2lnbmF0dXJlGAkgASgJEhsKE3NpZ25hdHVyZV9hbGdvcml0aG0YCiABKAkSHAoPc3Vic2NyaXB0aW9uX2lkGAsgASgJSASIAQESFgoOaWFiX2NhdGVnb3JpZXMYDSADKAkSMgoMYXR0ZXN0YXRpb25zGA4gAygLMhwucmFtcC52MS5SZXNvdXJjZUF0dGVzdGF0aW9uEjMKCmRhdGFfYXNfb2YYECABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAWIAQESOgoSc3Vic2NyaXB0aW9uX3F1b3RhGBEgAygLMh4ucmFtcC52MS5TdWJzY3JpcHRpb25RdW90YUluZm8SIgoIcHJldmlld3MYEiADKAsyEC5yYW1wLnYxLlByZXZpZXcSIwoFdGVybXMYEyADKAsyFC5yYW1wLnYxLkxpY2Vuc2VUZXJtEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQggKBl90aXRsZUIMCgpfcmVwb3J0aW5nQg0KC19leHBpcmVzX2F0QgsKCV9pZGVudGl0eUISChBfc3Vic2NyaXB0aW9uX2lkQg0KC19kYXRhX2FzX29mIsUEChBSZXNvdXJjZUlkZW50aXR5EhoKDWNhbm9uaWNhbF91cmwYASABKAlIAIgBARIQCgNkb2kYAiABKAlIAYgBARIWCglpcHRjX2d1aWQYAyABKAlIAogBARIRCgRpc25pGAQgASgJSAOIAQESGQoMY29udGVudF9oYXNoGAUgASgJSASIAQESGAoLaGFzaF9tZXRob2QYBiABKAlIBYgBARJCChNyZXNvdXJjZV9tdXRhYmlsaXR5GAggASgOMhsucmFtcC52MS5SZXNvdXJjZU11dGFiaWxpdHlCCLpIBYIBAiAAEhoKDWMycGFfbWFuaWZlc3QYByABKAlIBogBARItCgtjMnBhX3N0YXR1cxgJIAEoDjITLnJhbXAudjEuQzJQQVN0YXR1c0gHiAEBEhkKDHNvZnRfYmluZGluZxgKIAEoCUgIiAEBEiAKE3NvZnRfYmluZGluZ19tZXRob2QYCyABKAlICYgBARIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUIQCg5fY2Fub25pY2FsX3VybEIGCgRfZG9pQgwKCl9pcHRjX2d1aWRCBwoFX2lzbmlCDwoNX2NvbnRlbnRfaGFzaEIOCgxfaGFzaF9tZXRob2RCEAoOX2MycGFfbWFuaWZlc3RCDgoMX2MycGFfc3RhdHVzQg8KDV9zb2Z0X2JpbmRpbmdCFgoUX3NvZnRfYmluZGluZ19tZXRob2QirgEKE1Jlc291cmNlQXR0ZXN0YXRpb24SEAoIdmVyaWZpZXIYASABKAkSCwoDa2lkGAIgASgJEi8KC2F0dGVzdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBILCgN1cmkYBCABKAkSJwoGY2xhaW1zGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIRCglzaWduYXR1cmUYBiABKAkirwQKB0xpY2Vuc2USEAoDdXJpGAEgASgJSACIAQESDwoCaWQYAiABKAlIAYgBARIRCgRuYW1lGAMgASgJSAKIAQESFgoJaW1tdXRhYmxlGAQgASgISAOIAQESogIKCnVyaV9kaWdlc3QYBSABKAlCiAK6SIQCugGAAgoZbGljZW5zZS51cmlfZGlnZXN0LmZvcm1hdBJadXJpX2RpZ2VzdCBtdXN0IGJlIHNoYTI1Njovc2hhMzg0Oi9zaGE1MTI6IGZvbGxvd2VkIGJ5IGEgaGV4IGRpZ2VzdCBvZiB0aGUgbWF0Y2hpbmcgbGVuZ3RoGoYBdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15zaGEyNTY6WzAtOWEtZl17NjR9JCcpIHx8IHRoaXMubWF0Y2hlcygnXnNoYTM4NDpbMC05YS1mXXs5Nn0kJykgfHwgdGhpcy5tYXRjaGVzKCdec2hhNTEyOlswLTlhLWZdezEyOH0kJylIBIgBATp8ukh5GncKIGxpY2Vuc2UuZGlnZXN0X3JlcXVpcmVkX3dpdGhfdXJpEip1cmlfZGlnZXN0IGlzIHJlcXVpcmVkIHdoZW5ldmVyIHVyaSBpcyBzZXQaJ3RoaXMudXJpID09ICcnIHx8IHRoaXMudXJpX2RpZ2VzdCAhPSAnJ0IGCgRfdXJpQgUKA19pZEIHCgVfbmFtZUIMCgpfaW1tdXRhYmxlQg0KC191cmlfZGlnZXN0IrYFCgtSZXN0cmljdGlvbhIwCgRraW5kGAEgASgOMhgucmFtcC52MS5SZXN0cmljdGlvbktpbmRCCLpIBYIBAiAAEuABCglwZXJtaXR0ZWQYAiADKAlCzAG6SMgBugG/AQoccmVzdHJpY3Rpb24ucGVybWl0dGVkLmZvcm1hdBJNZWFjaCB0b2tlbiBtdXN0IGJlIDEtNjQgY2hhcnMgZnJvbSBbQS1aYS16MC05Ll86Ki1dIChubyBzcGFjZXMvY29udHJvbCBjaGFycykaUHRoaXMuYWxsKHQsIHQuc2l6ZSgpID49IDEgJiYgdC5zaXplKCkgPD0gNjQgJiYgdC5tYXRjaGVzKCdeW0EtWmEtejAtOS5fOiotXSskJykpkgECEEAS4gEKCnByb2hpYml0ZWQYAyADKAlCzQG6SMkBugHAAQodcmVzdHJpY3Rpb24ucHJvaGliaXRlZC5mb3JtYXQSTWVhY2ggdG9rZW4gbXVzdCBiZSAxLTY0IGNoYXJzIGZyb20gW0EtWmEtejAtOS5fOiotXSAobm8gc3BhY2VzL2NvbnRyb2wgY2hhcnMpGlB0aGlzLmFsbCh0LCB0LnNpemUoKSA+PSAxICYmIHQuc2l6ZSgpIDw9IDY0ICYmIHQubWF0Y2hlcygnXltBLVphLXowLTkuXzoqLV0rJCcpKZIBAhBAEhAKCGFkdmlzb3J5GAQgASgIOpoBukiWARqTAQopcmVzdHJpY3Rpb24ucGVybWl0dGVkX3Byb2hpYml0ZWRfZGlzam9pbnQSNmEgdG9rZW4gY2Fubm90IGFwcGVhciBpbiBib3RoIHBlcm1pdHRlZCBhbmQgcHJvaGliaXRlZBoudGhpcy5wZXJtaXR0ZWQuYWxsKHAsICEocCBpbiB0aGlzLnByb2hpYml0ZWQpKSLLAwoFUXVvdGES+QIKBm1ldHJpYxgBIAEoCULoArpI5QG6Ad0BChNxdW90YS5tZXRyaWMuZm9ybWF0EmNtZXRyaWMgbXVzdCBiZSBhIGxvd2VyY2FzZS1kYXNoZWQgdG9rZW4gb3IgdmVuZG9yOm5hbWVzcGFjZWQgKG5vIHNwYWNlcy9jb250cm9sIGNoYXJzLCDiiaQ2NCBjaGFycykaYXRoaXMgIT0gJycgJiYgKHRoaXMubWF0Y2hlcygnXlthLXowLTktXSskJykgfHwgdGhpcy5tYXRjaGVzKCdeW0EtWmEtejAtOS5fLV0rOltBLVphLXowLTkuXy1dKyQnKSlyAhhAirUYDWRpc3BsYXktd29yZHOKtRgLaW1wcmVzc2lvbnOKtRgGdG9rZW5zirUYDGlucHV0LXRva2Vuc4q1GBJ1bml0cy1tYW51ZmFjdHVyZWSKtRgIYWNjZXNzZXOKtRgGY29waWVzirUYBXNlYXRzmrUYDHF1b3RhbWV0cmljcxIWCgVsaW1pdBgCIAEoA0IHukgEIgIoARIuCgZ3aW5kb3cYAyABKA4yFC5yYW1wLnYxLlF1b3RhV2luZG93Qgi6SAWCAQIgACLzAwoKT2JsaWdhdGlvbhIvCgRraW5kGAEgASgOMhcucmFtcC52MS5PYmxpZ2F0aW9uS2luZEIIukgFggECIAASNQoHdHJpZ2dlchgCIAEoDjIaLnJhbXAudjEuT2JsaWdhdGlvblRyaWdnZXJCCLpIBYIBAiAAEiwKDXNjb3BlX2xpY2Vuc2UYAyABKAsyEC5yYW1wLnYxLkxpY2Vuc2VIAIgBARITCgZkZXRhaWwYBCABKAlIAYgBATqcArpImAIalQIKLW9ibGlnYXRpb24uc2hhcmVfYWxpa2UucmVxdWlyZXNfc2NvcGVfbGljZW5zZRJEU0hBUkVfQUxJS0UgcmVxdWlyZXMgc2NvcGVfbGljZW5zZSB0byBpZGVudGlmeSBhIGxpY2Vuc2UgKGlkIG9yIHVyaSkanQF0aGlzLmtpbmQgIT0gcmFtcC52MS5PYmxpZ2F0aW9uS2luZC5PQkxJR0FUSU9OX0tJTkRfU0hBUkVfQUxJS0UgfHwgKGhhcyh0aGlzLnNjb3BlX2xpY2Vuc2UpICYmICh0aGlzLnNjb3BlX2xpY2Vuc2UuaWQgIT0gJycgfHwgdGhpcy5zY29wZV9saWNlbnNlLnVyaSAhPSAnJykpQhAKDl9zY29wZV9saWNlbnNlQgkKB19kZXRhaWwiggYKC0xpY2Vuc2VUZXJtEiYKB2xpY2Vuc2UYASABKAsyEC5yYW1wLnYxLkxpY2Vuc2VIAIgBARIzCglzZW1hbnRpY3MYAiABKA4yFi5yYW1wLnYxLlRlcm1TZW1hbnRpY3NCCLpIBYIBAiAAEioKDHJlc3RyaWN0aW9ucxgDIAMoCzIULnJhbXAudjEuUmVzdHJpY3Rpb24SHgoGcXVvdGFzGAQgAygLMg4ucmFtcC52MS5RdW90YRIoCgtvYmxpZ2F0aW9ucxgFIAMoCzITLnJhbXAudjEuT2JsaWdhdGlvbhIuCgdwcmljaW5nGAYgASgLMhAucmFtcC52MS5QcmljaW5nQga6SAPIAQFIAYgBARIYCgZzY29wZXMYByADKAlCCLpIBZIBAhBAEhcKCnBhcnRfbGFiZWwYCCABKAlIAogBATqVA7pIkQMa4gEKKGxpY2Vuc2VfdGVybS5yZWZlcmVuY2Vfb25seS5yZXF1aXJlc191cmkSPlJFRkVSRU5DRV9PTkxZIHRlcm1zIG11c3QgY2FycnkgYSBsaWNlbnNlIHdpdGggYSBub24tZW1wdHkgdXJpGnZ0aGlzLnNlbWFudGljcyAhPSByYW1wLnYxLlRlcm1TZW1hbnRpY3MuVEVSTV9TRU1BTlRJQ1NfUkVGRVJFTkNFX09OTFkgfHwgKGhhcyh0aGlzLmxpY2Vuc2UpICYmIHRoaXMubGljZW5zZS51cmkgIT0gJycpGqkBCiVsaWNlbnNlX3Rlcm0ub25lX3Jlc3RyaWN0aW9uX3Blcl9raW5kEithdCBtb3N0IG9uZSByZXN0cmljdGlvbiBpcyBhbGxvd2VkIHBlciBraW5kGlN0aGlzLnJlc3RyaWN0aW9ucy5hbGwociwgdGhpcy5yZXN0cmljdGlvbnMuZmlsdGVyKG8sIG8ua2luZCA9PSByLmtpbmQpLnNpemUoKSA8PSAxKUIKCghfbGljZW5zZUIKCghfcHJpY2luZ0INCgtfcGFydF9sYWJlbCKoAQoHUHJldmlldxILCgN1cmwYASABKAkSEgoKbWVkaWFfdHlwZRgCIAEoCRISCgV3aWR0aBgDIAEoBUgAiAEBEhMKBmhlaWdodBgEIAEoBUgBiAEBEhUKCGR1cmF0aW9uGAUgASgFSAKIAQESEQoEc2l6ZRgGIAEoCUgDiAEBQggKBl93aWR0aEIJCgdfaGVpZ2h0QgsKCV9kdXJhdGlvbkIHCgVfc2l6ZSKvCAoHUHJpY2luZxIuCgVtb2RlbBgBIAEoDjIVLnJhbXAudjEuUHJpY2luZ01vZGVsQgi6SAWCAQIgABIMCgRyYXRlGAIgASgBEhAKCGN1cnJlbmN5GAMgASgJEhYKCXVuaXRfY29zdBgEIAEoAUgAiAEBEh8KEmVzdGltYXRlZF9xdWFudGl0eRgFIAEoBUgBiAEBEiQKF2xpY2Vuc2VfZHVyYXRpb25fbW9udGhzGAcgASgFSAKIAQESwgMKBHVuaXQYCCABKAlCrgO6SOkBugHhAQoTcHJpY2luZy51bml0LmZvcm1hdBJpdW5pdCBtdXN0IGJlIGVtcHR5LCBhIGxvd2VyY2FzZS1kYXNoZWQgdG9rZW4sIG9yIHZlbmRvcjpuYW1lc3BhY2VkIChubyBzcGFjZXMvY29udHJvbCBjaGFycywg4omkNjQgY2hhcnMpGl90aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlthLXowLTktXSskJykgfHwgdGhpcy5tYXRjaGVzKCdeW0EtWmEtejAtOS5fLV0rOltBLVphLXowLTkuXy1dKyQnKXICGECKtRgHZmV0Y2hlc4q1GAhhY2Nlc3Nlc4q1GAZ0b2tlbnOKtRgFY2FsbHOKtRgFcGFnZXOKtRgHc2Vjb25kc4q1GAdtaW51dGVzirUYB3JlY29yZHOKtRgHc3RyZWFtc4q1GAZpbWFnZXOKtRgFc2VhdHOKtRgSdW5pdHMtbWFudWZhY3R1cmVkirUYCmNoYXJhY3RlcnOKtRgFYnl0ZXOKtRgFaXRlbXOKtRgFc3Eta22atRgMcHJpY2luZ3VuaXRzSAOIAQESLwoIbWV0ZXJpbmcYCSABKA4yGC5yYW1wLnYxLlByaWNpbmdNZXRlcmluZ0gEiAEBOqcCukijAhqXAQoecHJpY2luZy5wZXJfdW5pdC5yZXF1aXJlc191bml0Eid1bml0IGlzIHJlcXVpcmVkIHdoZW4gbW9kZWwgaXMgUEVSX1VOSVQaTHRoaXMubW9kZWwgIT0gcmFtcC52MS5QcmljaW5nTW9kZWwuUFJJQ0lOR19NT0RFTF9QRVJfVU5JVCB8fCB0aGlzLnVuaXQgIT0gJycahgEKFnByaWNpbmcuZnJlZS56ZXJvX3JhdGUSIXJhdGUgbXVzdCBiZSAwIHdoZW4gbW9kZWwgaXMgRlJFRRpJdGhpcy5tb2RlbCAhPSByYW1wLnYxLlByaWNpbmdNb2RlbC5QUklDSU5HX01PREVMX0ZSRUUgfHwgdGhpcy5yYXRlID09IDAuMEIMCgpfdW5pdF9jb3N0QhUKE19lc3RpbWF0ZWRfcXVhbnRpdHlCGgoYX2xpY2Vuc2VfZHVyYXRpb25fbW9udGhzQgcKBV91bml0QgsKCV9tZXRlcmluZyKwAgoJUmVxdWVzdGVyEgoKAmlkGAEgASgJEg4KBmRvbWFpbhgCIAEoCRIuCgR0eXBlGAMgASgOMhYucmFtcC52MS5SZXF1ZXN0ZXJUeXBlQgi6SAWCAQIgABIRCgRuYW1lGAQgASgJSACIAQESGAoLYmlsbGluZ19yZWYYBSABKAlIAYgBARIYCgZzY29wZXMYBiADKAlCCLpIBZIBAhBAEiwKCmRlbGVnYXRpb24YByABKAsyEy5yYW1wLnYxLkRlbGVnYXRpb25IAogBARIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUIHCgVfbmFtZUIOCgxfYmlsbGluZ19yZWZCDQoLX2RlbGVnYXRpb24i0gMKCkRlbGVnYXRpb24SGAoQcHJpbmNpcGFsX2RvbWFpbhgBIAEoCRIUCgxwcmluY2lwYWxfaWQYAiABKAkSDgoGc2NvcGVzGAMgAygJEi4KCmV4cGlyZXNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhwKD21heF9zcGVuZF9jZW50cxgFIAEoA0gAiAEBEhkKDG1heF9hY2Nlc3NlcxgJIAEoBUgBiAEBEjQKDHF1b3RhX3BlcmlvZBgKIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkgCiAEBEg0KBXRva2VuGAYgASgMEhQKDHRva2VuX2Zvcm1hdBgHIAEoCRIbCg5yZXZvY2F0aW9uX3VyaRgIIAEoCUgDiAEBEhMKBmlzc3VlchgLIAEoCUgEiAEBEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQhIKEF9tYXhfc3BlbmRfY2VudHNCDwoNX21heF9hY2Nlc3Nlc0IPCg1fcXVvdGFfcGVyaW9kQhEKD19yZXZvY2F0aW9uX3VyaUIJCgdfaXNzdWVyIqUCChJUcmFuc2FjdGlvblJlcXVlc3QSCwoDdmVyGAEgASgJEiAKD2lkZW1wb3RlbmN5X2tleRgCIAEoCUIHukgEcgIQARIVCghvZmZlcl9pZBgDIAEoCUgAiAEBEiUKCXJlcXVlc3RlchgEIAEoCzISLnJhbXAudjEuUmVxdWVzdGVyEhwKD29mZmVyX3NpZ25hdHVyZRgGIAEoCUgBiAEBEicKBWl0ZW1zGAcgAygLMhgucmFtcC52MS5UcmFuc2FjdGlvbkl0ZW0SJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCCwoJX29mZmVyX2lkQhIKEF9vZmZlcl9zaWduYXR1cmUiPAoPVHJhbnNhY3Rpb25JdGVtEhAKCG9mZmVyX2lkGAEgASgJEhcKD29mZmVyX3NpZ25hdHVyZRgCIAEoCSLbBgoTVHJhbnNhY3Rpb25SZXNwb25zZRILCgN2ZXIYASABKAkSGwoOdHJhbnNhY3Rpb25faWQYAyABKAlIAIgBARIXCgpiaWxsaW5nX2lkGAQgASgJSAGIAQESGwoOcmVzb3VyY2VfdGl0bGUYBSABKAlIAogBARIgCgRjb3N0GAYgASgLMg0ucmFtcC52MS5Db3N0SAOIAQESMAoPZGVsaXZlcnlfbWV0aG9kGAcgASgOMhcucmFtcC52MS5EZWxpdmVyeU1ldGhvZBI/ChRyZXBvcnRpbmdfb2JsaWdhdGlvbhgIIAEoCzIcLnJhbXAudjEuUmVwb3J0aW5nT2JsaWdhdGlvbkgEiAEBEjMKCmV4cGlyZXNfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAWIAQESGwoTYWdlbnRfaWRlbnRpdHlfaGFzaBgKIAEoCRIfChJyZXRyaWV2YWxfZW5kcG9pbnQYEiABKAlIBogBARIcCg9zdWJzY3JpcHRpb25faWQYDCABKAlIB4gBARIzChdzdWJzY3JpcHRpb25fdW5pdF92YWx1ZRgQIAEoCzINLnJhbXAudjEuQ29zdEgIiAEBEi0KBWl0ZW1zGA0gAygLMh4ucmFtcC52MS5UcmFuc2FjdGlvblJlc3VsdEl0ZW0SJgoKdG90YWxfY29zdBgOIAEoCzINLnJhbXAudjEuQ29zdEgJiAEBEjoKEnN1YnNjcmlwdGlvbl9xdW90YRgRIAMoCzIeLnJhbXAudjEuU3Vic2NyaXB0aW9uUXVvdGFJbmZvEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQhEKD190cmFuc2FjdGlvbl9pZEINCgtfYmlsbGluZ19pZEIRCg9fcmVzb3VyY2VfdGl0bGVCBwoFX2Nvc3RCFwoVX3JlcG9ydGluZ19vYmxpZ2F0aW9uQg0KC19leHBpcmVzX2F0QhUKE19yZXRyaWV2YWxfZW5kcG9pbnRCEgoQX3N1YnNjcmlwdGlvbl9pZEIaChhfc3Vic2NyaXB0aW9uX3VuaXRfdmFsdWVCDQoLX3RvdGFsX2Nvc3QirAUKFVRyYW5zYWN0aW9uUmVzdWx0SXRlbRIQCghvZmZlcl9pZBgBIAEoCRIWCg50cmFuc2FjdGlvbl9pZBgCIAEoCRISCgpiaWxsaW5nX2lkGAMgASgJEhsKDnJlc291cmNlX3RpdGxlGAQgASgJSACIAQESGwoEY29zdBgFIAEoCzINLnJhbXAudjEuQ29zdBIcCg9zdWJzY3JpcHRpb25faWQYBiABKAlIAYgBARIzChdzdWJzY3JpcHRpb25fdW5pdF92YWx1ZRgLIAEoCzINLnJhbXAudjEuQ29zdEgCiAEBEjEKDWRlbmlhbF9yZWFzb24YByABKA4yFS5yYW1wLnYxLkRlbmlhbFJlYXNvbkgDiAEBEjgKFnJlc3RyaWN0aW9uX21pc21hdGNoZXMYDSADKA4yGC5yYW1wLnYxLlJlc3RyaWN0aW9uS2luZBIzCgpleHBpcmVzX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEh8KEnJldHJpZXZhbF9lbmRwb2ludBgMIAEoCUgFiAEBEjAKD2RlbGl2ZXJ5X21ldGhvZBgJIAEoDjIXLnJhbXAudjEuRGVsaXZlcnlNZXRob2QSPwoUcmVwb3J0aW5nX29ibGlnYXRpb24YCiABKAsyHC5yYW1wLnYxLlJlcG9ydGluZ09ibGlnYXRpb25IBogBAUIRCg9fcmVzb3VyY2VfdGl0bGVCEgoQX3N1YnNjcmlwdGlvbl9pZEIaChhfc3Vic2NyaXB0aW9uX3VuaXRfdmFsdWVCEAoOX2RlbmlhbF9yZWFzb25CDQoLX2V4cGlyZXNfYXRCFQoTX3JldHJpZXZhbF9lbmRwb2ludEIXChVfcmVwb3J0aW5nX29ibGlnYXRpb24iTgoEQ29zdBIOCgZhbW91bnQYASABKAESEAoIY3VycmVuY3kYAiABKAkSFgoJdW5pdF9jb3N0GAMgASgBSACIAQFCDAoKX3VuaXRfY29zdCKuAQoUUHVzaFJlc291cmNlc1JlcXVlc3QSCwoDdmVyGAEgASgJEhEKCXRlbmFudF9pZBgCIAEoCRInCgdlbnRyaWVzGAMgAygLMhYucmFtcC52MS5SZXNvdXJjZUVudHJ5EhEKCWNhbGxlcl9pZBgEIAEoCRIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCSKGBQoNUmVzb3VyY2VFbnRyeRIOCgZkb21haW4YASABKAkSDAoEcGF0aBgCIAEoCRIXCgpjb250ZW50X2lkGAMgASgJSACIAQESEgoFdGl0bGUYBCABKAlIAYgBARIXCgp3b3JkX2NvdW50GAUgASgFSAKIAQESHwoSZXN0aW1hdGVkX3F1YW50aXR5GAYgASgFSAOIAQESGQoMY29udGVudF9oYXNoGAcgASgJSASIAQESGAoLaGFzaF9tZXRob2QYCCABKAlIBYgBARItCgZzb3VyY2UYCSABKA4yGC5yYW1wLnYxLkluZ2VzdGlvblNvdXJjZUgGiAEBEh4KEXByb3ZlbmFuY2Vfc291cmNlGAogASgJSAeIAQESPQoUcHJvdmVuYW5jZV90aW1lc3RhbXAYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAiIAQESMgoMYXR0ZXN0YXRpb25zGAwgAygLMhwucmFtcC52MS5SZXNvdXJjZUF0dGVzdGF0aW9uEiMKBXRlcm1zGA0gAygLMhQucmFtcC52MS5MaWNlbnNlVGVybRIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUINCgtfY29udGVudF9pZEIICgZfdGl0bGVCDQoLX3dvcmRfY291bnRCFQoTX2VzdGltYXRlZF9xdWFudGl0eUIPCg1fY29udGVudF9oYXNoQg4KDF9oYXNoX21ldGhvZEIJCgdfc291cmNlQhQKEl9wcm92ZW5hbmNlX3NvdXJjZUIXChVfcHJvdmVuYW5jZV90aW1lc3RhbXAilgEKFVB1c2hSZXNvdXJjZXNSZXNwb25zZRILCgN2ZXIYASABKAkSEAoIYWNjZXB0ZWQYAiABKAUSEAoIcmVqZWN0ZWQYAyABKAUSEAoId2FybmluZ3MYBCADKAkSJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAkiRwoWUmVtb3ZlUmVzb3VyY2VzUmVxdWVzdBILCgN2ZXIYASABKAkSEQoJdGVuYW50X2lkGAIgASgJEg0KBXBhdGhzGAMgAygJIjcKF1JlbW92ZVJlc291cmNlc1Jlc3BvbnNlEgsKA3ZlchgBIAEoCRIPCgdyZW1vdmVkGAIgASgFIjcKFVJlZnJlc2hDYXRhbG9nUmVxdWVzdBILCgN2ZXIYASABKAkSEQoJdGVuYW50X2lkGAIgASgJIjYKFlJlZnJlc2hDYXRhbG9nUmVzcG9uc2USCwoDdmVyGAEgASgJEg8KB3N0YXJ0ZWQYAiABKAgi2wEKE1JlcG9ydGluZ09ibGlnYXRpb24SEAoIcmVxdWlyZWQYASABKAgSLgoGd2luZG93GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uSACIAQESFQoIZW5kcG9pbnQYAyABKAlIAYgBARIXCg9yZXF1aXJlZF9maWVsZHMYBCADKAkSJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCCQoHX3dpbmRvd0ILCglfZW5kcG9pbnQiuwIKC1VzYWdlUmVwb3J0EgsKA3ZlchgBIAEoCRIgCg9pZGVtcG90ZW5jeV9rZXkYAiABKAlCB7pIBHICEAESFgoOdHJhbnNhY3Rpb25faWQYAyABKAkSEgoKYmlsbGluZ19pZBgEIAEoCRIdCgV1c2FnZRgFIAEoCzIOLnJhbXAudjEuVXNhZ2USLQoJdGltZXN0YW1wGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIVCghleGNoYW5nZRgIIAEoCUgAiAEBEiMKBmFzc2V0cxgJIAMoCzITLnJhbXAudjEuVXNhZ2VBc3NldBIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUILCglfZXhjaGFuZ2UirAEKEUF0dHJpYnV0aW9uRGV0YWlsEhoKDWRpc3BsYXllZF91cmwYASABKAlIAIgBARIsCgZmb3JtYXQYAiABKA4yFy5yYW1wLnYxLkNpdGF0aW9uRm9ybWF0SAGIAQESHAoPdmlzaWJsZV90b191c2VyGAMgASgISAKIAQFCEAoOX2Rpc3BsYXllZF91cmxCCQoHX2Zvcm1hdEISChBfdmlzaWJsZV90b191c2VyIo8ECgVVc2FnZRIQCghmdW5jdGlvbhgBIAMoCRINCgVzdWJmbhgCIAMoCRIZChFjb25zdW1lZF9xdWFudGl0eRgDIAEoBRIeChFkaXNwbGF5ZWRfdG9fdXNlchgEIAEoCEgAiAEBEh4KEWNpdGF0aW9uX2luY2x1ZGVkGAUgASgISAGIAQESLwoLYXR0cmlidXRpb24YBiADKAsyGi5yYW1wLnYxLkF0dHJpYnV0aW9uRGV0YWlsEpoCCg1jb25zdW1lZF91bml0GAggASgJQv0Bukj5AboB8QEKGnVzYWdlLmNvbnN1bWVkX3VuaXQuZm9ybWF0EnJjb25zdW1lZF91bml0IG11c3QgYmUgZW1wdHksIGEgbG93ZXJjYXNlLWRhc2hlZCB0b2tlbiwgb3IgdmVuZG9yOm5hbWVzcGFjZWQgKG5vIHNwYWNlcy9jb250cm9sIGNoYXJzLCDiiaQ2NCBjaGFycykaX3RoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeW2EtejAtOS1dKyQnKSB8fCB0aGlzLm1hdGNoZXMoJ15bQS1aYS16MC05Ll8tXSs6W0EtWmEtejAtOS5fLV0rJCcpcgIYQEgCiAEBQhQKEl9kaXNwbGF5ZWRfdG9fdXNlckIUChJfY2l0YXRpb25faW5jbHVkZWRCEAoOX2NvbnN1bWVkX3VuaXQiXwoKVXNhZ2VBc3NldBILCgN1cmkYASABKAkSEgoFdGl0bGUYAiABKAlIAIgBARIXCgpwYWNrYWdlX2lkGAMgASgJSAGIAQFCCAoGX3RpdGxlQg0KC19wYWNrYWdlX2lkInEKE1VzYWdlUmVwb3J0UmVzcG9uc2USCwoDdmVyGAEgASgJEhEKCXJlcG9ydF9pZBgDIAEoCRIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCSKtAwoLUkFNUFJlcXVlc3QSCwoDdmVyGAEgASgJEgoKAmlkGAIgASgJEiUKCXJlcXVlc3RlchgDIAEoCzISLnJhbXAudjEuUmVxdWVzdGVyEhcKBHVyaXMYCCADKAlCCbpIBpIBAxCAAhI/ChdhY2NlcHRhYmxlX3Jlc3RyaWN0aW9ucxgJIAMoCzIeLnJhbXAudjEuQWNjZXB0YWJsZVJlc3RyaWN0aW9uEjUKC2NvbnN0cmFpbnRzGAQgASgLMhsucmFtcC52MS5SZXF1ZXN0Q29uc3RyYWludHNIAIgBARIaChJzdXBwb3J0ZWRfcHJvZmlsZXMYBSADKAkSEgoFcXVlcnkYBiABKAlIAYgBARI0Cg5zZWFyY2hfZmlsdGVycxgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAogBARIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUIOCgxfY29uc3RyYWludHNCCAoGX3F1ZXJ5QhEKD19zZWFyY2hfZmlsdGVycyKwBAoSUmVxdWVzdENvbnN0cmFpbnRzEhEKCWV4Y2hhbmdlcxgBIAMoCRIlCgltYXhfcHJpY2UYAiABKAsyDS5yYW1wLnYxLkNvc3RIAIgBARIaCg1tYXhfdW5pdF9jb3N0GAMgASgBSAGIAQESNAoTZGVsaXZlcnlfcHJlZmVyZW5jZRgEIAMoDjIXLnJhbXAudjEuRGVsaXZlcnlNZXRob2QSHgoRcmVwb3J0aW5nX2NhcGFibGUYBSABKAhIAogBARIbChNwcmVmZXJyZWRfZXhjaGFuZ2VzGAYgAygJEhkKDGJ1ZGdldF9zY29wZRgHIAEoCUgDiAEBEikKDXBlcmlvZF9idWRnZXQYCCABKAsyDS5yYW1wLnYxLkNvc3RIBIgBARI1Cg1idWRnZXRfcGVyaW9kGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uSAWIAQESNAoMbWF4X2RhdGFfYWdlGAogASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uSAaIAQESFQoIbWF4X2hvcHMYCyABKAVIB4gBAUIMCgpfbWF4X3ByaWNlQhAKDl9tYXhfdW5pdF9jb3N0QhQKEl9yZXBvcnRpbmdfY2FwYWJsZUIPCg1fYnVkZ2V0X3Njb3BlQhAKDl9wZXJpb2RfYnVkZ2V0QhAKDl9idWRnZXRfcGVyaW9kQg8KDV9tYXhfZGF0YV9hZ2VCCwoJX21heF9ob3BzIn8KCkpzb25XZWJLZXkSCwoDa2lkGAEgASgJEgsKA2t0eRgCIAEoCRILCgNjcnYYAyABKAkSCwoDdXNlGAQgASgJEgsKA2FsZxgFIAEoCRIJCgF4GAYgASgJEhIKCm5vdF9iZWZvcmUYByABKAkSEQoJbm90X2FmdGVyGAggASgJIsIJChFXZWxsS25vd25NYW5pZmVzdBILCgN2ZXIYASABKAkSJQoEcm9sZRgCIAEoDjINLnJhbXAudjEuUm9sZUIIukgFggECIAASDgoGZG9tYWluGAMgASgJEhQKB2NvbnRhY3QYBCABKAlIAIgBARIoCgtwdWJsaWNfa2V5cxgFIAMoCzITLnJhbXAudjEuSnNvbldlYktleRIdChBpbnZhbGlkYXRpb25fdXJsGAYgASgJSAGIAQESLgoJZXhjaGFuZ2VzGAcgAygLMhsucmFtcC52MS5BdXRob3JpemVkRXhjaGFuZ2USOQoUY2F0YWxvZ19jb250cmlidXRvcnMYCCADKAsyGy5yYW1wLnYxLkNhdGFsb2dDb250cmlidXRvchIRCgRuYW1lGAkgASgJSAKIAQESFQoIb3BlcmF0b3IYCiABKAlIA4gBARIcCg9vcGVyYXRvcl9kb21haW4YCyABKAlIBIgBARIVCghlbmRwb2ludBgMIAEoCUgFiAEBEhwKD2hlYWx0aF9lbmRwb2ludBgNIAEoCUgGiAEBEh0KEGNhdGFsb2dfZW5kcG9pbnQYDiABKAlIB4gBARIjChtwcm90b2NvbF92ZXJzaW9uc19zdXBwb3J0ZWQYECADKAkSNwoYcHJpY2luZ19tb2RlbHNfc3VwcG9ydGVkGBEgAygOMhUucmFtcC52MS5QcmljaW5nTW9kZWwSOwoaZGVsaXZlcnlfbWV0aG9kc19zdXBwb3J0ZWQYEiADKA4yFy5yYW1wLnYxLkRlbGl2ZXJ5TWV0aG9kEh4KFmhhc2hfbWV0aG9kc19zdXBwb3J0ZWQYEyADKAkSGgoSYWNjZXB0ZWRfdmVyaWZpZXJzGBQgAygJEhYKCXRlcm1zX3VyaRgVIAEoCUgIiAEBEhgKC3ByaXZhY3lfdXJpGBYgASgJSAmIAQESGgoSc3VwcG9ydGVkX3Byb2ZpbGVzGBcgAygJEjMKFnN1cHBvcnRlZF9hdXRoX21ldGhvZHMYGCADKA4yEy5yYW1wLnYxLkF1dGhNZXRob2QSGAoLb2lkY19pc3N1ZXIYGSABKAlICogBARIgChNnbmFwX2dyYW50X2VuZHBvaW50GBogASgJSAuIAQESGgoNYmFzZV9jdXJyZW5jeRgbIAEoCUgMiAEBEiIKFW1heF9pbnRlcm1lZGlhcnlfaG9wcxgcIAEoBUgNiAEBEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQgoKCF9jb250YWN0QhMKEV9pbnZhbGlkYXRpb25fdXJsQgcKBV9uYW1lQgsKCV9vcGVyYXRvckISChBfb3BlcmF0b3JfZG9tYWluQgsKCV9lbmRwb2ludEISChBfaGVhbHRoX2VuZHBvaW50QhMKEV9jYXRhbG9nX2VuZHBvaW50QgwKCl90ZXJtc191cmlCDgoMX3ByaXZhY3lfdXJpQg4KDF9vaWRjX2lzc3VlckIWChRfZ25hcF9ncmFudF9lbmRwb2ludEIQCg5fYmFzZV9jdXJyZW5jeUIYChZfbWF4X2ludGVybWVkaWFyeV9ob3BzIlEKE0tleUludmFsaWRhdGlvbkxpc3QSKQoFYXNfb2YYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB3Jldm9rZWQYAiADKAkiOgoSQ2F0YWxvZ0NvbnRyaWJ1dG9yEg4KBmRvbWFpbhgBIAEoCRIUCgxyZWxhdGlvbnNoaXAYAiABKAkisQEKEkF1dGhvcml6ZWRFeGNoYW5nZRIOCgZkb21haW4YASABKAkSEAoIZW5kcG9pbnQYAiABKAkSPQoMcmVsYXRpb25zaGlwGAMgASgOMh0ucmFtcC52MS5Qcm92aWRlclJlbGF0aW9uc2hpcEIIukgFggECIAASJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAkiqAUKDFJBTVBSZXNwb25zZRILCgN2ZXIYASABKAkSFgoOdHJhbnNhY3Rpb25faWQYBCABKAkSEgoKYmlsbGluZ19pZBgFIAEoCRIQCghleGNoYW5nZRgGIAEoCRIbCg5yZXNvdXJjZV90aXRsZRgHIAEoCUgAiAEBEhsKBGNvc3QYCCABKAsyDS5yYW1wLnYxLkNvc3QSMAoPZGVsaXZlcnlfbWV0aG9kGAkgASgOMhcucmFtcC52MS5EZWxpdmVyeU1ldGhvZBI/ChRyZXBvcnRpbmdfb2JsaWdhdGlvbhgKIAEoCzIcLnJhbXAudjEuUmVwb3J0aW5nT2JsaWdhdGlvbkgBiAEBEjMKCmV4cGlyZXNfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESHwoScmV0cmlldmFsX2VuZHBvaW50GA0gASgJSAOIAQESIAoTYWdlbnRfaWRlbnRpdHlfaGFzaBgOIAEoCUgEiAEBEiYKCmJyb2tlcl9mZWUYDCABKAsyDS5yYW1wLnYxLkNvc3RIBYgBARI4Cg5hYnNlbmNlX3JlYXNvbhgQIAEoDjIbLnJhbXAudjEuT2ZmZXJBYnNlbmNlUmVhc29uSAaIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCEQoPX3Jlc291cmNlX3RpdGxlQhcKFV9yZXBvcnRpbmdfb2JsaWdhdGlvbkINCgtfZXhwaXJlc19hdEIVChNfcmV0cmlldmFsX2VuZHBvaW50QhYKFF9hZ2VudF9pZGVudGl0eV9oYXNoQg0KC19icm9rZXJfZmVlQhEKD19hYnNlbmNlX3JlYXNvbiKQAwoORGlzcHV0ZVJlcXVlc3QSCwoDdmVyGAEgASgJEiAKD2lkZW1wb3RlbmN5X2tleRgCIAEoCUIHukgEcgIQARIWCg50cmFuc2FjdGlvbl9pZBgDIAEoCRISCgpiaWxsaW5nX2lkGAQgASgJEjAKBnJlYXNvbhgFIAEoDjIWLnJhbXAudjEuRGlzcHV0ZVJlYXNvbkIIukgFggECIAASGAoLZGVzY3JpcHRpb24YBiABKAlIAIgBARIiChVyZWNlaXZlZF9jb250ZW50X2hhc2gYByABKAlIAYgBARIhChRyZWNlaXZlZF9oYXNoX21ldGhvZBgIIAEoCUgCiAEBEhEKCXJlcG9ydF9pZBgJIAEoCRIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUIOCgxfZGVzY3JpcHRpb25CGAoWX3JlY2VpdmVkX2NvbnRlbnRfaGFzaEIXChVfcmVjZWl2ZWRfaGFzaF9tZXRob2QiwgIKD0Rpc3B1dGVSZXNwb25zZRILCgN2ZXIYASABKAkSFwoKZGlzcHV0ZV9pZBgCIAEoCUgAiAEBEjwKFGVzdGltYXRlZF9yZXNvbHV0aW9uGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uSAGIAQESJgoGc3RhdHVzGAUgASgOMhYucmFtcC52MS5EaXNwdXRlU3RhdHVzEjAKCnJlc29sdXRpb24YBiABKA4yFy5yYW1wLnYxLlJlc29sdXRpb25UeXBlSAKIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCDQoLX2Rpc3B1dGVfaWRCFwoVX2VzdGltYXRlZF9yZXNvbHV0aW9uQg0KC19yZXNvbHV0aW9uIpoBChlEb21haW5WZXJpZmljYXRpb25SZXF1ZXN0EgsKA3ZlchgBIAEoCRIOCgZkb21haW4YAiABKAkSFgoJY2FsbGVyX2lkGAMgASgJSACIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCDAoKX2NhbGxlcl9pZCK/AQobRG9tYWluVmVyaWZpY2F0aW9uQ2hhbGxlbmdlEgsKA3ZlchgBIAEoCRINCgV0b2tlbhgCIAEoCRIuCgpleHBpcmVzX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIYChB2ZXJpZmljYXRpb25fdXJsGAQgASgJEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJItYBCh5Eb21haW5WZXJpZmljYXRpb25Db25maXJtYXRpb24SCwoDdmVyGAEgASgJEg4KBmRvbWFpbhgCIAEoCRINCgV0b2tlbhgDIAEoCRIYCgtzaWduaW5nX2tleRgEIAEoCUgAiAEBEhUKCGNkbl90eXBlGAUgASgJSAGIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCDgoMX3NpZ25pbmdfa2V5QgsKCV9jZG5fdHlwZSLJAQoYRG9tYWluVmVyaWZpY2F0aW9uUmVzdWx0EgsKA3ZlchgBIAEoCRITCgZrZXlfaWQYAiABKAlIAIgBARI0Cgt2YWxpZF91bnRpbBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBARIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUIJCgdfa2V5X2lkQg4KDF92YWxpZF91bnRpbCLQBAoLRXJyb3JEZXRhaWwSDwoHbWVzc2FnZRgBIAEoCRIOCgZkb21haW4YAiABKAkSNAoIbWV0YWRhdGEYAyADKAsyIi5yYW1wLnYxLkVycm9yRGV0YWlsLk1ldGFkYXRhRW50cnkSOAoSdHJhbnNhY3Rpb25fZGVuaWFsGAogASgLMhoucmFtcC52MS5UcmFuc2FjdGlvbkRlbmlhbEgAEjYKEWNhdGFsb2dfcmVqZWN0aW9uGAsgASgLMhkucmFtcC52MS5DYXRhbG9nUmVqZWN0aW9uSAASPAoUcmVnaXN0cmF0aW9uX2ZhaWx1cmUYDCABKAsyHC5yYW1wLnYxLlJlZ2lzdHJhdGlvbkZhaWx1cmVIABIyCg9kaXNwdXRlX2ZhaWx1cmUYDSABKAsyFy5yYW1wLnYxLkRpc3B1dGVGYWlsdXJlSAASSQobZG9tYWluX3ZlcmlmaWNhdGlvbl9mYWlsdXJlGA4gASgLMiIucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25GYWlsdXJlSAASPwoWcmV0cmlldmFsX2F1dGhfZmFpbHVyZRgPIAEoCzIdLnJhbXAudjEuUmV0cmlldmFsQXV0aEZhaWx1cmVIABI/ChZ1c2FnZV9yZXBvcnRfcmVqZWN0aW9uGBAgASgLMh0ucmFtcC52MS5Vc2FnZVJlcG9ydFJlamVjdGlvbkgAGi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIICgZyZWFzb24ipAEKEVRyYW5zYWN0aW9uRGVuaWFsEjEKBnJlYXNvbhgBIAEoDjIVLnJhbXAudjEuRGVuaWFsUmVhc29uQgq6SAeCAQQQASAAEjgKFnJlc3RyaWN0aW9uX21pc21hdGNoZXMYAiADKA4yGC5yYW1wLnYxLlJlc3RyaWN0aW9uS2luZBIVCghvZmZlcl9pZBgDIAEoCUgAiAEBQgsKCV9vZmZlcl9pZCJnChBDYXRhbG9nUmVqZWN0aW9uEjsKBnJlYXNvbhgBIAEoDjIfLnJhbXAudjEuQ2F0YWxvZ1JlamVjdGlvblJlYXNvbkIKukgHggEEEAEgABIWCg5yZWplY3RlZF9wYXRocxgCIAMoCSJVChNSZWdpc3RyYXRpb25GYWlsdXJlEj4KBnJlYXNvbhgBIAEoDjIiLnJhbXAudjEuUmVnaXN0cmF0aW9uRmFpbHVyZVJlYXNvbkIKukgHggEEEAEgACJLCg5EaXNwdXRlRmFpbHVyZRI5CgZyZWFzb24YASABKA4yHS5yYW1wLnYxLkRpc3B1dGVGYWlsdXJlUmVhc29uQgq6SAeCAQQQASAAImEKGURvbWFpblZlcmlmaWNhdGlvbkZhaWx1cmUSRAoGcmVhc29uGAEgASgOMigucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25GYWlsdXJlUmVhc29uQgq6SAeCAQQQASAAIlcKFFJldHJpZXZhbEF1dGhGYWlsdXJlEj8KBnJlYXNvbhgBIAEoDjIjLnJhbXAudjEuUmV0cmlldmFsQXV0aEZhaWx1cmVSZWFzb25CCrpIB4IBBBABIAAiVwoUVXNhZ2VSZXBvcnRSZWplY3Rpb24SPwoGcmVhc29uGAEgASgOMiMucmFtcC52MS5Vc2FnZVJlcG9ydFJlamVjdGlvblJlYXNvbkIKukgHggEEEAEgACq2AQoPRGlzY292ZXJ5TWV0aG9kEiAKHERJU0NPVkVSWV9NRVRIT0RfVU5TUEVDSUZJRUQQABIdChlESVNDT1ZFUllfTUVUSE9EX0VYQ0hBTkdFEAESGwoXRElTQ09WRVJZX01FVEhPRF9TRUFSQ0gQAhIjCh9ESVNDT1ZFUllfTUVUSE9EX1JFQ09NTUVOREFUSU9OEAMSIAocRElTQ09WRVJZX01FVEhPRF9TWU5ESUNBVElPThAEKvkCChJPZmZlckFic2VuY2VSZWFzb24SJAogT0ZGRVJfQUJTRU5DRV9SRUFTT05fVU5TUEVDSUZJRUQQABInCiNPRkZFUl9BQlNFTkNFX1JFQVNPTl9OT1RfSU5fQ0FUQUxPRxABEigKJE9GRkVSX0FCU0VOQ0VfUkVBU09OX0NPTlRFTlRfQkxPQ0tFRBACEi0KKU9GRkVSX0FCU0VOQ0VfUkVBU09OX1JFU1RSSUNUSU9OX0ZJTFRFUkVEEAMSMAosT0ZGRVJfQUJTRU5DRV9SRUFTT05fVEVNUE9SQVJJTFlfVU5BVkFJTEFCTEUQBBInCiNPRkZFUl9BQlNFTkNFX1JFQVNPTl9OT1RfQVVUSE9SSVpFRBAFEisKJ09GRkVSX0FCU0VOQ0VfUkVBU09OX1NDT1BFX0lOU1VGRklDSUVOVBAGEjMKL09GRkVSX0FCU0VOQ0VfUkVBU09OX1VOS05PV05fQ1JJVElDQUxfRVhURU5TSU9OEAcqcQoNVGVybVNlbWFudGljcxIeChpURVJNX1NFTUFOVElDU19VTlNQRUNJRklFRBAAEh0KGVRFUk1fU0VNQU5USUNTX0VOVU1FUkFURUQQARIhCh1URVJNX1NFTUFOVElDU19SRUZFUkVOQ0VfT05MWRACKuUECg9SZXN0cmljdGlvbktpbmQSIAocUkVTVFJJQ1RJT05fS0lORF9VTlNQRUNJRklFRBAAEr4CChlSRVNUUklDVElPTl9LSU5EX0ZVTkNUSU9OEAEangKStRgDYWxskrUYBmFpLWFsbJK1GAhhaS10cmFpbpK1GAhhaS1pbnB1dJK1GAhhaS1pbmRleJK1GAZzZWFyY2iStRgFY3Jhd2yStRgUdGV4dC1hbmQtZGF0YS1taW5pbmeStRgDdHRzkrUYCmNvbW1lcmNpYWyStRgLYWR2ZXJ0aXNpbmeStRgJZWRpdG9yaWFskrUYCHJlc2VhcmNokrUYCXJlcHJvZHVjZZK1GApkaXN0cmlidXRlkrUYBm1vZGlmeZK1GAdkaXNwbGF5krUYBHN5bmOStRgJYnJvYWRjYXN0krUYBnN0cmVhbZK1GAVwcmludJK1GAttYW51ZmFjdHVyZZK1GARzZWxsorUYDmZ1bmN0aW9udG9rZW5zEkUKGlJFU1RSSUNUSU9OX0tJTkRfR0VPR1JBUEhZEAIaJZK1GAEqkrUYAkVVkrUYA0VFQaK1GA9nZW9ncmFwaHl0b2tlbnMSiwEKGlJFU1RSSUNUSU9OX0tJTkRfVVNFUl9UWVBFEAMaa5K1GAppbmRpdmlkdWFskrUYCGFjYWRlbWljkrUYCm5vbl9wcm9maXSStRgObmV3c19wdWJsaXNoZXKStRgLYnJvYWRjYXN0ZXKStRgRY29tbWVyY2lhbF9lbnRpdHmitRgJdXNlcnR5cGVzEhoKFlJFU1RSSUNUSU9OX0tJTkRfT1RIRVIQBCqOAQoLUXVvdGFXaW5kb3cSHAoYUVVPVEFfV0lORE9XX1VOU1BFQ0lGSUVEEAASFwoTUVVPVEFfV0lORE9XX0hPVVJMWRABEhYKElFVT1RBX1dJTkRPV19EQUlMWRACEhgKFFFVT1RBX1dJTkRPV19NT05USExZEAMSFgoSUVVPVEFfV0lORE9XX1RPVEFMEAQq8gEKDk9ibGlnYXRpb25LaW5kEh8KG09CTElHQVRJT05fS0lORF9VTlNQRUNJRklFRBAAEh8KG09CTElHQVRJT05fS0lORF9BVFRSSUJVVElPThABEiAKHE9CTElHQVRJT05fS0lORF9DT05UUklCVVRJT04QAhIfChtPQkxJR0FUSU9OX0tJTkRfU0hBUkVfQUxJS0UQAxIkCiBPQkxJR0FUSU9OX0tJTkRfTkVUV09SS19DT1BZTEVGVBAEEhoKFk9CTElHQVRJT05fS0lORF9OT1RJQ0UQBRIZChVPQkxJR0FUSU9OX0tJTkRfT1RIRVIQBirPAQoRT2JsaWdhdGlvblRyaWdnZXISIgoeT0JMSUdBVElPTl9UUklHR0VSX1VOU1BFQ0lGSUVEEAASHQoZT0JMSUdBVElPTl9UUklHR0VSX09OX1VTRRABEiYKIk9CTElHQVRJT05fVFJJR0dFUl9PTl9ESVNUUklCVVRJT04QAhIpCiVPQkxJR0FUSU9OX1RSSUdHRVJfT05fTkVUV09SS19TRVJWSUNFEAMSJAogT0JMSUdBVElPTl9UUklHR0VSX09OX0RFUklWQVRJVkUQBCp5CgxQcmljaW5nTW9kZWwSHQoZUFJJQ0lOR19NT0RFTF9VTlNQRUNJRklFRBAAEhYKElBSSUNJTkdfTU9ERUxfRlJFRRABEhoKFlBSSUNJTkdfTU9ERUxfUEVSX1VOSVQQAhIWChJQUklDSU5HX01PREVMX0ZMQVQQAyp1Cg9QcmljaW5nTWV0ZXJpbmcSGwoXUFJJQ0lOR19NRVRFUklOR19PTkxJTkUQABIZChVQUklDSU5HX01FVEVSSU5HX05PTkUQARIqCiZQUklDSU5HX01FVEVSSU5HX09GRkxJTkVfU0VMRl9SRVBPUlRFRBACKo4BCg5EZWxpdmVyeU1ldGhvZBIfChtERUxJVkVSWV9NRVRIT0RfVU5TUEVDSUZJRUQQABIaChZERUxJVkVSWV9NRVRIT0RfRElSRUNUEAESIAocREVMSVZFUllfTUVUSE9EX0lOU1RSVUNUSU9OUxACEh0KGURFTElWRVJZX01FVEhPRF9TVFJFQU1JTkcQAyq/AQoNUmVxdWVzdGVyVHlwZRIeChpSRVFVRVNURVJfVFlQRV9VTlNQRUNJRklFRBAAEhgKFFJFUVVFU1RFUl9UWVBFX0FHRU5UEAESHQoZUkVRVUVTVEVSX1RZUEVfSFVNQU5fVE9PTBACEhoKFlJFUVVFU1RFUl9UWVBFX1NFUlZJQ0UQAxIcChhSRVFVRVNURVJfVFlQRV9ERUxFR0FURUQQBBIbChdSRVFVRVNURVJfVFlQRV9SRVNFQVJDSBAFKooBCgpDMlBBU3RhdHVzEhsKF0MyUEFfU1RBVFVTX1VOU1BFQ0lGSUVEEAASFwoTQzJQQV9TVEFUVVNfVFJVU1RFRBABEhUKEUMyUEFfU1RBVFVTX1ZBTElEEAISFwoTQzJQQV9TVEFUVVNfSU5WQUxJRBADEhYKEkMyUEFfU1RBVFVTX0FCU0VOVBAEKpgBChJSZXNvdXJjZU11dGFiaWxpdHkSIwofUkVTT1VSQ0VfTVVUQUJJTElUWV9VTlNQRUNJRklFRBAAEh4KGlJFU09VUkNFX01VVEFCSUxJVFlfU1RBVElDEAESHwobUkVTT1VSQ0VfTVVUQUJJTElUWV9EWU5BTUlDEAISHAoYUkVTT1VSQ0VfTVVUQUJJTElUWV9MSVZFEAMq7wUKDERlbmlhbFJlYXNvbhIdChlERU5JQUxfUkVBU09OX1VOU1BFQ0lGSUVEEAASJgoiREVOSUFMX1JFQVNPTl9CSUxMSU5HX1JFRl9JTkFDVElWRRABEiYKIkRFTklBTF9SRUFTT05fSU5TVUZGSUNJRU5UX0JBTEFOQ0UQAhIeChpERU5JQUxfUkVBU09OX1JBVEVfTElNSVRFRBADEiUKIURFTklBTF9SRUFTT05fQ09OVEVOVF9VTkFWQUlMQUJMRRAEEisKJ0RFTklBTF9SRUFTT05fUkVTVFJJQ1RJT05fTk9UX1NBVElTRklFRBAFEiMKH0RFTklBTF9SRUFTT05fUkVQT1JUSU5HX09WRVJEVUUQBhIfChtERU5JQUxfUkVBU09OX09GRkVSX0VYUElSRUQQBxIjCh9ERU5JQUxfUkVBU09OX1NJR05BVFVSRV9JTlZBTElEEAgSIAocREVOSUFMX1JFQVNPTl9RVU9UQV9FWENFRURFRBAJEiQKIERFTklBTF9SRUFTT05fREVMRUdBVElPTl9JTlZBTElEEAoSJAogREVOSUFMX1JFQVNPTl9TQ09QRV9JTlNVRkZJQ0lFTlQQCxIlCiFERU5JQUxfUkVBU09OX0VOVElUTEVNRU5UX01JU1NJTkcQDBInCiNERU5JQUxfUkVBU09OX0VOVElUTEVNRU5UX01BTEZPUk1FRBANEiUKIURFTklBTF9SRUFTT05fRU5USVRMRU1FTlRfRVhQSVJFRBAOEikKJURFTklBTF9SRUFTT05fRU5USVRMRU1FTlRfV1JPTkdfQlVZRVIQDxIlCiFERU5JQUxfUkVBU09OX1NVQlNDUklQVElPTl9MQVBTRUQQEBIpCiVERU5JQUxfUkVBU09OX0VOVElUTEVNRU5UX05PVF9HUkFOVEVEEBESLworREVOSUFMX1JFQVNPTl9FTlRJVExFTUVOVF9TVEFMRV9BVFRFTlVBVElPThASKowCCg9Jbmdlc3Rpb25Tb3VyY2USIAocSU5HRVNUSU9OX1NPVVJDRV9VTlNQRUNJRklFRBAAEiEKHUlOR0VTVElPTl9TT1VSQ0VfUkFNUF9TSVRFTUFQEAESGAoUSU5HRVNUSU9OX1NPVVJDRV9SU0wQAhIcChhJTkdFU1RJT05fU09VUkNFX1NJVEVNQVAQAxIfChtJTkdFU1RJT05fU09VUkNFX0hUTUxfQ1JBV0wQBBIcChhJTkdFU1RJT05fU09VUkNFX0NNU19BUEkQBRIbChdJTkdFU1RJT05fU09VUkNFX01BTlVBTBAGEiAKHElOR0VTVElPTl9TT1VSQ0VfQ0FUQUxPR19BUEkQBypkCg5DaXRhdGlvbkZvcm1hdBIYChRDSVRBVElPTl9GT1JNQVRfTElOSxAAEhwKGENJVEFUSU9OX0ZPUk1BVF9GT09UTk9URRABEhoKFkNJVEFUSU9OX0ZPUk1BVF9JTkxJTkUQAipkCgRSb2xlEhQKEFJPTEVfVU5TUEVDSUZJRUQQABIOCgpST0xFX0FHRU5UEAESEQoNUk9MRV9FWENIQU5HRRACEg8KC1JPTEVfQlJPS0VSEAMSEgoOUk9MRV9QVUJMSVNIRVIQBCqDAQoUUHJvdmlkZXJSZWxhdGlvbnNoaXASJQohUFJPVklERVJfUkVMQVRJT05TSElQX1VOU1BFQ0lGSUVEEAASIAocUFJPVklERVJfUkVMQVRJT05TSElQX0RJUkVDVBABEiIKHlBST1ZJREVSX1JFTEFUSU9OU0hJUF9SRVNFTExFUhACKpUBCgpBdXRoTWV0aG9kEhsKF0FVVEhfTUVUSE9EX1VOU1BFQ0lGSUVEEAASFAoQQVVUSF9NRVRIT0RfR05BUBABEhoKFkFVVEhfTUVUSE9EX09BVVRIX0RQT1AQAhIcChhBVVRIX01FVEhPRF9PQVVUSF9CRUFSRVIQAxIaChZBVVRIX01FVEhPRF9PQVVUSF9NVExTEAQq6gEKDURpc3B1dGVSZWFzb24SHgoaRElTUFVURV9SRUFTT05fVU5TUEVDSUZJRUQQABIjCh9ESVNQVVRFX1JFQVNPTl9DT05URU5UX01JU01BVENIEAESIgoeRElTUFVURV9SRUFTT05fREVMSVZFUllfRkFJTEVEEAISIAocRElTUFVURV9SRUFTT05fV1JPTkdfQ09OVEVOVBADEicKI0RJU1BVVEVfUkVBU09OX0VYUElSRURfQkVGT1JFX0ZFVENIEAQSJQohRElTUFVURV9SRUFTT05fSU5DT01QTEVURV9DT05URU5UEAUqvgIKDURpc3B1dGVTdGF0dXMSHgoaRElTUFVURV9TVEFUVVNfVU5TUEVDSUZJRUQQABIYChRESVNQVVRFX1NUQVRVU19GSUxFRBABEiAKHERJU1BVVEVfU1RBVFVTX0FVVE9fUkVTT0xWRUQQAhIiCh5ESVNQVVRFX1NUQVRVU19FVklERU5DRV9ORUVERUQQAxIfChtESVNQVVRFX1NUQVRVU19VTkRFUl9SRVZJRVcQBBIcChhESVNQVVRFX1NUQVRVU19FU0NBTEFURUQQBRIbChdESVNQVVRFX1NUQVRVU19SRVNPTFZFRBAGEhsKF0RJU1BVVEVfU1RBVFVTX0FQUEVBTEVEEAcSGgoWRElTUFVURV9TVEFUVVNfU0VUVExFRBAIEhgKFERJU1BVVEVfU1RBVFVTX0ZJTkFMEAkqrgEKDlJlc29sdXRpb25UeXBlEh8KG1JFU09MVVRJT05fVFlQRV9VTlNQRUNJRklFRBAAEhoKFlJFU09MVVRJT05fVFlQRV9DUkVESVQQARIeChpSRVNPTFVUSU9OX1RZUEVfUkVERUxJVkVSWRACEhwKGFJFU09MVVRJT05fVFlQRV9SRUpFQ1RFRBADEiEKHVJFU09MVVRJT05fVFlQRV9JTlZFU1RJR0FUSU9OEAQqlQMKFkNhdGFsb2dSZWplY3Rpb25SZWFzb24SKAokQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX1VOU1BFQ0lGSUVEEAASNAowQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX05PVF9DQVRBTE9HX0NPTlRSSUJVVE9SEAESLAooQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX1RFTkFOVF9NSVNNQVRDSBACEjAKLENBVEFMT0dfUkVKRUNUSU9OX1JFQVNPTl9ET01BSU5fTk9UX1ZFUklGSUVEEAMSLgoqQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX1NJR05BVFVSRV9JTlZBTElEEAQSLAooQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX01BTEZPUk1FRF9FTlRSWRAFEjAKLENBVEFMT0dfUkVKRUNUSU9OX1JFQVNPTl9VTktOT1dOX1ZPQ0FCX1RPS0VOEAYSKwonQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX1FVT1RBX0VYQ0VFREVEEAcqwQIKGVJlZ2lzdHJhdGlvbkZhaWx1cmVSZWFzb24SKwonUkVHSVNUUkFUSU9OX0ZBSUxVUkVfUkVBU09OX1VOU1BFQ0lGSUVEEAASMwovUkVHSVNUUkFUSU9OX0ZBSUxVUkVfUkVBU09OX0RPTUFJTl9OT1RfVkVSSUZJRUQQARIrCidSRUdJU1RSQVRJT05fRkFJTFVSRV9SRUFTT05fSU5WQUxJRF9LRVkQAhIxCi1SRUdJU1RSQVRJT05fRkFJTFVSRV9SRUFTT05fU0lHTkFUVVJFX0lOVkFMSUQQAxIyCi5SRUdJU1RSQVRJT05fRkFJTFVSRV9SRUFTT05fQUxSRUFEWV9SRUdJU1RFUkVEEAQSLgoqUkVHSVNUUkFUSU9OX0ZBSUxVUkVfUkVBU09OX1FVT1RBX0VYQ0VFREVEEAUqlQIKFERpc3B1dGVGYWlsdXJlUmVhc29uEiYKIkRJU1BVVEVfRkFJTFVSRV9SRUFTT05fVU5TUEVDSUZJRUQQABIwCixESVNQVVRFX0ZBSUxVUkVfUkVBU09OX1RSQU5TQUNUSU9OX05PVF9GT1VORBABEisKJ0RJU1BVVEVfRkFJTFVSRV9SRUFTT05fUkVQT1JUX05PVF9GSUxFRBACEikKJURJU1BVVEVfRkFJTFVSRV9SRUFTT05fV0lORE9XX0VYUElSRUQQAxIkCiBESVNQVVRFX0ZBSUxVUkVfUkVBU09OX0RVUExJQ0FURRAEEiUKIURJU1BVVEVfRkFJTFVSRV9SRUFTT05fSU5FTElHSUJMRRAFKrsDCh9Eb21haW5WZXJpZmljYXRpb25GYWlsdXJlUmVhc29uEjIKLkRPTUFJTl9WRVJJRklDQVRJT05fRkFJTFVSRV9SRUFTT05fVU5TUEVDSUZJRUQQABI6CjZET01BSU5fVkVSSUZJQ0FUSU9OX0ZBSUxVUkVfUkVBU09OX0NIQUxMRU5HRV9OT1RfRk9VTkQQARI5CjVET01BSU5fVkVSSUZJQ0FUSU9OX0ZBSUxVUkVfUkVBU09OX0NIQUxMRU5HRV9NSVNNQVRDSBACEjgKNERPTUFJTl9WRVJJRklDQVRJT05fRkFJTFVSRV9SRUFTT05fQ0hBTExFTkdFX0VYUElSRUQQAxIzCi9ET01BSU5fVkVSSUZJQ0FUSU9OX0ZBSUxVUkVfUkVBU09OX0ZFVENIX0ZBSUxFRBAEEj4KOkRPTUFJTl9WRVJJRklDQVRJT05fRkFJTFVSRV9SRUFTT05fRVhDSEFOR0VfTk9UX0FVVEhPUklaRUQQBRI+CjpET01BSU5fVkVSSUZJQ0FUSU9OX0ZBSUxVUkVfUkVBU09OX0tFWV9SRUdJU1RSQVRJT05fRkFJTEVEEAYq2QUKGlJldHJpZXZhbEF1dGhGYWlsdXJlUmVhc29uEi0KKVJFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX1VOU1BFQ0lGSUVEEAASLQopUkVUUklFVkFMX0FVVEhfRkFJTFVSRV9SRUFTT05fVVJMX0VYUElSRUQQARI3CjNSRVRSSUVWQUxfQVVUSF9GQUlMVVJFX1JFQVNPTl9VUkxfU0lHTkFUVVJFX01JU1NJTkcQAhI0CjBSRVRSSUVWQUxfQVVUSF9GQUlMVVJFX1JFQVNPTl9VUkxfRVhQSVJZX01JU1NJTkcQAxI4CjRSRVRSSUVWQUxfQVVUSF9GQUlMVVJFX1JFQVNPTl9VUkxfU0lHTkFUVVJFX01JU01BVENIEAQSMwovUkVUUklFVkFMX0FVVEhfRkFJTFVSRV9SRUFTT05fQUdFTlRfS0VZX01JU1NJTkcQBRI5CjVSRVRSSUVWQUxfQVVUSF9GQUlMVVJFX1JFQVNPTl9QUk9PRl9TSUdOQVRVUkVfTUlTU0lORxAGEjAKLFJFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX0tFWUlEX01JU01BVENIEAcSNQoxUkVUUklFVkFMX0FVVEhfRkFJTFVSRV9SRUFTT05fVEhVTUJQUklOVF9NSVNNQVRDSBAIEjcKM1JFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX1BST09GX0NSRUFURURfTUlTU0lORxAJEjYKMlJFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX1BST09GX0VYUElSWV9NSVNTSU5HEAoSLworUkVUUklFVkFMX0FVVEhfRkFJTFVSRV9SRUFTT05fUFJPT0ZfRVhQSVJFRBALEjkKNVJFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX1BST09GX1NJR05BVFVSRV9JTlZBTElEEAwqywIKGlVzYWdlUmVwb3J0UmVqZWN0aW9uUmVhc29uEi0KKVVTQUdFX1JFUE9SVF9SRUpFQ1RJT05fUkVBU09OX1VOU1BFQ0lGSUVEEAASNwozVVNBR0VfUkVQT1JUX1JFSkVDVElPTl9SRUFTT05fVFJBTlNBQ1RJT05fTk9UX0ZPVU5EEAESKwonVVNBR0VfUkVQT1JUX1JFSkVDVElPTl9SRUFTT05fRFVQTElDQVRFEAISMAosVVNBR0VfUkVQT1JUX1JFSkVDVElPTl9SRUFTT05fV0lORE9XX0VYUElSRUQQAxI5CjVVU0FHRV9SRVBPUlRfUkVKRUNUSU9OX1JFQVNPTl9NSVNTSU5HX1JFUVVJUkVEX0ZJRUxEUxAEEisKJ1VTQUdFX1JFUE9SVF9SRUpFQ1RJT05fUkVBU09OX01BTEZPUk1FRBAFMoYECg9FeGNoYW5nZVNlcnZpY2USRgoRRGlzY292ZXJSZXNvdXJjZXMSFi5yYW1wLnYxLlJlc291cmNlUXVlcnkaGS5yYW1wLnYxLlJlc291cmNlUmVzcG9uc2USTwoSRXhlY3V0ZVRyYW5zYWN0aW9uEhsucmFtcC52MS5UcmFuc2FjdGlvblJlcXVlc3QaHC5yYW1wLnYxLlRyYW5zYWN0aW9uUmVzcG9uc2USQQoLUmVwb3J0VXNhZ2USFC5yYW1wLnYxLlVzYWdlUmVwb3J0GhwucmFtcC52MS5Vc2FnZVJlcG9ydFJlc3BvbnNlEkcKEkRpc3B1dGVUcmFuc2FjdGlvbhIXLnJhbXAudjEuRGlzcHV0ZVJlcXVlc3QaGC5yYW1wLnYxLkRpc3B1dGVSZXNwb25zZRJlChlSZXF1ZXN0RG9tYWluVmVyaWZpY2F0aW9uEiIucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25SZXF1ZXN0GiQucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25DaGFsbGVuZ2USZwoZQ29uZmlybURvbWFpblZlcmlmaWNhdGlvbhInLnJhbXAudjEuRG9tYWluVmVyaWZpY2F0aW9uQ29uZmlybWF0aW9uGiEucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25SZXN1bHQyiQIKDkNhdGFsb2dTZXJ2aWNlEk4KDVB1c2hSZXNvdXJjZXMSHS5yYW1wLnYxLlB1c2hSZXNvdXJjZXNSZXF1ZXN0Gh4ucmFtcC52MS5QdXNoUmVzb3VyY2VzUmVzcG9uc2USVAoPUmVtb3ZlUmVzb3VyY2VzEh8ucmFtcC52MS5SZW1vdmVSZXNvdXJjZXNSZXF1ZXN0GiAucmFtcC52MS5SZW1vdmVSZXNvdXJjZXNSZXNwb25zZRJRCg5SZWZyZXNoQ2F0YWxvZxIeLnJhbXAudjEuUmVmcmVzaENhdGFsb2dSZXF1ZXN0Gh8ucmFtcC52MS5SZWZyZXNoQ2F0YWxvZ1Jlc3BvbnNlMkcKDUJyb2tlclNlcnZpY2USNgoHUmVzb2x2ZRIULnJhbXAudjEuUkFNUFJlcXVlc3QaFS5yYW1wLnYxLlJBTVBSZXNwb25zZUKOAQoLY29tLnJhbXAudjFCCVJhbXBQcm90b1ABWjdnaXRodWIuY29tL1JBTVAtUHJvdG9jb2wvcHJvdG9jb2wvZ2VuL2dvL3JhbXAvdjE7cmFtcHYxogIDUlhYqgIHUmFtcC5WMcoCB1JhbXBcVjHiAhNSYW1wXFYxXEdQQk1ldGFkYXRh6gIIUmFtcDo6VjFiBnByb3RvMw", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_google_protobuf_duration, file_buf_validate_validate, file_ramp_v1_vocab]); + fileDesc("ChJyYW1wL3YxL3JhbXAucHJvdG8SB3JhbXAudjEidgoVQWNjZXB0YWJsZVJlc3RyaWN0aW9uEiYKBGF4aXMYASABKA4yGC5yYW1wLnYxLlJlc3RyaWN0aW9uS2luZBI1CgZ2YWx1ZXMYAiADKAlCJbpIIpIBHxBAIhtyGRABGEAyE15bQS1aYS16MC05Ll86Ki1dKyQiwAIKDVJlc291cmNlUXVlcnkSCwoDdmVyGAEgASgJEgoKAmlkGAIgASgJEiUKCXJlcXVlc3RlchgDIAEoCzISLnJhbXAudjEuUmVxdWVzdGVyEhcKBHVyaXMYCCADKAlCCbpIBpIBAxCAAhI/ChdhY2NlcHRhYmxlX3Jlc3RyaWN0aW9ucxgJIAMoCzIeLnJhbXAudjEuQWNjZXB0YWJsZVJlc3RyaWN0aW9uEjAKCGRlYWRsaW5lGAYgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uSACIAQESGgoSc3VwcG9ydGVkX3Byb2ZpbGVzGAcgAygJEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQgsKCV9kZWFkbGluZSL4AQoQUmVzb3VyY2VSZXNwb25zZRILCgN2ZXIYASABKAkSEAoIZXhjaGFuZ2UYAyABKAkSHgoGb2ZmZXJzGAQgAygLMg4ucmFtcC52MS5PZmZlchIpCgxvZmZlcl9ncm91cHMYBSADKAsyEy5yYW1wLnYxLk9mZmVyR3JvdXASLwoKcmF0ZV9saW1pdBgGIAEoCzIWLnJhbXAudjEuUmF0ZUxpbWl0SW5mb0gAiAEBEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQg0KC19yYXRlX2xpbWl0IosCCgpPZmZlckdyb3VwEgsKA3VyaRgBIAEoCRIeCgZvZmZlcnMYAiADKAsyDi5yYW1wLnYxLk9mZmVyEjcKEGRpc2NvdmVyeV9tZXRob2QYAyABKA4yGC5yYW1wLnYxLkRpc2NvdmVyeU1ldGhvZEgAiAEBEjgKDmFic2VuY2VfcmVhc29uGAQgASgOMhsucmFtcC52MS5PZmZlckFic2VuY2VSZWFzb25IAYgBARI1ChNyZXN0cmljdGlvbl9maWx0ZXJzGAUgAygOMhgucmFtcC52MS5SZXN0cmljdGlvbktpbmRCEwoRX2Rpc2NvdmVyeV9tZXRob2RCEQoPX2Fic2VuY2VfcmVhc29uIpoBCg1SYXRlTGltaXRJbmZvEg0KBWxpbWl0GAEgASgFEhEKCXJlbWFpbmluZxgCIAEoBRIsCghyZXNldF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoGd2luZG93GAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uSACIAQFCCQoHX3dpbmRvdyLQAQoVU3Vic2NyaXB0aW9uUXVvdGFJbmZvEhcKD3N1YnNjcmlwdGlvbl9pZBgBIAEoCRITCgtxdW90YV9saW1pdBgCIAEoBRISCgpxdW90YV91c2VkGAMgASgFEhcKD3F1b3RhX3JlbWFpbmluZxgEIAEoBRIyCglyZXNldHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQESEQoEdW5pdBgGIAEoCUgBiAEBQgwKCl9yZXNldHNfYXRCBwoFX3VuaXQihgYKBU9mZmVyEhAKCG9mZmVyX2lkGAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESIQoHcHJpY2luZxgDIAEoCzIQLnJhbXAudjEuUHJpY2luZxIwCg9kZWxpdmVyeV9tZXRob2QYBCABKA4yFy5yYW1wLnYxLkRlbGl2ZXJ5TWV0aG9kEjQKCXJlcG9ydGluZxgFIAEoCzIcLnJhbXAudjEuUmVwb3J0aW5nT2JsaWdhdGlvbkgBiAEBEjMKCmV4cGlyZXNfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESMAoIaWRlbnRpdHkYByABKAsyGS5yYW1wLnYxLlJlc291cmNlSWRlbnRpdHlIA4gBARIRCglzaWduYXR1cmUYCSABKAkSGwoTc2lnbmF0dXJlX2FsZ29yaXRobRgKIAEoCRIcCg9zdWJzY3JpcHRpb25faWQYCyABKAlIBIgBARIWCg5pYWJfY2F0ZWdvcmllcxgNIAMoCRIyCgxhdHRlc3RhdGlvbnMYDiADKAsyHC5yYW1wLnYxLlJlc291cmNlQXR0ZXN0YXRpb24SMwoKZGF0YV9hc19vZhgQIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIBYgBARI6ChJzdWJzY3JpcHRpb25fcXVvdGEYESADKAsyHi5yYW1wLnYxLlN1YnNjcmlwdGlvblF1b3RhSW5mbxIiCghwcmV2aWV3cxgSIAMoCzIQLnJhbXAudjEuUHJldmlldxIjCgV0ZXJtcxgTIAMoCzIULnJhbXAudjEuTGljZW5zZVRlcm0SJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCCAoGX3RpdGxlQgwKCl9yZXBvcnRpbmdCDQoLX2V4cGlyZXNfYXRCCwoJX2lkZW50aXR5QhIKEF9zdWJzY3JpcHRpb25faWRCDQoLX2RhdGFfYXNfb2YixQQKEFJlc291cmNlSWRlbnRpdHkSGgoNY2Fub25pY2FsX3VybBgBIAEoCUgAiAEBEhAKA2RvaRgCIAEoCUgBiAEBEhYKCWlwdGNfZ3VpZBgDIAEoCUgCiAEBEhEKBGlzbmkYBCABKAlIA4gBARIZCgxjb250ZW50X2hhc2gYBSABKAlIBIgBARIYCgtoYXNoX21ldGhvZBgGIAEoCUgFiAEBEkIKE3Jlc291cmNlX211dGFiaWxpdHkYCCABKA4yGy5yYW1wLnYxLlJlc291cmNlTXV0YWJpbGl0eUIIukgFggECIAASGgoNYzJwYV9tYW5pZmVzdBgHIAEoCUgGiAEBEi0KC2MycGFfc3RhdHVzGAkgASgOMhMucmFtcC52MS5DMlBBU3RhdHVzSAeIAQESGQoMc29mdF9iaW5kaW5nGAogASgJSAiIAQESIAoTc29mdF9iaW5kaW5nX21ldGhvZBgLIAEoCUgJiAEBEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQhAKDl9jYW5vbmljYWxfdXJsQgYKBF9kb2lCDAoKX2lwdGNfZ3VpZEIHCgVfaXNuaUIPCg1fY29udGVudF9oYXNoQg4KDF9oYXNoX21ldGhvZEIQCg5fYzJwYV9tYW5pZmVzdEIOCgxfYzJwYV9zdGF0dXNCDwoNX3NvZnRfYmluZGluZ0IWChRfc29mdF9iaW5kaW5nX21ldGhvZCKuAQoTUmVzb3VyY2VBdHRlc3RhdGlvbhIQCgh2ZXJpZmllchgBIAEoCRILCgNraWQYAiABKAkSLwoLYXR0ZXN0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgsKA3VyaRgEIAEoCRInCgZjbGFpbXMYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhEKCXNpZ25hdHVyZRgGIAEoCSLtAgoHTGljZW5zZRIQCgN1cmkYASABKAlIAIgBARIPCgJpZBgCIAEoCUgBiAEBEhEKBG5hbWUYAyABKAlIAogBARIWCglpbW11dGFibGUYBCABKAhIA4gBARJhCgp1cmlfZGlnZXN0GAUgASgJQki6SEVyQzJBXihzaGEyNTY6WzAtOWEtZl17NjR9fHNoYTM4NDpbMC05YS1mXXs5Nn18c2hhNTEyOlswLTlhLWZdezEyOH0pPyRIBIgBATp8ukh5GncKIGxpY2Vuc2UuZGlnZXN0X3JlcXVpcmVkX3dpdGhfdXJpEip1cmlfZGlnZXN0IGlzIHJlcXVpcmVkIHdoZW5ldmVyIHVyaSBpcyBzZXQaJ3RoaXMudXJpID09ICcnIHx8IHRoaXMudXJpX2RpZ2VzdCAhPSAnJ0IGCgRfdXJpQgUKA19pZEIHCgVfbmFtZUIMCgpfaW1tdXRhYmxlQg0KC191cmlfZGlnZXN0IuMCCgtSZXN0cmljdGlvbhIwCgRraW5kGAEgASgOMhgucmFtcC52MS5SZXN0cmljdGlvbktpbmRCCLpIBYIBAiAAEjgKCXBlcm1pdHRlZBgCIAMoCUIlukgikgEfEEAiG3IZEAEYQDITXltBLVphLXowLTkuXzoqLV0rJBI5Cgpwcm9oaWJpdGVkGAMgAygJQiW6SCKSAR8QQCIbchkQARhAMhNeW0EtWmEtejAtOS5fOiotXSskEhAKCGFkdmlzb3J5GAQgASgIOpoBukiWARqTAQopcmVzdHJpY3Rpb24ucGVybWl0dGVkX3Byb2hpYml0ZWRfZGlzam9pbnQSNmEgdG9rZW4gY2Fubm90IGFwcGVhciBpbiBib3RoIHBlcm1pdHRlZCBhbmQgcHJvaGliaXRlZBoudGhpcy5wZXJtaXR0ZWQuYWxsKHAsICEocCBpbiB0aGlzLnByb2hpYml0ZWQpKSKZAgoFUXVvdGESxwEKBm1ldHJpYxgBIAEoCUK2AbpINHIyGEAyLl4oW2EtejAtOS1dK3xbQS1aYS16MC05Ll8tXSs6W0EtWmEtejAtOS5fLV0rKSSKtRgNZGlzcGxheS13b3Jkc4q1GAtpbXByZXNzaW9uc4q1GAZ0b2tlbnOKtRgMaW5wdXQtdG9rZW5zirUYEnVuaXRzLW1hbnVmYWN0dXJlZIq1GAhhY2Nlc3Nlc4q1GAZjb3BpZXOKtRgFc2VhdHOatRgMcXVvdGFtZXRyaWNzEhYKBWxpbWl0GAIgASgDQge6SAQiAigBEi4KBndpbmRvdxgDIAEoDjIULnJhbXAudjEuUXVvdGFXaW5kb3dCCLpIBYIBAiAAIvMDCgpPYmxpZ2F0aW9uEi8KBGtpbmQYASABKA4yFy5yYW1wLnYxLk9ibGlnYXRpb25LaW5kQgi6SAWCAQIgABI1Cgd0cmlnZ2VyGAIgASgOMhoucmFtcC52MS5PYmxpZ2F0aW9uVHJpZ2dlckIIukgFggECIAASLAoNc2NvcGVfbGljZW5zZRgDIAEoCzIQLnJhbXAudjEuTGljZW5zZUgAiAEBEhMKBmRldGFpbBgEIAEoCUgBiAEBOpwCukiYAhqVAgotb2JsaWdhdGlvbi5zaGFyZV9hbGlrZS5yZXF1aXJlc19zY29wZV9saWNlbnNlEkRTSEFSRV9BTElLRSByZXF1aXJlcyBzY29wZV9saWNlbnNlIHRvIGlkZW50aWZ5IGEgbGljZW5zZSAoaWQgb3IgdXJpKRqdAXRoaXMua2luZCAhPSByYW1wLnYxLk9ibGlnYXRpb25LaW5kLk9CTElHQVRJT05fS0lORF9TSEFSRV9BTElLRSB8fCAoaGFzKHRoaXMuc2NvcGVfbGljZW5zZSkgJiYgKHRoaXMuc2NvcGVfbGljZW5zZS5pZCAhPSAnJyB8fCB0aGlzLnNjb3BlX2xpY2Vuc2UudXJpICE9ICcnKSlCEAoOX3Njb3BlX2xpY2Vuc2VCCQoHX2RldGFpbCKCBgoLTGljZW5zZVRlcm0SJgoHbGljZW5zZRgBIAEoCzIQLnJhbXAudjEuTGljZW5zZUgAiAEBEjMKCXNlbWFudGljcxgCIAEoDjIWLnJhbXAudjEuVGVybVNlbWFudGljc0IIukgFggECIAASKgoMcmVzdHJpY3Rpb25zGAMgAygLMhQucmFtcC52MS5SZXN0cmljdGlvbhIeCgZxdW90YXMYBCADKAsyDi5yYW1wLnYxLlF1b3RhEigKC29ibGlnYXRpb25zGAUgAygLMhMucmFtcC52MS5PYmxpZ2F0aW9uEi4KB3ByaWNpbmcYBiABKAsyEC5yYW1wLnYxLlByaWNpbmdCBrpIA8gBAUgBiAEBEhgKBnNjb3BlcxgHIAMoCUIIukgFkgECEEASFwoKcGFydF9sYWJlbBgIIAEoCUgCiAEBOpUDukiRAxriAQoobGljZW5zZV90ZXJtLnJlZmVyZW5jZV9vbmx5LnJlcXVpcmVzX3VyaRI+UkVGRVJFTkNFX09OTFkgdGVybXMgbXVzdCBjYXJyeSBhIGxpY2Vuc2Ugd2l0aCBhIG5vbi1lbXB0eSB1cmkadnRoaXMuc2VtYW50aWNzICE9IHJhbXAudjEuVGVybVNlbWFudGljcy5URVJNX1NFTUFOVElDU19SRUZFUkVOQ0VfT05MWSB8fCAoaGFzKHRoaXMubGljZW5zZSkgJiYgdGhpcy5saWNlbnNlLnVyaSAhPSAnJykaqQEKJWxpY2Vuc2VfdGVybS5vbmVfcmVzdHJpY3Rpb25fcGVyX2tpbmQSK2F0IG1vc3Qgb25lIHJlc3RyaWN0aW9uIGlzIGFsbG93ZWQgcGVyIGtpbmQaU3RoaXMucmVzdHJpY3Rpb25zLmFsbChyLCB0aGlzLnJlc3RyaWN0aW9ucy5maWx0ZXIobywgby5raW5kID09IHIua2luZCkuc2l6ZSgpIDw9IDEpQgoKCF9saWNlbnNlQgoKCF9wcmljaW5nQg0KC19wYXJ0X2xhYmVsIqgBCgdQcmV2aWV3EgsKA3VybBgBIAEoCRISCgptZWRpYV90eXBlGAIgASgJEhIKBXdpZHRoGAMgASgFSACIAQESEwoGaGVpZ2h0GAQgASgFSAGIAQESFQoIZHVyYXRpb24YBSABKAVIAogBARIRCgRzaXplGAYgASgJSAOIAQFCCAoGX3dpZHRoQgkKB19oZWlnaHRCCwoJX2R1cmF0aW9uQgcKBV9zaXplIvoGCgdQcmljaW5nEi4KBW1vZGVsGAEgASgOMhUucmFtcC52MS5QcmljaW5nTW9kZWxCCLpIBYIBAiAAEgwKBHJhdGUYAiABKAESEAoIY3VycmVuY3kYAyABKAkSFgoJdW5pdF9jb3N0GAQgASgBSACIAQESHwoSZXN0aW1hdGVkX3F1YW50aXR5GAUgASgFSAGIAQESJAoXbGljZW5zZV9kdXJhdGlvbl9tb250aHMYByABKAVIAogBARKNAgoEdW5pdBgIIAEoCUL5AbpINXIzGEAyL14oW2EtejAtOS1dK3xbQS1aYS16MC05Ll8tXSs6W0EtWmEtejAtOS5fLV0rKT8kirUYB2ZldGNoZXOKtRgIYWNjZXNzZXOKtRgGdG9rZW5zirUYBWNhbGxzirUYBXBhZ2VzirUYB3NlY29uZHOKtRgHbWludXRlc4q1GAdyZWNvcmRzirUYB3N0cmVhbXOKtRgGaW1hZ2VzirUYBXNlYXRzirUYEnVuaXRzLW1hbnVmYWN0dXJlZIq1GApjaGFyYWN0ZXJzirUYBWJ5dGVzirUYBWl0ZW1zirUYBXNxLWttmrUYDHByaWNpbmd1bml0c0gDiAEBEi8KCG1ldGVyaW5nGAkgASgOMhgucmFtcC52MS5QcmljaW5nTWV0ZXJpbmdIBIgBATqnArpIowIalwEKHnByaWNpbmcucGVyX3VuaXQucmVxdWlyZXNfdW5pdBIndW5pdCBpcyByZXF1aXJlZCB3aGVuIG1vZGVsIGlzIFBFUl9VTklUGkx0aGlzLm1vZGVsICE9IHJhbXAudjEuUHJpY2luZ01vZGVsLlBSSUNJTkdfTU9ERUxfUEVSX1VOSVQgfHwgdGhpcy51bml0ICE9ICcnGoYBChZwcmljaW5nLmZyZWUuemVyb19yYXRlEiFyYXRlIG11c3QgYmUgMCB3aGVuIG1vZGVsIGlzIEZSRUUaSXRoaXMubW9kZWwgIT0gcmFtcC52MS5QcmljaW5nTW9kZWwuUFJJQ0lOR19NT0RFTF9GUkVFIHx8IHRoaXMucmF0ZSA9PSAwLjBCDAoKX3VuaXRfY29zdEIVChNfZXN0aW1hdGVkX3F1YW50aXR5QhoKGF9saWNlbnNlX2R1cmF0aW9uX21vbnRoc0IHCgVfdW5pdEILCglfbWV0ZXJpbmcisAIKCVJlcXVlc3RlchIKCgJpZBgBIAEoCRIOCgZkb21haW4YAiABKAkSLgoEdHlwZRgDIAEoDjIWLnJhbXAudjEuUmVxdWVzdGVyVHlwZUIIukgFggECIAASEQoEbmFtZRgEIAEoCUgAiAEBEhgKC2JpbGxpbmdfcmVmGAUgASgJSAGIAQESGAoGc2NvcGVzGAYgAygJQgi6SAWSAQIQQBIsCgpkZWxlZ2F0aW9uGAcgASgLMhMucmFtcC52MS5EZWxlZ2F0aW9uSAKIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCBwoFX25hbWVCDgoMX2JpbGxpbmdfcmVmQg0KC19kZWxlZ2F0aW9uItIDCgpEZWxlZ2F0aW9uEhgKEHByaW5jaXBhbF9kb21haW4YASABKAkSFAoMcHJpbmNpcGFsX2lkGAIgASgJEg4KBnNjb3BlcxgDIAMoCRIuCgpleHBpcmVzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIcCg9tYXhfc3BlbmRfY2VudHMYBSABKANIAIgBARIZCgxtYXhfYWNjZXNzZXMYCSABKAVIAYgBARI0CgxxdW90YV9wZXJpb2QYCiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25IAogBARINCgV0b2tlbhgGIAEoDBIUCgx0b2tlbl9mb3JtYXQYByABKAkSGwoOcmV2b2NhdGlvbl91cmkYCCABKAlIA4gBARITCgZpc3N1ZXIYCyABKAlIBIgBARIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUISChBfbWF4X3NwZW5kX2NlbnRzQg8KDV9tYXhfYWNjZXNzZXNCDwoNX3F1b3RhX3BlcmlvZEIRCg9fcmV2b2NhdGlvbl91cmlCCQoHX2lzc3VlciKlAgoSVHJhbnNhY3Rpb25SZXF1ZXN0EgsKA3ZlchgBIAEoCRIgCg9pZGVtcG90ZW5jeV9rZXkYAiABKAlCB7pIBHICEAESFQoIb2ZmZXJfaWQYAyABKAlIAIgBARIlCglyZXF1ZXN0ZXIYBCABKAsyEi5yYW1wLnYxLlJlcXVlc3RlchIcCg9vZmZlcl9zaWduYXR1cmUYBiABKAlIAYgBARInCgVpdGVtcxgHIAMoCzIYLnJhbXAudjEuVHJhbnNhY3Rpb25JdGVtEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQgsKCV9vZmZlcl9pZEISChBfb2ZmZXJfc2lnbmF0dXJlIjwKD1RyYW5zYWN0aW9uSXRlbRIQCghvZmZlcl9pZBgBIAEoCRIXCg9vZmZlcl9zaWduYXR1cmUYAiABKAki2wYKE1RyYW5zYWN0aW9uUmVzcG9uc2USCwoDdmVyGAEgASgJEhsKDnRyYW5zYWN0aW9uX2lkGAMgASgJSACIAQESFwoKYmlsbGluZ19pZBgEIAEoCUgBiAEBEhsKDnJlc291cmNlX3RpdGxlGAUgASgJSAKIAQESIAoEY29zdBgGIAEoCzINLnJhbXAudjEuQ29zdEgDiAEBEjAKD2RlbGl2ZXJ5X21ldGhvZBgHIAEoDjIXLnJhbXAudjEuRGVsaXZlcnlNZXRob2QSPwoUcmVwb3J0aW5nX29ibGlnYXRpb24YCCABKAsyHC5yYW1wLnYxLlJlcG9ydGluZ09ibGlnYXRpb25IBIgBARIzCgpleHBpcmVzX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgFiAEBEhsKE2FnZW50X2lkZW50aXR5X2hhc2gYCiABKAkSHwoScmV0cmlldmFsX2VuZHBvaW50GBIgASgJSAaIAQESHAoPc3Vic2NyaXB0aW9uX2lkGAwgASgJSAeIAQESMwoXc3Vic2NyaXB0aW9uX3VuaXRfdmFsdWUYECABKAsyDS5yYW1wLnYxLkNvc3RICIgBARItCgVpdGVtcxgNIAMoCzIeLnJhbXAudjEuVHJhbnNhY3Rpb25SZXN1bHRJdGVtEiYKCnRvdGFsX2Nvc3QYDiABKAsyDS5yYW1wLnYxLkNvc3RICYgBARI6ChJzdWJzY3JpcHRpb25fcXVvdGEYESADKAsyHi5yYW1wLnYxLlN1YnNjcmlwdGlvblF1b3RhSW5mbxIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUIRCg9fdHJhbnNhY3Rpb25faWRCDQoLX2JpbGxpbmdfaWRCEQoPX3Jlc291cmNlX3RpdGxlQgcKBV9jb3N0QhcKFV9yZXBvcnRpbmdfb2JsaWdhdGlvbkINCgtfZXhwaXJlc19hdEIVChNfcmV0cmlldmFsX2VuZHBvaW50QhIKEF9zdWJzY3JpcHRpb25faWRCGgoYX3N1YnNjcmlwdGlvbl91bml0X3ZhbHVlQg0KC190b3RhbF9jb3N0IqwFChVUcmFuc2FjdGlvblJlc3VsdEl0ZW0SEAoIb2ZmZXJfaWQYASABKAkSFgoOdHJhbnNhY3Rpb25faWQYAiABKAkSEgoKYmlsbGluZ19pZBgDIAEoCRIbCg5yZXNvdXJjZV90aXRsZRgEIAEoCUgAiAEBEhsKBGNvc3QYBSABKAsyDS5yYW1wLnYxLkNvc3QSHAoPc3Vic2NyaXB0aW9uX2lkGAYgASgJSAGIAQESMwoXc3Vic2NyaXB0aW9uX3VuaXRfdmFsdWUYCyABKAsyDS5yYW1wLnYxLkNvc3RIAogBARIxCg1kZW5pYWxfcmVhc29uGAcgASgOMhUucmFtcC52MS5EZW5pYWxSZWFzb25IA4gBARI4ChZyZXN0cmljdGlvbl9taXNtYXRjaGVzGA0gAygOMhgucmFtcC52MS5SZXN0cmljdGlvbktpbmQSMwoKZXhwaXJlc19hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIBIgBARIfChJyZXRyaWV2YWxfZW5kcG9pbnQYDCABKAlIBYgBARIwCg9kZWxpdmVyeV9tZXRob2QYCSABKA4yFy5yYW1wLnYxLkRlbGl2ZXJ5TWV0aG9kEj8KFHJlcG9ydGluZ19vYmxpZ2F0aW9uGAogASgLMhwucmFtcC52MS5SZXBvcnRpbmdPYmxpZ2F0aW9uSAaIAQFCEQoPX3Jlc291cmNlX3RpdGxlQhIKEF9zdWJzY3JpcHRpb25faWRCGgoYX3N1YnNjcmlwdGlvbl91bml0X3ZhbHVlQhAKDl9kZW5pYWxfcmVhc29uQg0KC19leHBpcmVzX2F0QhUKE19yZXRyaWV2YWxfZW5kcG9pbnRCFwoVX3JlcG9ydGluZ19vYmxpZ2F0aW9uIk4KBENvc3QSDgoGYW1vdW50GAEgASgBEhAKCGN1cnJlbmN5GAIgASgJEhYKCXVuaXRfY29zdBgDIAEoAUgAiAEBQgwKCl91bml0X2Nvc3QirgEKFFB1c2hSZXNvdXJjZXNSZXF1ZXN0EgsKA3ZlchgBIAEoCRIRCgl0ZW5hbnRfaWQYAiABKAkSJwoHZW50cmllcxgDIAMoCzIWLnJhbXAudjEuUmVzb3VyY2VFbnRyeRIRCgljYWxsZXJfaWQYBCABKAkSJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAkihgUKDVJlc291cmNlRW50cnkSDgoGZG9tYWluGAEgASgJEgwKBHBhdGgYAiABKAkSFwoKY29udGVudF9pZBgDIAEoCUgAiAEBEhIKBXRpdGxlGAQgASgJSAGIAQESFwoKd29yZF9jb3VudBgFIAEoBUgCiAEBEh8KEmVzdGltYXRlZF9xdWFudGl0eRgGIAEoBUgDiAEBEhkKDGNvbnRlbnRfaGFzaBgHIAEoCUgEiAEBEhgKC2hhc2hfbWV0aG9kGAggASgJSAWIAQESLQoGc291cmNlGAkgASgOMhgucmFtcC52MS5Jbmdlc3Rpb25Tb3VyY2VIBogBARIeChFwcm92ZW5hbmNlX3NvdXJjZRgKIAEoCUgHiAEBEj0KFHByb3ZlbmFuY2VfdGltZXN0YW1wGAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgIiAEBEjIKDGF0dGVzdGF0aW9ucxgMIAMoCzIcLnJhbXAudjEuUmVzb3VyY2VBdHRlc3RhdGlvbhIjCgV0ZXJtcxgNIAMoCzIULnJhbXAudjEuTGljZW5zZVRlcm0SJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCDQoLX2NvbnRlbnRfaWRCCAoGX3RpdGxlQg0KC193b3JkX2NvdW50QhUKE19lc3RpbWF0ZWRfcXVhbnRpdHlCDwoNX2NvbnRlbnRfaGFzaEIOCgxfaGFzaF9tZXRob2RCCQoHX3NvdXJjZUIUChJfcHJvdmVuYW5jZV9zb3VyY2VCFwoVX3Byb3ZlbmFuY2VfdGltZXN0YW1wIpYBChVQdXNoUmVzb3VyY2VzUmVzcG9uc2USCwoDdmVyGAEgASgJEhAKCGFjY2VwdGVkGAIgASgFEhAKCHJlamVjdGVkGAMgASgFEhAKCHdhcm5pbmdzGAQgAygJEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJIkcKFlJlbW92ZVJlc291cmNlc1JlcXVlc3QSCwoDdmVyGAEgASgJEhEKCXRlbmFudF9pZBgCIAEoCRINCgVwYXRocxgDIAMoCSI3ChdSZW1vdmVSZXNvdXJjZXNSZXNwb25zZRILCgN2ZXIYASABKAkSDwoHcmVtb3ZlZBgCIAEoBSI3ChVSZWZyZXNoQ2F0YWxvZ1JlcXVlc3QSCwoDdmVyGAEgASgJEhEKCXRlbmFudF9pZBgCIAEoCSI2ChZSZWZyZXNoQ2F0YWxvZ1Jlc3BvbnNlEgsKA3ZlchgBIAEoCRIPCgdzdGFydGVkGAIgASgIItsBChNSZXBvcnRpbmdPYmxpZ2F0aW9uEhAKCHJlcXVpcmVkGAEgASgIEi4KBndpbmRvdxgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkgAiAEBEhUKCGVuZHBvaW50GAMgASgJSAGIAQESFwoPcmVxdWlyZWRfZmllbGRzGAQgAygJEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQgkKB193aW5kb3dCCwoJX2VuZHBvaW50IrsCCgtVc2FnZVJlcG9ydBILCgN2ZXIYASABKAkSIAoPaWRlbXBvdGVuY3lfa2V5GAIgASgJQge6SARyAhABEhYKDnRyYW5zYWN0aW9uX2lkGAMgASgJEhIKCmJpbGxpbmdfaWQYBCABKAkSHQoFdXNhZ2UYBSABKAsyDi5yYW1wLnYxLlVzYWdlEi0KCXRpbWVzdGFtcBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFQoIZXhjaGFuZ2UYCCABKAlIAIgBARIjCgZhc3NldHMYCSADKAsyEy5yYW1wLnYxLlVzYWdlQXNzZXQSJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCCwoJX2V4Y2hhbmdlIqwBChFBdHRyaWJ1dGlvbkRldGFpbBIaCg1kaXNwbGF5ZWRfdXJsGAEgASgJSACIAQESLAoGZm9ybWF0GAIgASgOMhcucmFtcC52MS5DaXRhdGlvbkZvcm1hdEgBiAEBEhwKD3Zpc2libGVfdG9fdXNlchgDIAEoCEgCiAEBQhAKDl9kaXNwbGF5ZWRfdXJsQgkKB19mb3JtYXRCEgoQX3Zpc2libGVfdG9fdXNlciLIAgoFVXNhZ2USEAoIZnVuY3Rpb24YASADKAkSDQoFc3ViZm4YAiADKAkSGQoRY29uc3VtZWRfcXVhbnRpdHkYAyABKAUSHgoRZGlzcGxheWVkX3RvX3VzZXIYBCABKAhIAIgBARIeChFjaXRhdGlvbl9pbmNsdWRlZBgFIAEoCEgBiAEBEi8KC2F0dHJpYnV0aW9uGAYgAygLMhoucmFtcC52MS5BdHRyaWJ1dGlvbkRldGFpbBJUCg1jb25zdW1lZF91bml0GAggASgJQji6SDVyMxhAMi9eKFthLXowLTktXSt8W0EtWmEtejAtOS5fLV0rOltBLVphLXowLTkuXy1dKyk/JEgCiAEBQhQKEl9kaXNwbGF5ZWRfdG9fdXNlckIUChJfY2l0YXRpb25faW5jbHVkZWRCEAoOX2NvbnN1bWVkX3VuaXQiXwoKVXNhZ2VBc3NldBILCgN1cmkYASABKAkSEgoFdGl0bGUYAiABKAlIAIgBARIXCgpwYWNrYWdlX2lkGAMgASgJSAGIAQFCCAoGX3RpdGxlQg0KC19wYWNrYWdlX2lkInEKE1VzYWdlUmVwb3J0UmVzcG9uc2USCwoDdmVyGAEgASgJEhEKCXJlcG9ydF9pZBgDIAEoCRIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCSKtAwoLUkFNUFJlcXVlc3QSCwoDdmVyGAEgASgJEgoKAmlkGAIgASgJEiUKCXJlcXVlc3RlchgDIAEoCzISLnJhbXAudjEuUmVxdWVzdGVyEhcKBHVyaXMYCCADKAlCCbpIBpIBAxCAAhI/ChdhY2NlcHRhYmxlX3Jlc3RyaWN0aW9ucxgJIAMoCzIeLnJhbXAudjEuQWNjZXB0YWJsZVJlc3RyaWN0aW9uEjUKC2NvbnN0cmFpbnRzGAQgASgLMhsucmFtcC52MS5SZXF1ZXN0Q29uc3RyYWludHNIAIgBARIaChJzdXBwb3J0ZWRfcHJvZmlsZXMYBSADKAkSEgoFcXVlcnkYBiABKAlIAYgBARI0Cg5zZWFyY2hfZmlsdGVycxgHIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAogBARIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUIOCgxfY29uc3RyYWludHNCCAoGX3F1ZXJ5QhEKD19zZWFyY2hfZmlsdGVycyKwBAoSUmVxdWVzdENvbnN0cmFpbnRzEhEKCWV4Y2hhbmdlcxgBIAMoCRIlCgltYXhfcHJpY2UYAiABKAsyDS5yYW1wLnYxLkNvc3RIAIgBARIaCg1tYXhfdW5pdF9jb3N0GAMgASgBSAGIAQESNAoTZGVsaXZlcnlfcHJlZmVyZW5jZRgEIAMoDjIXLnJhbXAudjEuRGVsaXZlcnlNZXRob2QSHgoRcmVwb3J0aW5nX2NhcGFibGUYBSABKAhIAogBARIbChNwcmVmZXJyZWRfZXhjaGFuZ2VzGAYgAygJEhkKDGJ1ZGdldF9zY29wZRgHIAEoCUgDiAEBEikKDXBlcmlvZF9idWRnZXQYCCABKAsyDS5yYW1wLnYxLkNvc3RIBIgBARI1Cg1idWRnZXRfcGVyaW9kGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uSAWIAQESNAoMbWF4X2RhdGFfYWdlGAogASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uSAaIAQESFQoIbWF4X2hvcHMYCyABKAVIB4gBAUIMCgpfbWF4X3ByaWNlQhAKDl9tYXhfdW5pdF9jb3N0QhQKEl9yZXBvcnRpbmdfY2FwYWJsZUIPCg1fYnVkZ2V0X3Njb3BlQhAKDl9wZXJpb2RfYnVkZ2V0QhAKDl9idWRnZXRfcGVyaW9kQg8KDV9tYXhfZGF0YV9hZ2VCCwoJX21heF9ob3BzIn8KCkpzb25XZWJLZXkSCwoDa2lkGAEgASgJEgsKA2t0eRgCIAEoCRILCgNjcnYYAyABKAkSCwoDdXNlGAQgASgJEgsKA2FsZxgFIAEoCRIJCgF4GAYgASgJEhIKCm5vdF9iZWZvcmUYByABKAkSEQoJbm90X2FmdGVyGAggASgJIsIJChFXZWxsS25vd25NYW5pZmVzdBILCgN2ZXIYASABKAkSJQoEcm9sZRgCIAEoDjINLnJhbXAudjEuUm9sZUIIukgFggECIAASDgoGZG9tYWluGAMgASgJEhQKB2NvbnRhY3QYBCABKAlIAIgBARIoCgtwdWJsaWNfa2V5cxgFIAMoCzITLnJhbXAudjEuSnNvbldlYktleRIdChBpbnZhbGlkYXRpb25fdXJsGAYgASgJSAGIAQESLgoJZXhjaGFuZ2VzGAcgAygLMhsucmFtcC52MS5BdXRob3JpemVkRXhjaGFuZ2USOQoUY2F0YWxvZ19jb250cmlidXRvcnMYCCADKAsyGy5yYW1wLnYxLkNhdGFsb2dDb250cmlidXRvchIRCgRuYW1lGAkgASgJSAKIAQESFQoIb3BlcmF0b3IYCiABKAlIA4gBARIcCg9vcGVyYXRvcl9kb21haW4YCyABKAlIBIgBARIVCghlbmRwb2ludBgMIAEoCUgFiAEBEhwKD2hlYWx0aF9lbmRwb2ludBgNIAEoCUgGiAEBEh0KEGNhdGFsb2dfZW5kcG9pbnQYDiABKAlIB4gBARIjChtwcm90b2NvbF92ZXJzaW9uc19zdXBwb3J0ZWQYECADKAkSNwoYcHJpY2luZ19tb2RlbHNfc3VwcG9ydGVkGBEgAygOMhUucmFtcC52MS5QcmljaW5nTW9kZWwSOwoaZGVsaXZlcnlfbWV0aG9kc19zdXBwb3J0ZWQYEiADKA4yFy5yYW1wLnYxLkRlbGl2ZXJ5TWV0aG9kEh4KFmhhc2hfbWV0aG9kc19zdXBwb3J0ZWQYEyADKAkSGgoSYWNjZXB0ZWRfdmVyaWZpZXJzGBQgAygJEhYKCXRlcm1zX3VyaRgVIAEoCUgIiAEBEhgKC3ByaXZhY3lfdXJpGBYgASgJSAmIAQESGgoSc3VwcG9ydGVkX3Byb2ZpbGVzGBcgAygJEjMKFnN1cHBvcnRlZF9hdXRoX21ldGhvZHMYGCADKA4yEy5yYW1wLnYxLkF1dGhNZXRob2QSGAoLb2lkY19pc3N1ZXIYGSABKAlICogBARIgChNnbmFwX2dyYW50X2VuZHBvaW50GBogASgJSAuIAQESGgoNYmFzZV9jdXJyZW5jeRgbIAEoCUgMiAEBEiIKFW1heF9pbnRlcm1lZGlhcnlfaG9wcxgcIAEoBUgNiAEBEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJQgoKCF9jb250YWN0QhMKEV9pbnZhbGlkYXRpb25fdXJsQgcKBV9uYW1lQgsKCV9vcGVyYXRvckISChBfb3BlcmF0b3JfZG9tYWluQgsKCV9lbmRwb2ludEISChBfaGVhbHRoX2VuZHBvaW50QhMKEV9jYXRhbG9nX2VuZHBvaW50QgwKCl90ZXJtc191cmlCDgoMX3ByaXZhY3lfdXJpQg4KDF9vaWRjX2lzc3VlckIWChRfZ25hcF9ncmFudF9lbmRwb2ludEIQCg5fYmFzZV9jdXJyZW5jeUIYChZfbWF4X2ludGVybWVkaWFyeV9ob3BzIlEKE0tleUludmFsaWRhdGlvbkxpc3QSKQoFYXNfb2YYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg8KB3Jldm9rZWQYAiADKAkiOgoSQ2F0YWxvZ0NvbnRyaWJ1dG9yEg4KBmRvbWFpbhgBIAEoCRIUCgxyZWxhdGlvbnNoaXAYAiABKAkisQEKEkF1dGhvcml6ZWRFeGNoYW5nZRIOCgZkb21haW4YASABKAkSEAoIZW5kcG9pbnQYAiABKAkSPQoMcmVsYXRpb25zaGlwGAMgASgOMh0ucmFtcC52MS5Qcm92aWRlclJlbGF0aW9uc2hpcEIIukgFggECIAASJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAkiqAUKDFJBTVBSZXNwb25zZRILCgN2ZXIYASABKAkSFgoOdHJhbnNhY3Rpb25faWQYBCABKAkSEgoKYmlsbGluZ19pZBgFIAEoCRIQCghleGNoYW5nZRgGIAEoCRIbCg5yZXNvdXJjZV90aXRsZRgHIAEoCUgAiAEBEhsKBGNvc3QYCCABKAsyDS5yYW1wLnYxLkNvc3QSMAoPZGVsaXZlcnlfbWV0aG9kGAkgASgOMhcucmFtcC52MS5EZWxpdmVyeU1ldGhvZBI/ChRyZXBvcnRpbmdfb2JsaWdhdGlvbhgKIAEoCzIcLnJhbXAudjEuUmVwb3J0aW5nT2JsaWdhdGlvbkgBiAEBEjMKCmV4cGlyZXNfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESHwoScmV0cmlldmFsX2VuZHBvaW50GA0gASgJSAOIAQESIAoTYWdlbnRfaWRlbnRpdHlfaGFzaBgOIAEoCUgEiAEBEiYKCmJyb2tlcl9mZWUYDCABKAsyDS5yYW1wLnYxLkNvc3RIBYgBARI4Cg5hYnNlbmNlX3JlYXNvbhgQIAEoDjIbLnJhbXAudjEuT2ZmZXJBYnNlbmNlUmVhc29uSAaIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCEQoPX3Jlc291cmNlX3RpdGxlQhcKFV9yZXBvcnRpbmdfb2JsaWdhdGlvbkINCgtfZXhwaXJlc19hdEIVChNfcmV0cmlldmFsX2VuZHBvaW50QhYKFF9hZ2VudF9pZGVudGl0eV9oYXNoQg0KC19icm9rZXJfZmVlQhEKD19hYnNlbmNlX3JlYXNvbiKQAwoORGlzcHV0ZVJlcXVlc3QSCwoDdmVyGAEgASgJEiAKD2lkZW1wb3RlbmN5X2tleRgCIAEoCUIHukgEcgIQARIWCg50cmFuc2FjdGlvbl9pZBgDIAEoCRISCgpiaWxsaW5nX2lkGAQgASgJEjAKBnJlYXNvbhgFIAEoDjIWLnJhbXAudjEuRGlzcHV0ZVJlYXNvbkIIukgFggECIAASGAoLZGVzY3JpcHRpb24YBiABKAlIAIgBARIiChVyZWNlaXZlZF9jb250ZW50X2hhc2gYByABKAlIAYgBARIhChRyZWNlaXZlZF9oYXNoX21ldGhvZBgIIAEoCUgCiAEBEhEKCXJlcG9ydF9pZBgJIAEoCRIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUIOCgxfZGVzY3JpcHRpb25CGAoWX3JlY2VpdmVkX2NvbnRlbnRfaGFzaEIXChVfcmVjZWl2ZWRfaGFzaF9tZXRob2QiwgIKD0Rpc3B1dGVSZXNwb25zZRILCgN2ZXIYASABKAkSFwoKZGlzcHV0ZV9pZBgCIAEoCUgAiAEBEjwKFGVzdGltYXRlZF9yZXNvbHV0aW9uGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uSAGIAQESJgoGc3RhdHVzGAUgASgOMhYucmFtcC52MS5EaXNwdXRlU3RhdHVzEjAKCnJlc29sdXRpb24YBiABKA4yFy5yYW1wLnYxLlJlc29sdXRpb25UeXBlSAKIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCDQoLX2Rpc3B1dGVfaWRCFwoVX2VzdGltYXRlZF9yZXNvbHV0aW9uQg0KC19yZXNvbHV0aW9uIpoBChlEb21haW5WZXJpZmljYXRpb25SZXF1ZXN0EgsKA3ZlchgBIAEoCRIOCgZkb21haW4YAiABKAkSFgoJY2FsbGVyX2lkGAMgASgJSACIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCDAoKX2NhbGxlcl9pZCK/AQobRG9tYWluVmVyaWZpY2F0aW9uQ2hhbGxlbmdlEgsKA3ZlchgBIAEoCRINCgV0b2tlbhgCIAEoCRIuCgpleHBpcmVzX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIYChB2ZXJpZmljYXRpb25fdXJsGAQgASgJEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSFAoMZXh0X2NyaXRpY2FsGFogAygJItYBCh5Eb21haW5WZXJpZmljYXRpb25Db25maXJtYXRpb24SCwoDdmVyGAEgASgJEg4KBmRvbWFpbhgCIAEoCRINCgV0b2tlbhgDIAEoCRIYCgtzaWduaW5nX2tleRgEIAEoCUgAiAEBEhUKCGNkbl90eXBlGAUgASgJSAGIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIUCgxleHRfY3JpdGljYWwYWiADKAlCDgoMX3NpZ25pbmdfa2V5QgsKCV9jZG5fdHlwZSLJAQoYRG9tYWluVmVyaWZpY2F0aW9uUmVzdWx0EgsKA3ZlchgBIAEoCRITCgZrZXlfaWQYAiABKAlIAIgBARI0Cgt2YWxpZF91bnRpbBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBARIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhQKDGV4dF9jcml0aWNhbBhaIAMoCUIJCgdfa2V5X2lkQg4KDF92YWxpZF91bnRpbCLQBAoLRXJyb3JEZXRhaWwSDwoHbWVzc2FnZRgBIAEoCRIOCgZkb21haW4YAiABKAkSNAoIbWV0YWRhdGEYAyADKAsyIi5yYW1wLnYxLkVycm9yRGV0YWlsLk1ldGFkYXRhRW50cnkSOAoSdHJhbnNhY3Rpb25fZGVuaWFsGAogASgLMhoucmFtcC52MS5UcmFuc2FjdGlvbkRlbmlhbEgAEjYKEWNhdGFsb2dfcmVqZWN0aW9uGAsgASgLMhkucmFtcC52MS5DYXRhbG9nUmVqZWN0aW9uSAASPAoUcmVnaXN0cmF0aW9uX2ZhaWx1cmUYDCABKAsyHC5yYW1wLnYxLlJlZ2lzdHJhdGlvbkZhaWx1cmVIABIyCg9kaXNwdXRlX2ZhaWx1cmUYDSABKAsyFy5yYW1wLnYxLkRpc3B1dGVGYWlsdXJlSAASSQobZG9tYWluX3ZlcmlmaWNhdGlvbl9mYWlsdXJlGA4gASgLMiIucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25GYWlsdXJlSAASPwoWcmV0cmlldmFsX2F1dGhfZmFpbHVyZRgPIAEoCzIdLnJhbXAudjEuUmV0cmlldmFsQXV0aEZhaWx1cmVIABI/ChZ1c2FnZV9yZXBvcnRfcmVqZWN0aW9uGBAgASgLMh0ucmFtcC52MS5Vc2FnZVJlcG9ydFJlamVjdGlvbkgAGi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIICgZyZWFzb24ipAEKEVRyYW5zYWN0aW9uRGVuaWFsEjEKBnJlYXNvbhgBIAEoDjIVLnJhbXAudjEuRGVuaWFsUmVhc29uQgq6SAeCAQQQASAAEjgKFnJlc3RyaWN0aW9uX21pc21hdGNoZXMYAiADKA4yGC5yYW1wLnYxLlJlc3RyaWN0aW9uS2luZBIVCghvZmZlcl9pZBgDIAEoCUgAiAEBQgsKCV9vZmZlcl9pZCJnChBDYXRhbG9nUmVqZWN0aW9uEjsKBnJlYXNvbhgBIAEoDjIfLnJhbXAudjEuQ2F0YWxvZ1JlamVjdGlvblJlYXNvbkIKukgHggEEEAEgABIWCg5yZWplY3RlZF9wYXRocxgCIAMoCSJVChNSZWdpc3RyYXRpb25GYWlsdXJlEj4KBnJlYXNvbhgBIAEoDjIiLnJhbXAudjEuUmVnaXN0cmF0aW9uRmFpbHVyZVJlYXNvbkIKukgHggEEEAEgACJLCg5EaXNwdXRlRmFpbHVyZRI5CgZyZWFzb24YASABKA4yHS5yYW1wLnYxLkRpc3B1dGVGYWlsdXJlUmVhc29uQgq6SAeCAQQQASAAImEKGURvbWFpblZlcmlmaWNhdGlvbkZhaWx1cmUSRAoGcmVhc29uGAEgASgOMigucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25GYWlsdXJlUmVhc29uQgq6SAeCAQQQASAAIlcKFFJldHJpZXZhbEF1dGhGYWlsdXJlEj8KBnJlYXNvbhgBIAEoDjIjLnJhbXAudjEuUmV0cmlldmFsQXV0aEZhaWx1cmVSZWFzb25CCrpIB4IBBBABIAAiVwoUVXNhZ2VSZXBvcnRSZWplY3Rpb24SPwoGcmVhc29uGAEgASgOMiMucmFtcC52MS5Vc2FnZVJlcG9ydFJlamVjdGlvblJlYXNvbkIKukgHggEEEAEgACq2AQoPRGlzY292ZXJ5TWV0aG9kEiAKHERJU0NPVkVSWV9NRVRIT0RfVU5TUEVDSUZJRUQQABIdChlESVNDT1ZFUllfTUVUSE9EX0VYQ0hBTkdFEAESGwoXRElTQ09WRVJZX01FVEhPRF9TRUFSQ0gQAhIjCh9ESVNDT1ZFUllfTUVUSE9EX1JFQ09NTUVOREFUSU9OEAMSIAocRElTQ09WRVJZX01FVEhPRF9TWU5ESUNBVElPThAEKvkCChJPZmZlckFic2VuY2VSZWFzb24SJAogT0ZGRVJfQUJTRU5DRV9SRUFTT05fVU5TUEVDSUZJRUQQABInCiNPRkZFUl9BQlNFTkNFX1JFQVNPTl9OT1RfSU5fQ0FUQUxPRxABEigKJE9GRkVSX0FCU0VOQ0VfUkVBU09OX0NPTlRFTlRfQkxPQ0tFRBACEi0KKU9GRkVSX0FCU0VOQ0VfUkVBU09OX1JFU1RSSUNUSU9OX0ZJTFRFUkVEEAMSMAosT0ZGRVJfQUJTRU5DRV9SRUFTT05fVEVNUE9SQVJJTFlfVU5BVkFJTEFCTEUQBBInCiNPRkZFUl9BQlNFTkNFX1JFQVNPTl9OT1RfQVVUSE9SSVpFRBAFEisKJ09GRkVSX0FCU0VOQ0VfUkVBU09OX1NDT1BFX0lOU1VGRklDSUVOVBAGEjMKL09GRkVSX0FCU0VOQ0VfUkVBU09OX1VOS05PV05fQ1JJVElDQUxfRVhURU5TSU9OEAcqcQoNVGVybVNlbWFudGljcxIeChpURVJNX1NFTUFOVElDU19VTlNQRUNJRklFRBAAEh0KGVRFUk1fU0VNQU5USUNTX0VOVU1FUkFURUQQARIhCh1URVJNX1NFTUFOVElDU19SRUZFUkVOQ0VfT05MWRACKuUECg9SZXN0cmljdGlvbktpbmQSIAocUkVTVFJJQ1RJT05fS0lORF9VTlNQRUNJRklFRBAAEr4CChlSRVNUUklDVElPTl9LSU5EX0ZVTkNUSU9OEAEangKStRgDYWxskrUYBmFpLWFsbJK1GAhhaS10cmFpbpK1GAhhaS1pbnB1dJK1GAhhaS1pbmRleJK1GAZzZWFyY2iStRgFY3Jhd2yStRgUdGV4dC1hbmQtZGF0YS1taW5pbmeStRgDdHRzkrUYCmNvbW1lcmNpYWyStRgLYWR2ZXJ0aXNpbmeStRgJZWRpdG9yaWFskrUYCHJlc2VhcmNokrUYCXJlcHJvZHVjZZK1GApkaXN0cmlidXRlkrUYBm1vZGlmeZK1GAdkaXNwbGF5krUYBHN5bmOStRgJYnJvYWRjYXN0krUYBnN0cmVhbZK1GAVwcmludJK1GAttYW51ZmFjdHVyZZK1GARzZWxsorUYDmZ1bmN0aW9udG9rZW5zEkUKGlJFU1RSSUNUSU9OX0tJTkRfR0VPR1JBUEhZEAIaJZK1GAEqkrUYAkVVkrUYA0VFQaK1GA9nZW9ncmFwaHl0b2tlbnMSiwEKGlJFU1RSSUNUSU9OX0tJTkRfVVNFUl9UWVBFEAMaa5K1GAppbmRpdmlkdWFskrUYCGFjYWRlbWljkrUYCm5vbl9wcm9maXSStRgObmV3c19wdWJsaXNoZXKStRgLYnJvYWRjYXN0ZXKStRgRY29tbWVyY2lhbF9lbnRpdHmitRgJdXNlcnR5cGVzEhoKFlJFU1RSSUNUSU9OX0tJTkRfT1RIRVIQBCqOAQoLUXVvdGFXaW5kb3cSHAoYUVVPVEFfV0lORE9XX1VOU1BFQ0lGSUVEEAASFwoTUVVPVEFfV0lORE9XX0hPVVJMWRABEhYKElFVT1RBX1dJTkRPV19EQUlMWRACEhgKFFFVT1RBX1dJTkRPV19NT05USExZEAMSFgoSUVVPVEFfV0lORE9XX1RPVEFMEAQq8gEKDk9ibGlnYXRpb25LaW5kEh8KG09CTElHQVRJT05fS0lORF9VTlNQRUNJRklFRBAAEh8KG09CTElHQVRJT05fS0lORF9BVFRSSUJVVElPThABEiAKHE9CTElHQVRJT05fS0lORF9DT05UUklCVVRJT04QAhIfChtPQkxJR0FUSU9OX0tJTkRfU0hBUkVfQUxJS0UQAxIkCiBPQkxJR0FUSU9OX0tJTkRfTkVUV09SS19DT1BZTEVGVBAEEhoKFk9CTElHQVRJT05fS0lORF9OT1RJQ0UQBRIZChVPQkxJR0FUSU9OX0tJTkRfT1RIRVIQBirPAQoRT2JsaWdhdGlvblRyaWdnZXISIgoeT0JMSUdBVElPTl9UUklHR0VSX1VOU1BFQ0lGSUVEEAASHQoZT0JMSUdBVElPTl9UUklHR0VSX09OX1VTRRABEiYKIk9CTElHQVRJT05fVFJJR0dFUl9PTl9ESVNUUklCVVRJT04QAhIpCiVPQkxJR0FUSU9OX1RSSUdHRVJfT05fTkVUV09SS19TRVJWSUNFEAMSJAogT0JMSUdBVElPTl9UUklHR0VSX09OX0RFUklWQVRJVkUQBCp5CgxQcmljaW5nTW9kZWwSHQoZUFJJQ0lOR19NT0RFTF9VTlNQRUNJRklFRBAAEhYKElBSSUNJTkdfTU9ERUxfRlJFRRABEhoKFlBSSUNJTkdfTU9ERUxfUEVSX1VOSVQQAhIWChJQUklDSU5HX01PREVMX0ZMQVQQAyp1Cg9QcmljaW5nTWV0ZXJpbmcSGwoXUFJJQ0lOR19NRVRFUklOR19PTkxJTkUQABIZChVQUklDSU5HX01FVEVSSU5HX05PTkUQARIqCiZQUklDSU5HX01FVEVSSU5HX09GRkxJTkVfU0VMRl9SRVBPUlRFRBACKo4BCg5EZWxpdmVyeU1ldGhvZBIfChtERUxJVkVSWV9NRVRIT0RfVU5TUEVDSUZJRUQQABIaChZERUxJVkVSWV9NRVRIT0RfRElSRUNUEAESIAocREVMSVZFUllfTUVUSE9EX0lOU1RSVUNUSU9OUxACEh0KGURFTElWRVJZX01FVEhPRF9TVFJFQU1JTkcQAyq/AQoNUmVxdWVzdGVyVHlwZRIeChpSRVFVRVNURVJfVFlQRV9VTlNQRUNJRklFRBAAEhgKFFJFUVVFU1RFUl9UWVBFX0FHRU5UEAESHQoZUkVRVUVTVEVSX1RZUEVfSFVNQU5fVE9PTBACEhoKFlJFUVVFU1RFUl9UWVBFX1NFUlZJQ0UQAxIcChhSRVFVRVNURVJfVFlQRV9ERUxFR0FURUQQBBIbChdSRVFVRVNURVJfVFlQRV9SRVNFQVJDSBAFKooBCgpDMlBBU3RhdHVzEhsKF0MyUEFfU1RBVFVTX1VOU1BFQ0lGSUVEEAASFwoTQzJQQV9TVEFUVVNfVFJVU1RFRBABEhUKEUMyUEFfU1RBVFVTX1ZBTElEEAISFwoTQzJQQV9TVEFUVVNfSU5WQUxJRBADEhYKEkMyUEFfU1RBVFVTX0FCU0VOVBAEKpgBChJSZXNvdXJjZU11dGFiaWxpdHkSIwofUkVTT1VSQ0VfTVVUQUJJTElUWV9VTlNQRUNJRklFRBAAEh4KGlJFU09VUkNFX01VVEFCSUxJVFlfU1RBVElDEAESHwobUkVTT1VSQ0VfTVVUQUJJTElUWV9EWU5BTUlDEAISHAoYUkVTT1VSQ0VfTVVUQUJJTElUWV9MSVZFEAMq7wUKDERlbmlhbFJlYXNvbhIdChlERU5JQUxfUkVBU09OX1VOU1BFQ0lGSUVEEAASJgoiREVOSUFMX1JFQVNPTl9CSUxMSU5HX1JFRl9JTkFDVElWRRABEiYKIkRFTklBTF9SRUFTT05fSU5TVUZGSUNJRU5UX0JBTEFOQ0UQAhIeChpERU5JQUxfUkVBU09OX1JBVEVfTElNSVRFRBADEiUKIURFTklBTF9SRUFTT05fQ09OVEVOVF9VTkFWQUlMQUJMRRAEEisKJ0RFTklBTF9SRUFTT05fUkVTVFJJQ1RJT05fTk9UX1NBVElTRklFRBAFEiMKH0RFTklBTF9SRUFTT05fUkVQT1JUSU5HX09WRVJEVUUQBhIfChtERU5JQUxfUkVBU09OX09GRkVSX0VYUElSRUQQBxIjCh9ERU5JQUxfUkVBU09OX1NJR05BVFVSRV9JTlZBTElEEAgSIAocREVOSUFMX1JFQVNPTl9RVU9UQV9FWENFRURFRBAJEiQKIERFTklBTF9SRUFTT05fREVMRUdBVElPTl9JTlZBTElEEAoSJAogREVOSUFMX1JFQVNPTl9TQ09QRV9JTlNVRkZJQ0lFTlQQCxIlCiFERU5JQUxfUkVBU09OX0VOVElUTEVNRU5UX01JU1NJTkcQDBInCiNERU5JQUxfUkVBU09OX0VOVElUTEVNRU5UX01BTEZPUk1FRBANEiUKIURFTklBTF9SRUFTT05fRU5USVRMRU1FTlRfRVhQSVJFRBAOEikKJURFTklBTF9SRUFTT05fRU5USVRMRU1FTlRfV1JPTkdfQlVZRVIQDxIlCiFERU5JQUxfUkVBU09OX1NVQlNDUklQVElPTl9MQVBTRUQQEBIpCiVERU5JQUxfUkVBU09OX0VOVElUTEVNRU5UX05PVF9HUkFOVEVEEBESLworREVOSUFMX1JFQVNPTl9FTlRJVExFTUVOVF9TVEFMRV9BVFRFTlVBVElPThASKowCCg9Jbmdlc3Rpb25Tb3VyY2USIAocSU5HRVNUSU9OX1NPVVJDRV9VTlNQRUNJRklFRBAAEiEKHUlOR0VTVElPTl9TT1VSQ0VfUkFNUF9TSVRFTUFQEAESGAoUSU5HRVNUSU9OX1NPVVJDRV9SU0wQAhIcChhJTkdFU1RJT05fU09VUkNFX1NJVEVNQVAQAxIfChtJTkdFU1RJT05fU09VUkNFX0hUTUxfQ1JBV0wQBBIcChhJTkdFU1RJT05fU09VUkNFX0NNU19BUEkQBRIbChdJTkdFU1RJT05fU09VUkNFX01BTlVBTBAGEiAKHElOR0VTVElPTl9TT1VSQ0VfQ0FUQUxPR19BUEkQBypkCg5DaXRhdGlvbkZvcm1hdBIYChRDSVRBVElPTl9GT1JNQVRfTElOSxAAEhwKGENJVEFUSU9OX0ZPUk1BVF9GT09UTk9URRABEhoKFkNJVEFUSU9OX0ZPUk1BVF9JTkxJTkUQAipkCgRSb2xlEhQKEFJPTEVfVU5TUEVDSUZJRUQQABIOCgpST0xFX0FHRU5UEAESEQoNUk9MRV9FWENIQU5HRRACEg8KC1JPTEVfQlJPS0VSEAMSEgoOUk9MRV9QVUJMSVNIRVIQBCqDAQoUUHJvdmlkZXJSZWxhdGlvbnNoaXASJQohUFJPVklERVJfUkVMQVRJT05TSElQX1VOU1BFQ0lGSUVEEAASIAocUFJPVklERVJfUkVMQVRJT05TSElQX0RJUkVDVBABEiIKHlBST1ZJREVSX1JFTEFUSU9OU0hJUF9SRVNFTExFUhACKpUBCgpBdXRoTWV0aG9kEhsKF0FVVEhfTUVUSE9EX1VOU1BFQ0lGSUVEEAASFAoQQVVUSF9NRVRIT0RfR05BUBABEhoKFkFVVEhfTUVUSE9EX09BVVRIX0RQT1AQAhIcChhBVVRIX01FVEhPRF9PQVVUSF9CRUFSRVIQAxIaChZBVVRIX01FVEhPRF9PQVVUSF9NVExTEAQq6gEKDURpc3B1dGVSZWFzb24SHgoaRElTUFVURV9SRUFTT05fVU5TUEVDSUZJRUQQABIjCh9ESVNQVVRFX1JFQVNPTl9DT05URU5UX01JU01BVENIEAESIgoeRElTUFVURV9SRUFTT05fREVMSVZFUllfRkFJTEVEEAISIAocRElTUFVURV9SRUFTT05fV1JPTkdfQ09OVEVOVBADEicKI0RJU1BVVEVfUkVBU09OX0VYUElSRURfQkVGT1JFX0ZFVENIEAQSJQohRElTUFVURV9SRUFTT05fSU5DT01QTEVURV9DT05URU5UEAUqvgIKDURpc3B1dGVTdGF0dXMSHgoaRElTUFVURV9TVEFUVVNfVU5TUEVDSUZJRUQQABIYChRESVNQVVRFX1NUQVRVU19GSUxFRBABEiAKHERJU1BVVEVfU1RBVFVTX0FVVE9fUkVTT0xWRUQQAhIiCh5ESVNQVVRFX1NUQVRVU19FVklERU5DRV9ORUVERUQQAxIfChtESVNQVVRFX1NUQVRVU19VTkRFUl9SRVZJRVcQBBIcChhESVNQVVRFX1NUQVRVU19FU0NBTEFURUQQBRIbChdESVNQVVRFX1NUQVRVU19SRVNPTFZFRBAGEhsKF0RJU1BVVEVfU1RBVFVTX0FQUEVBTEVEEAcSGgoWRElTUFVURV9TVEFUVVNfU0VUVExFRBAIEhgKFERJU1BVVEVfU1RBVFVTX0ZJTkFMEAkqrgEKDlJlc29sdXRpb25UeXBlEh8KG1JFU09MVVRJT05fVFlQRV9VTlNQRUNJRklFRBAAEhoKFlJFU09MVVRJT05fVFlQRV9DUkVESVQQARIeChpSRVNPTFVUSU9OX1RZUEVfUkVERUxJVkVSWRACEhwKGFJFU09MVVRJT05fVFlQRV9SRUpFQ1RFRBADEiEKHVJFU09MVVRJT05fVFlQRV9JTlZFU1RJR0FUSU9OEAQqlQMKFkNhdGFsb2dSZWplY3Rpb25SZWFzb24SKAokQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX1VOU1BFQ0lGSUVEEAASNAowQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX05PVF9DQVRBTE9HX0NPTlRSSUJVVE9SEAESLAooQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX1RFTkFOVF9NSVNNQVRDSBACEjAKLENBVEFMT0dfUkVKRUNUSU9OX1JFQVNPTl9ET01BSU5fTk9UX1ZFUklGSUVEEAMSLgoqQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX1NJR05BVFVSRV9JTlZBTElEEAQSLAooQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX01BTEZPUk1FRF9FTlRSWRAFEjAKLENBVEFMT0dfUkVKRUNUSU9OX1JFQVNPTl9VTktOT1dOX1ZPQ0FCX1RPS0VOEAYSKwonQ0FUQUxPR19SRUpFQ1RJT05fUkVBU09OX1FVT1RBX0VYQ0VFREVEEAcqwQIKGVJlZ2lzdHJhdGlvbkZhaWx1cmVSZWFzb24SKwonUkVHSVNUUkFUSU9OX0ZBSUxVUkVfUkVBU09OX1VOU1BFQ0lGSUVEEAASMwovUkVHSVNUUkFUSU9OX0ZBSUxVUkVfUkVBU09OX0RPTUFJTl9OT1RfVkVSSUZJRUQQARIrCidSRUdJU1RSQVRJT05fRkFJTFVSRV9SRUFTT05fSU5WQUxJRF9LRVkQAhIxCi1SRUdJU1RSQVRJT05fRkFJTFVSRV9SRUFTT05fU0lHTkFUVVJFX0lOVkFMSUQQAxIyCi5SRUdJU1RSQVRJT05fRkFJTFVSRV9SRUFTT05fQUxSRUFEWV9SRUdJU1RFUkVEEAQSLgoqUkVHSVNUUkFUSU9OX0ZBSUxVUkVfUkVBU09OX1FVT1RBX0VYQ0VFREVEEAUqlQIKFERpc3B1dGVGYWlsdXJlUmVhc29uEiYKIkRJU1BVVEVfRkFJTFVSRV9SRUFTT05fVU5TUEVDSUZJRUQQABIwCixESVNQVVRFX0ZBSUxVUkVfUkVBU09OX1RSQU5TQUNUSU9OX05PVF9GT1VORBABEisKJ0RJU1BVVEVfRkFJTFVSRV9SRUFTT05fUkVQT1JUX05PVF9GSUxFRBACEikKJURJU1BVVEVfRkFJTFVSRV9SRUFTT05fV0lORE9XX0VYUElSRUQQAxIkCiBESVNQVVRFX0ZBSUxVUkVfUkVBU09OX0RVUExJQ0FURRAEEiUKIURJU1BVVEVfRkFJTFVSRV9SRUFTT05fSU5FTElHSUJMRRAFKrsDCh9Eb21haW5WZXJpZmljYXRpb25GYWlsdXJlUmVhc29uEjIKLkRPTUFJTl9WRVJJRklDQVRJT05fRkFJTFVSRV9SRUFTT05fVU5TUEVDSUZJRUQQABI6CjZET01BSU5fVkVSSUZJQ0FUSU9OX0ZBSUxVUkVfUkVBU09OX0NIQUxMRU5HRV9OT1RfRk9VTkQQARI5CjVET01BSU5fVkVSSUZJQ0FUSU9OX0ZBSUxVUkVfUkVBU09OX0NIQUxMRU5HRV9NSVNNQVRDSBACEjgKNERPTUFJTl9WRVJJRklDQVRJT05fRkFJTFVSRV9SRUFTT05fQ0hBTExFTkdFX0VYUElSRUQQAxIzCi9ET01BSU5fVkVSSUZJQ0FUSU9OX0ZBSUxVUkVfUkVBU09OX0ZFVENIX0ZBSUxFRBAEEj4KOkRPTUFJTl9WRVJJRklDQVRJT05fRkFJTFVSRV9SRUFTT05fRVhDSEFOR0VfTk9UX0FVVEhPUklaRUQQBRI+CjpET01BSU5fVkVSSUZJQ0FUSU9OX0ZBSUxVUkVfUkVBU09OX0tFWV9SRUdJU1RSQVRJT05fRkFJTEVEEAYq2QUKGlJldHJpZXZhbEF1dGhGYWlsdXJlUmVhc29uEi0KKVJFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX1VOU1BFQ0lGSUVEEAASLQopUkVUUklFVkFMX0FVVEhfRkFJTFVSRV9SRUFTT05fVVJMX0VYUElSRUQQARI3CjNSRVRSSUVWQUxfQVVUSF9GQUlMVVJFX1JFQVNPTl9VUkxfU0lHTkFUVVJFX01JU1NJTkcQAhI0CjBSRVRSSUVWQUxfQVVUSF9GQUlMVVJFX1JFQVNPTl9VUkxfRVhQSVJZX01JU1NJTkcQAxI4CjRSRVRSSUVWQUxfQVVUSF9GQUlMVVJFX1JFQVNPTl9VUkxfU0lHTkFUVVJFX01JU01BVENIEAQSMwovUkVUUklFVkFMX0FVVEhfRkFJTFVSRV9SRUFTT05fQUdFTlRfS0VZX01JU1NJTkcQBRI5CjVSRVRSSUVWQUxfQVVUSF9GQUlMVVJFX1JFQVNPTl9QUk9PRl9TSUdOQVRVUkVfTUlTU0lORxAGEjAKLFJFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX0tFWUlEX01JU01BVENIEAcSNQoxUkVUUklFVkFMX0FVVEhfRkFJTFVSRV9SRUFTT05fVEhVTUJQUklOVF9NSVNNQVRDSBAIEjcKM1JFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX1BST09GX0NSRUFURURfTUlTU0lORxAJEjYKMlJFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX1BST09GX0VYUElSWV9NSVNTSU5HEAoSLworUkVUUklFVkFMX0FVVEhfRkFJTFVSRV9SRUFTT05fUFJPT0ZfRVhQSVJFRBALEjkKNVJFVFJJRVZBTF9BVVRIX0ZBSUxVUkVfUkVBU09OX1BST09GX1NJR05BVFVSRV9JTlZBTElEEAwqywIKGlVzYWdlUmVwb3J0UmVqZWN0aW9uUmVhc29uEi0KKVVTQUdFX1JFUE9SVF9SRUpFQ1RJT05fUkVBU09OX1VOU1BFQ0lGSUVEEAASNwozVVNBR0VfUkVQT1JUX1JFSkVDVElPTl9SRUFTT05fVFJBTlNBQ1RJT05fTk9UX0ZPVU5EEAESKwonVVNBR0VfUkVQT1JUX1JFSkVDVElPTl9SRUFTT05fRFVQTElDQVRFEAISMAosVVNBR0VfUkVQT1JUX1JFSkVDVElPTl9SRUFTT05fV0lORE9XX0VYUElSRUQQAxI5CjVVU0FHRV9SRVBPUlRfUkVKRUNUSU9OX1JFQVNPTl9NSVNTSU5HX1JFUVVJUkVEX0ZJRUxEUxAEEisKJ1VTQUdFX1JFUE9SVF9SRUpFQ1RJT05fUkVBU09OX01BTEZPUk1FRBAFMoYECg9FeGNoYW5nZVNlcnZpY2USRgoRRGlzY292ZXJSZXNvdXJjZXMSFi5yYW1wLnYxLlJlc291cmNlUXVlcnkaGS5yYW1wLnYxLlJlc291cmNlUmVzcG9uc2USTwoSRXhlY3V0ZVRyYW5zYWN0aW9uEhsucmFtcC52MS5UcmFuc2FjdGlvblJlcXVlc3QaHC5yYW1wLnYxLlRyYW5zYWN0aW9uUmVzcG9uc2USQQoLUmVwb3J0VXNhZ2USFC5yYW1wLnYxLlVzYWdlUmVwb3J0GhwucmFtcC52MS5Vc2FnZVJlcG9ydFJlc3BvbnNlEkcKEkRpc3B1dGVUcmFuc2FjdGlvbhIXLnJhbXAudjEuRGlzcHV0ZVJlcXVlc3QaGC5yYW1wLnYxLkRpc3B1dGVSZXNwb25zZRJlChlSZXF1ZXN0RG9tYWluVmVyaWZpY2F0aW9uEiIucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25SZXF1ZXN0GiQucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25DaGFsbGVuZ2USZwoZQ29uZmlybURvbWFpblZlcmlmaWNhdGlvbhInLnJhbXAudjEuRG9tYWluVmVyaWZpY2F0aW9uQ29uZmlybWF0aW9uGiEucmFtcC52MS5Eb21haW5WZXJpZmljYXRpb25SZXN1bHQyiQIKDkNhdGFsb2dTZXJ2aWNlEk4KDVB1c2hSZXNvdXJjZXMSHS5yYW1wLnYxLlB1c2hSZXNvdXJjZXNSZXF1ZXN0Gh4ucmFtcC52MS5QdXNoUmVzb3VyY2VzUmVzcG9uc2USVAoPUmVtb3ZlUmVzb3VyY2VzEh8ucmFtcC52MS5SZW1vdmVSZXNvdXJjZXNSZXF1ZXN0GiAucmFtcC52MS5SZW1vdmVSZXNvdXJjZXNSZXNwb25zZRJRCg5SZWZyZXNoQ2F0YWxvZxIeLnJhbXAudjEuUmVmcmVzaENhdGFsb2dSZXF1ZXN0Gh8ucmFtcC52MS5SZWZyZXNoQ2F0YWxvZ1Jlc3BvbnNlMkcKDUJyb2tlclNlcnZpY2USNgoHUmVzb2x2ZRIULnJhbXAudjEuUkFNUFJlcXVlc3QaFS5yYW1wLnYxLlJBTVBSZXNwb25zZUKOAQoLY29tLnJhbXAudjFCCVJhbXBQcm90b1ABWjdnaXRodWIuY29tL1JBTVAtUHJvdG9jb2wvcHJvdG9jb2wvZ2VuL2dvL3JhbXAvdjE7cmFtcHYxogIDUlhYqgIHUmFtcC5WMcoCB1JhbXBcVjHiAhNSYW1wXFYxXEdQQk1ldGFkYXRh6gIIUmFtcDo6VjFiBnByb3RvMw", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_google_protobuf_duration, file_buf_validate_validate, file_ramp_v1_vocab]); /** * AcceptableRestriction — the limits a query operates within on one restriction diff --git a/proto/ramp/v1/ramp.proto b/proto/ramp/v1/ramp.proto index 65829538..55f59979 100644 --- a/proto/ramp/v1/ramp.proto +++ b/proto/ramp/v1/ramp.proto @@ -124,11 +124,9 @@ message AcceptableRestriction { // as the terms (e.g. FUNCTION ["ai-train"], GEOGRAPHY ["US", "EU"]). repeated string values = 2 [ (buf.validate.field).repeated.max_items = 64, - (buf.validate.field).cel = { - id: "acceptable_restriction.values.format" - message: "each value must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)" - expression: "this.all(t, t.size() >= 1 && t.size() <= 64 && t.matches('^[A-Za-z0-9._:*-]+$'))" - } + (buf.validate.field).repeated.items.string.min_len = 1, + (buf.validate.field).repeated.items.string.max_len = 64, + (buf.validate.field).repeated.items.string.pattern = "^[A-Za-z0-9._:*-]+$" ]; } @@ -911,11 +909,7 @@ message License { // (allowlisted prefix + matching hex length); presence (digest-when-uri) is // enforced at ingest. optional string uri_digest = 5 [ - (buf.validate.field).cel = { - id: "license.uri_digest.format" - message: "uri_digest must be sha256:/sha384:/sha512: followed by a hex digest of the matching length" - expression: "this == '' || this.matches('^sha256:[0-9a-f]{64}$') || this.matches('^sha384:[0-9a-f]{96}$') || this.matches('^sha512:[0-9a-f]{128}$')" - } + (buf.validate.field).string.pattern = "^(sha256:[0-9a-f]{64}|sha384:[0-9a-f]{96}|sha512:[0-9a-f]{128})?$" ]; } @@ -969,21 +963,17 @@ message Restriction { // For USER_TYPE: "individual", "academic", "commercial_entity", … repeated string permitted = 2 [ (buf.validate.field).repeated.max_items = 64, - (buf.validate.field).cel = { - id: "restriction.permitted.format" - message: "each token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)" - expression: "this.all(t, t.size() >= 1 && t.size() <= 64 && t.matches('^[A-Za-z0-9._:*-]+$'))" - } + (buf.validate.field).repeated.items.string.min_len = 1, + (buf.validate.field).repeated.items.string.max_len = 64, + (buf.validate.field).repeated.items.string.pattern = "^[A-Za-z0-9._:*-]+$" ]; // Tokens blocked on this axis. Takes precedence over permitted[]. repeated string prohibited = 3 [ (buf.validate.field).repeated.max_items = 64, - (buf.validate.field).cel = { - id: "restriction.prohibited.format" - message: "each token must be 1-64 chars from [A-Za-z0-9._:*-] (no spaces/control chars)" - expression: "this.all(t, t.size() >= 1 && t.size() <= 64 && t.matches('^[A-Za-z0-9._:*-]+$'))" - } + (buf.validate.field).repeated.items.string.min_len = 1, + (buf.validate.field).repeated.items.string.max_len = 64, + (buf.validate.field).repeated.items.string.pattern = "^[A-Za-z0-9._:*-]+$" ]; // Fail-closed by default. When false (the default), this restriction is @@ -1031,11 +1021,7 @@ message Quota { (ramp.v1.vocab) = "copies", (ramp.v1.vocab) = "seats", (buf.validate.field).string.max_len = 64, - (buf.validate.field).cel = { - id: "quota.metric.format" - message: "metric must be a lowercase-dashed token or vendor:namespaced (no spaces/control chars, ≤64 chars)" - expression: "this != '' && (this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$'))" - } + (buf.validate.field).string.pattern = "^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)$" ]; // Maximum allowed value in the given window. A quota of 0 grants @@ -1276,11 +1262,7 @@ message Pricing { (ramp.v1.vocab) = "characters", (ramp.v1.vocab) = "bytes", (ramp.v1.vocab) = "items", (ramp.v1.vocab) = "sq-km", (buf.validate.field).string.max_len = 64, - (buf.validate.field).cel = { - id: "pricing.unit.format" - message: "unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, ≤64 chars)" - expression: "this == '' || this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$')" - } + (buf.validate.field).string.pattern = "^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$" ]; // How usage is tracked for billing reconciliation. @@ -2056,11 +2038,7 @@ message Usage { // a bare registered token or a vendor:namespaced token. optional string consumed_unit = 8 [ (buf.validate.field).string.max_len = 64, - (buf.validate.field).cel = { - id: "usage.consumed_unit.format" - message: "consumed_unit must be empty, a lowercase-dashed token, or vendor:namespaced (no spaces/control chars, ≤64 chars)" - expression: "this == '' || this.matches('^[a-z0-9-]+$') || this.matches('^[A-Za-z0-9._-]+:[A-Za-z0-9._-]+$')" - } + (buf.validate.field).string.pattern = "^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$" ]; } From 51f03c90c4ddb63e57a22ab259b4119e241b895d Mon Sep 17 00:00:00 2001 From: "Constantine.mirin" Date: Fri, 19 Jun 2026 17:07:41 +0200 Subject: [PATCH 06/40] chore(sdk): discard the protobuf-native TS/Python SDKs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the protobuf-es (gen/ts) and Python _pb2/connect (gen/python) generation and their buf.gen.yaml plugins. They are unusable in the target ecosystems — FastMCP needs Pydantic, edge runtimes need Zod, and both consumers were hand-mirroring the proto rather than importing these. Go keeps native protobuf (it is the server/runtime). Kept: the standalone vocabulary constants (gen/{go,ts,python}/vocab) — usable by any consumer. The TS/Python *types export* (Pydantic + Zod, generated from JSON Schema) is added next; the manifests are trimmed to the vocab-only interim until then. --- .gitignore | 1 + gen/python/comp/v1/comp_pb2.py | 72 - gen/python/comp/v1/comp_pb2.pyi | 369 - gen/python/pyproject.toml | 25 +- .../v1/__pycache__/ramp_pb2.cpython-312.pyc | Bin 54665 -> 0 bytes gen/python/ramp/v1/ramp_connect.py | 800 --- gen/python/ramp/v1/ramp_pb2.py | 306 - gen/python/ramp/v1/ramp_pb2.pyi | 1458 ---- gen/python/ramp/v1/vocab_pb2.py | 36 - gen/python/ramp/v1/vocab_pb2.pyi | 13 - .../__pycache__/pricingunits.cpython-312.pyc | Bin 1029 -> 0 bytes gen/ts/comp/v1/comp_pb.ts | 1218 ---- gen/ts/package.json | 9 +- gen/ts/ramp/v1/ramp_connect.ts | 181 - gen/ts/ramp/v1/ramp_pb.ts | 6031 ----------------- gen/ts/ramp/v1/vocab_pb.ts | 80 - proto/buf.gen.yaml | 21 +- 17 files changed, 14 insertions(+), 10606 deletions(-) delete mode 100644 gen/python/comp/v1/comp_pb2.py delete mode 100644 gen/python/comp/v1/comp_pb2.pyi delete mode 100644 gen/python/ramp/v1/__pycache__/ramp_pb2.cpython-312.pyc delete mode 100644 gen/python/ramp/v1/ramp_connect.py delete mode 100644 gen/python/ramp/v1/ramp_pb2.py delete mode 100644 gen/python/ramp/v1/ramp_pb2.pyi delete mode 100644 gen/python/ramp/v1/vocab_pb2.py delete mode 100644 gen/python/ramp/v1/vocab_pb2.pyi delete mode 100644 gen/python/vocab/__pycache__/pricingunits.cpython-312.pyc delete mode 100644 gen/ts/comp/v1/comp_pb.ts delete mode 100644 gen/ts/ramp/v1/ramp_connect.ts delete mode 100644 gen/ts/ramp/v1/ramp_pb.ts delete mode 100644 gen/ts/ramp/v1/vocab_pb.ts diff --git a/.gitignore b/.gitignore index 695dfd0e..f0b8e693 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ research-*.md # Local agent/review scratch — never ship AI-review artifacts in the protocol repo .claude/ +__pycache__/ diff --git a/gen/python/comp/v1/comp_pb2.py b/gen/python/comp/v1/comp_pb2.py deleted file mode 100644 index d26950ed..00000000 --- a/gen/python/comp/v1/comp_pb2.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: comp/v1/comp.proto -# Protobuf Python Version: 7.35.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 7, - 35, - 1, - '', - 'comp/v1/comp.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12\x63omp/v1/comp.proto\x12\x07\x63omp.v1\x1a\x1cgoogle/protobuf/struct.proto\"\xb3\x01\n\x08\x41ISystem\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x13\n\x02ua\x18\x02 \x01(\tH\x00R\x02ua\x88\x01\x01\x12\x13\n\x02id\x18\x03 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x30\n\x08\x61isysuse\x18\x04 \x01(\x0b\x32\x14.comp.v1.AISystemUseR\x08\x61isysuse\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x05\n\x03_uaB\x05\n\x03_id\"\xc5\x02\n\x0b\x41ISystemUse\x12\x10\n\x03lid\x18\x01 \x01(\tR\x03lid\x12+\n\x06\x61iauth\x18\x02 \x01(\x0e\x32\x13.comp.v1.AuthMethodR\x06\x61iauth\x12\x10\n\x03uri\x18\x03 \x03(\tR\x03uri\x12-\n\x05scope\x18\x04 \x01(\x0e\x32\x12.comp.v1.ScopeTypeH\x00R\x05scope\x88\x01\x01\x12-\n\x08\x66unction\x18\x05 \x03(\x0e\x32\x11.comp.v1.FunctionR\x08\x66unction\x12*\n\x05subfn\x18\x06 \x03(\x0e\x32\x14.comp.v1.SubFunctionR\x05subfn\x12\x1b\n\x06resdis\x18\x07 \x01(\x05H\x01R\x06resdis\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x08\n\x06_scopeB\t\n\x07_resdis\"\xc7\x03\n\x07Package\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\x1b\n\x06seller\x18\x03 \x01(\tH\x01R\x06seller\x88\x01\x01\x12\x1f\n\x08packager\x18\x04 \x01(\tH\x02R\x08packager\x88\x01\x01\x12#\n\nlicenseurl\x18\x05 \x01(\tH\x03R\nlicenseurl\x88\x01\x01\x12\x1f\n\x08\x63itation\x18\x06 \x01(\x05H\x04R\x08\x63itation\x88\x01\x01\x12)\n\x05scope\x18\x07 \x01(\x0b\x32\x0e.comp.v1.ScopeH\x05R\x05scope\x88\x01\x01\x12\x35\n\tretrieval\x18\x08 \x01(\x0b\x32\x12.comp.v1.RetrievalH\x06R\tretrieval\x88\x01\x01\x12*\n\x07license\x18\t \x03(\x0b\x32\x10.comp.v1.LicenseR\x07license\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x08\n\x06_titleB\t\n\x07_sellerB\x0b\n\t_packagerB\r\n\x0b_licenseurlB\x0b\n\t_citationB\x08\n\x06_scopeB\x0c\n\n_retrieval\"\x9d\x03\n\x07License\x12\x13\n\x02id\x18\x01 \x01(\tH\x00R\x02id\x88\x01\x01\x12\x17\n\x04turl\x18\x02 \x01(\tH\x01R\x04turl\x88\x01\x01\x12%\n\x03use\x18\x03 \x03(\x0e\x32\x13.comp.v1.LicenseUseR\x03use\x12\x18\n\x07\x63ountry\x18\x04 \x03(\tR\x07\x63ountry\x12\x1d\n\x07maxword\x18\x05 \x01(\x05H\x02R\x07maxword\x88\x01\x01\x12\x1f\n\x08\x63itation\x18\x06 \x01(\x05H\x03R\x08\x63itation\x88\x01\x01\x12\x19\n\x05price\x18\x07 \x01(\x01H\x04R\x05price\x88\x01\x01\x12\x1f\n\x08revshare\x18\x08 \x01(\x01H\x05R\x08revshare\x88\x01\x01\x12\x15\n\x03\x63ur\x18\t \x01(\tH\x06R\x03\x63ur\x88\x01\x01\x12\x15\n\x03\x64ur\x18\n \x01(\x05H\x07R\x03\x64ur\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x05\n\x03_idB\x07\n\x05_turlB\n\n\x08_maxwordB\x0b\n\t_citationB\x08\n\x06_priceB\x0b\n\t_revshareB\x06\n\x04_curB\x06\n\x04_dur\"\xcb\x02\n\x05Scope\x12-\n\x05scope\x18\x01 \x01(\x0e\x32\x12.comp.v1.ScopeTypeH\x00R\x05scope\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x05H\x01R\x03max\x88\x01\x01\x12*\n\x05\x63type\x18\x03 \x03(\x0e\x32\x14.comp.v1.ContentTypeR\x05\x63type\x12!\n\x04text\x18\x04 \x03(\x0b\x32\r.comp.v1.TextR\x04text\x12$\n\x05video\x18\x05 \x03(\x0b\x32\x0e.comp.v1.VideoR\x05video\x12$\n\x05image\x18\x06 \x03(\x0b\x32\x0e.comp.v1.ImageR\x05image\x12$\n\x05\x61udio\x18\x07 \x03(\x0b\x32\x0e.comp.v1.AudioR\x05\x61udio\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x08\n\x06_scopeB\x06\n\x04_max\"\x8b\x04\n\x04Text\x12\x19\n\x05title\x18\x01 \x01(\tH\x00R\x05title\x88\x01\x01\x12\x1c\n\twordcount\x18\x02 \x03(\x05R\twordcount\x12\x1d\n\x07pubdate\x18\x03 \x01(\tH\x01R\x07pubdate\x88\x01\x01\x12!\n\tpublished\x18\x04 \x01(\x05H\x02R\tpublished\x88\x01\x01\x12\x1b\n\x06update\x18\x05 \x01(\tH\x03R\x06update\x88\x01\x01\x12\x16\n\x06\x61uthor\x18\x06 \x03(\tR\x06\x61uthor\x12#\n\nsourcetype\x18\x07 \x01(\x05H\x04R\nsourcetype\x88\x01\x01\x12#\n\nprovenance\x18\x08 \x01(\x05H\x05R\nprovenance\x88\x01\x01\x12\x1d\n\x07provent\x18\t \x01(\tH\x06R\x07provent\x88\x01\x01\x12!\n\tauthority\x18\n \x01(\x01H\x07R\tauthority\x88\x01\x01\x12%\n\x0boriginality\x18\x0b \x01(\x01H\x08R\x0boriginality\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x08\n\x06_titleB\n\n\x08_pubdateB\x0c\n\n_publishedB\t\n\x07_updateB\r\n\x0b_sourcetypeB\r\n\x0b_provenanceB\n\n\x08_proventB\x0c\n\n_authorityB\x0e\n\x0c_originality\"\x9f\x04\n\x05Video\x12\x14\n\x05title\x18\x01 \x03(\tR\x05title\x12\x10\n\x03\x64ur\x18\x02 \x03(\x05R\x03\x64ur\x12\x17\n\x04\x63lip\x18\x03 \x01(\x05H\x00R\x04\x63lip\x88\x01\x01\x12\x1c\n\twordcount\x18\x04 \x03(\x05R\twordcount\x12#\n\ntranscript\x18\x05 \x01(\x05H\x01R\ntranscript\x88\x01\x01\x12\x1d\n\x07pubdate\x18\x06 \x01(\tH\x02R\x07pubdate\x88\x01\x01\x12!\n\tpublished\x18\x07 \x01(\x05H\x03R\tpublished\x88\x01\x01\x12\x1b\n\x06update\x18\x08 \x01(\tH\x04R\x06update\x88\x01\x01\x12\x16\n\x06\x61uthor\x18\t \x03(\tR\x06\x61uthor\x12#\n\nsourcetype\x18\n \x01(\x05H\x05R\nsourcetype\x88\x01\x01\x12#\n\nprovenance\x18\x0b \x01(\x05H\x06R\nprovenance\x88\x01\x01\x12\x1d\n\x07provent\x18\x0c \x01(\tH\x07R\x07provent\x88\x01\x01\x12\x17\n\x04\x63\x32pa\x18\r \x01(\tH\x08R\x04\x63\x32pa\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x07\n\x05_clipB\r\n\x0b_transcriptB\n\n\x08_pubdateB\x0c\n\n_publishedB\t\n\x07_updateB\r\n\x0b_sourcetypeB\r\n\x0b_provenanceB\n\n\x08_proventB\x07\n\x05_c2pa\"\xe3\x03\n\x05Image\x12\x14\n\x05title\x18\x01 \x03(\tR\x05title\x12\x1d\n\x07pubdate\x18\x02 \x01(\tH\x00R\x07pubdate\x88\x01\x01\x12!\n\tpublished\x18\x03 \x01(\x05H\x01R\tpublished\x88\x01\x01\x12\x1b\n\x06update\x18\x04 \x01(\tH\x02R\x06update\x88\x01\x01\x12\x16\n\x06\x61uthor\x18\x05 \x03(\tR\x06\x61uthor\x12#\n\nsourcetype\x18\x06 \x01(\x05H\x03R\nsourcetype\x88\x01\x01\x12#\n\nprovenance\x18\x07 \x01(\x05H\x04R\nprovenance\x88\x01\x01\x12\x1d\n\x07provent\x18\x08 \x01(\tH\x05R\x07provent\x88\x01\x01\x12\x15\n\x03\x61lt\x18\t \x01(\tH\x06R\x03\x61lt\x88\x01\x01\x12\x1d\n\x07\x63\x61ption\x18\n \x01(\tH\x07R\x07\x63\x61ption\x88\x01\x01\x12\x17\n\x04\x63\x32pa\x18\x0b \x01(\tH\x08R\x04\x63\x32pa\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\n\n\x08_pubdateB\x0c\n\n_publishedB\t\n\x07_updateB\r\n\x0b_sourcetypeB\r\n\x0b_provenanceB\n\n\x08_proventB\x06\n\x04_altB\n\n\x08_captionB\x07\n\x05_c2pa\"\xfd\x03\n\x05\x41udio\x12\x14\n\x05title\x18\x01 \x03(\tR\x05title\x12\x10\n\x03\x64ur\x18\x02 \x03(\x05R\x03\x64ur\x12\x1c\n\twordcount\x18\x03 \x03(\x05R\twordcount\x12#\n\ntranscript\x18\x04 \x01(\x05H\x00R\ntranscript\x88\x01\x01\x12\x1d\n\x07pubdate\x18\x05 \x01(\tH\x01R\x07pubdate\x88\x01\x01\x12!\n\tpublished\x18\x06 \x01(\x05H\x02R\tpublished\x88\x01\x01\x12\x1b\n\x06update\x18\x07 \x01(\tH\x03R\x06update\x88\x01\x01\x12\x16\n\x06\x61uthor\x18\x08 \x03(\tR\x06\x61uthor\x12#\n\nsourcetype\x18\t \x01(\x05H\x04R\nsourcetype\x88\x01\x01\x12#\n\nprovenance\x18\n \x01(\x05H\x05R\nprovenance\x88\x01\x01\x12\x1d\n\x07provent\x18\x0b \x01(\tH\x06R\x07provent\x88\x01\x01\x12\x17\n\x04\x63\x32pa\x18\x0c \x01(\tH\x07R\x04\x63\x32pa\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\r\n\x0b_transcriptB\n\n\x08_pubdateB\x0c\n\n_publishedB\t\n\x07_updateB\r\n\x0b_sourcetypeB\r\n\x0b_provenanceB\n\n\x08_proventB\x07\n\x05_c2pa\"\xf5\x01\n\tRetrieval\x12/\n\x04\x61uth\x18\x01 \x01(\x0e\x32\x16.comp.v1.RetrievalAuthH\x00R\x04\x61uth\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x02 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12*\n\x04type\x18\x03 \x03(\x0e\x32\x16.comp.v1.RetrievalTypeR\x04type\x12\x1d\n\x07ratelmt\x18\x04 \x01(\x05H\x02R\x07ratelmt\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xtB\x07\n\x05_authB\x0b\n\t_endpointB\n\n\x08_ratelmt*\x9c\x01\n\nAuthMethod\x12\x1a\n\x16\x41UTH_METHOD_USER_AGENT\x10\x00\x12\x12\n\x0e\x41UTH_METHOD_IP\x10\x01\x12\x15\n\x11\x41UTH_METHOD_TOKEN\x10\x02\x12\x16\n\x12\x41UTH_METHOD_WEBBOT\x10\x03\x12\x18\n\x14\x41UTH_METHOD_AGENT_ID\x10\x04\x12\x15\n\x11\x41UTH_METHOD_OTHER\x10\x05*\xb4\x01\n\tScopeType\x12\x1a\n\x16SCOPE_TYPE_FULL_CORPUS\x10\x00\x12\x16\n\x12SCOPE_TYPE_SECTION\x10\x01\x12\x19\n\x15SCOPE_TYPE_DATE_RANGE\x10\x02\x12\x14\n\x10SCOPE_TYPE_GENRE\x10\x03\x12\x14\n\x10SCOPE_TYPE_TOPIC\x10\x04\x12\x16\n\x12SCOPE_TYPE_CURATED\x10\x05\x12\x14\n\x10SCOPE_TYPE_OTHER\x10\x06*\x8b\x01\n\x08\x46unction\x12\x10\n\x0c\x46UNCTION_ALL\x10\x00\x12\x13\n\x0f\x46UNCTION_AI_ALL\x10\x01\x12\x15\n\x11\x46UNCTION_AI_TRAIN\x10\x02\x12\x15\n\x11\x46UNCTION_AI_INPUT\x10\x03\x12\x15\n\x11\x46UNCTION_AI_INDEX\x10\x04\x12\x13\n\x0f\x46UNCTION_SEARCH\x10\x05*\xaf\x01\n\x0bSubFunction\x12\x19\n\x15SUB_FUNCTION_TRAINING\x10\x00\x12\x14\n\x10SUB_FUNCTION_RAG\x10\x01\x12\x1a\n\x16SUB_FUNCTION_GROUNDING\x10\x02\x12\x1b\n\x17SUB_FUNCTION_AGENT_VIEW\x10\x03\x12\x1e\n\x1aSUB_FUNCTION_AGENT_ACTIONS\x10\x04\x12\x16\n\x12SUB_FUNCTION_OTHER\x10\x05*\x83\x02\n\nLicenseUse\x12 \n\x1cLICENSE_USE_TRAINING_DISPLAY\x10\x00\x12(\n$LICENSE_USE_RAG_DISPLAY_UNRESTRICTED\x10\x01\x12%\n!LICENSE_USE_RAG_DISPLAY_MAX_WORDS\x10\x02\x12\'\n#LICENSE_USE_RAG_DISPLAY_ATTRIBUTION\x10\x03\x12\x1e\n\x1aLICENSE_USE_RAG_NO_DISPLAY\x10\x04\x12\x1a\n\x16LICENSE_USE_AGENT_VIEW\x10\x05\x12\x1d\n\x19LICENSE_USE_AGENT_ACTIONS\x10\x06*\x9a\x01\n\x0b\x43ontentType\x12\x15\n\x11\x43ONTENT_TYPE_TEXT\x10\x00\x12\x16\n\x12\x43ONTENT_TYPE_VIDEO\x10\x01\x12\x16\n\x12\x43ONTENT_TYPE_IMAGE\x10\x02\x12\x16\n\x12\x43ONTENT_TYPE_AUDIO\x10\x03\x12\x14\n\x10\x43ONTENT_TYPE_ALL\x10\x04\x12\x16\n\x12\x43ONTENT_TYPE_OTHER\x10\x05*w\n\rRetrievalAuth\x12\x17\n\x13RETRIEVAL_AUTH_NONE\x10\x00\x12\x1a\n\x16RETRIEVAL_AUTH_API_KEY\x10\x01\x12\x19\n\x15RETRIEVAL_AUTH_OAUTH2\x10\x02\x12\x16\n\x12RETRIEVAL_AUTH_SSL\x10\x03*\xd7\x01\n\rRetrievalType\x12\x17\n\x13RETRIEVAL_TYPE_HTML\x10\x00\x12\x16\n\x12RETRIEVAL_TYPE_RSS\x10\x01\x12\x16\n\x12RETRIEVAL_TYPE_API\x10\x02\x12\x16\n\x12RETRIEVAL_TYPE_MCP\x10\x03\x12\x18\n\x14RETRIEVAL_TYPE_NLWEB\x10\x04\x12\x16\n\x12RETRIEVAL_TYPE_XML\x10\x05\x12\x19\n\x15RETRIEVAL_TYPE_NEWSML\x10\x06\x12\x18\n\x14RETRIEVAL_TYPE_OTHER\x10\x07\x42\x8e\x01\n\x0b\x63om.comp.v1B\tCompProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/comp/v1;compv1\xa2\x02\x03\x43XX\xaa\x02\x07\x43omp.V1\xca\x02\x07\x43omp\\V1\xe2\x02\x13\x43omp\\V1\\GPBMetadata\xea\x02\x08\x43omp::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'comp.v1.comp_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\013com.comp.v1B\tCompProtoP\001Z7github.com/RAMP-Protocol/protocol/gen/go/comp/v1;compv1\242\002\003CXX\252\002\007Comp.V1\312\002\007Comp\\V1\342\002\023Comp\\V1\\GPBMetadata\352\002\010Comp::V1' - _globals['_AUTHMETHOD']._serialized_start=4098 - _globals['_AUTHMETHOD']._serialized_end=4254 - _globals['_SCOPETYPE']._serialized_start=4257 - _globals['_SCOPETYPE']._serialized_end=4437 - _globals['_FUNCTION']._serialized_start=4440 - _globals['_FUNCTION']._serialized_end=4579 - _globals['_SUBFUNCTION']._serialized_start=4582 - _globals['_SUBFUNCTION']._serialized_end=4757 - _globals['_LICENSEUSE']._serialized_start=4760 - _globals['_LICENSEUSE']._serialized_end=5019 - _globals['_CONTENTTYPE']._serialized_start=5022 - _globals['_CONTENTTYPE']._serialized_end=5176 - _globals['_RETRIEVALAUTH']._serialized_start=5178 - _globals['_RETRIEVALAUTH']._serialized_end=5297 - _globals['_RETRIEVALTYPE']._serialized_start=5300 - _globals['_RETRIEVALTYPE']._serialized_end=5515 - _globals['_AISYSTEM']._serialized_start=62 - _globals['_AISYSTEM']._serialized_end=241 - _globals['_AISYSTEMUSE']._serialized_start=244 - _globals['_AISYSTEMUSE']._serialized_end=569 - _globals['_PACKAGE']._serialized_start=572 - _globals['_PACKAGE']._serialized_end=1027 - _globals['_LICENSE']._serialized_start=1030 - _globals['_LICENSE']._serialized_end=1443 - _globals['_SCOPE']._serialized_start=1446 - _globals['_SCOPE']._serialized_end=1777 - _globals['_TEXT']._serialized_start=1780 - _globals['_TEXT']._serialized_end=2303 - _globals['_VIDEO']._serialized_start=2306 - _globals['_VIDEO']._serialized_end=2849 - _globals['_IMAGE']._serialized_start=2852 - _globals['_IMAGE']._serialized_end=3335 - _globals['_AUDIO']._serialized_start=3338 - _globals['_AUDIO']._serialized_end=3847 - _globals['_RETRIEVAL']._serialized_start=3850 - _globals['_RETRIEVAL']._serialized_end=4095 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/comp/v1/comp_pb2.pyi b/gen/python/comp/v1/comp_pb2.pyi deleted file mode 100644 index 7f27918a..00000000 --- a/gen/python/comp/v1/comp_pb2.pyi +++ /dev/null @@ -1,369 +0,0 @@ -from google.protobuf import struct_pb2 as _struct_pb2 -from google.protobuf.internal import containers as _containers -from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from collections.abc import Iterable as _Iterable, Mapping as _Mapping -from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union - -DESCRIPTOR: _descriptor.FileDescriptor - -class AuthMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - AUTH_METHOD_USER_AGENT: _ClassVar[AuthMethod] - AUTH_METHOD_IP: _ClassVar[AuthMethod] - AUTH_METHOD_TOKEN: _ClassVar[AuthMethod] - AUTH_METHOD_WEBBOT: _ClassVar[AuthMethod] - AUTH_METHOD_AGENT_ID: _ClassVar[AuthMethod] - AUTH_METHOD_OTHER: _ClassVar[AuthMethod] - -class ScopeType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - SCOPE_TYPE_FULL_CORPUS: _ClassVar[ScopeType] - SCOPE_TYPE_SECTION: _ClassVar[ScopeType] - SCOPE_TYPE_DATE_RANGE: _ClassVar[ScopeType] - SCOPE_TYPE_GENRE: _ClassVar[ScopeType] - SCOPE_TYPE_TOPIC: _ClassVar[ScopeType] - SCOPE_TYPE_CURATED: _ClassVar[ScopeType] - SCOPE_TYPE_OTHER: _ClassVar[ScopeType] - -class Function(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - FUNCTION_ALL: _ClassVar[Function] - FUNCTION_AI_ALL: _ClassVar[Function] - FUNCTION_AI_TRAIN: _ClassVar[Function] - FUNCTION_AI_INPUT: _ClassVar[Function] - FUNCTION_AI_INDEX: _ClassVar[Function] - FUNCTION_SEARCH: _ClassVar[Function] - -class SubFunction(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - SUB_FUNCTION_TRAINING: _ClassVar[SubFunction] - SUB_FUNCTION_RAG: _ClassVar[SubFunction] - SUB_FUNCTION_GROUNDING: _ClassVar[SubFunction] - SUB_FUNCTION_AGENT_VIEW: _ClassVar[SubFunction] - SUB_FUNCTION_AGENT_ACTIONS: _ClassVar[SubFunction] - SUB_FUNCTION_OTHER: _ClassVar[SubFunction] - -class LicenseUse(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - LICENSE_USE_TRAINING_DISPLAY: _ClassVar[LicenseUse] - LICENSE_USE_RAG_DISPLAY_UNRESTRICTED: _ClassVar[LicenseUse] - LICENSE_USE_RAG_DISPLAY_MAX_WORDS: _ClassVar[LicenseUse] - LICENSE_USE_RAG_DISPLAY_ATTRIBUTION: _ClassVar[LicenseUse] - LICENSE_USE_RAG_NO_DISPLAY: _ClassVar[LicenseUse] - LICENSE_USE_AGENT_VIEW: _ClassVar[LicenseUse] - LICENSE_USE_AGENT_ACTIONS: _ClassVar[LicenseUse] - -class ContentType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - CONTENT_TYPE_TEXT: _ClassVar[ContentType] - CONTENT_TYPE_VIDEO: _ClassVar[ContentType] - CONTENT_TYPE_IMAGE: _ClassVar[ContentType] - CONTENT_TYPE_AUDIO: _ClassVar[ContentType] - CONTENT_TYPE_ALL: _ClassVar[ContentType] - CONTENT_TYPE_OTHER: _ClassVar[ContentType] - -class RetrievalAuth(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - RETRIEVAL_AUTH_NONE: _ClassVar[RetrievalAuth] - RETRIEVAL_AUTH_API_KEY: _ClassVar[RetrievalAuth] - RETRIEVAL_AUTH_OAUTH2: _ClassVar[RetrievalAuth] - RETRIEVAL_AUTH_SSL: _ClassVar[RetrievalAuth] - -class RetrievalType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - RETRIEVAL_TYPE_HTML: _ClassVar[RetrievalType] - RETRIEVAL_TYPE_RSS: _ClassVar[RetrievalType] - RETRIEVAL_TYPE_API: _ClassVar[RetrievalType] - RETRIEVAL_TYPE_MCP: _ClassVar[RetrievalType] - RETRIEVAL_TYPE_NLWEB: _ClassVar[RetrievalType] - RETRIEVAL_TYPE_XML: _ClassVar[RetrievalType] - RETRIEVAL_TYPE_NEWSML: _ClassVar[RetrievalType] - RETRIEVAL_TYPE_OTHER: _ClassVar[RetrievalType] -AUTH_METHOD_USER_AGENT: AuthMethod -AUTH_METHOD_IP: AuthMethod -AUTH_METHOD_TOKEN: AuthMethod -AUTH_METHOD_WEBBOT: AuthMethod -AUTH_METHOD_AGENT_ID: AuthMethod -AUTH_METHOD_OTHER: AuthMethod -SCOPE_TYPE_FULL_CORPUS: ScopeType -SCOPE_TYPE_SECTION: ScopeType -SCOPE_TYPE_DATE_RANGE: ScopeType -SCOPE_TYPE_GENRE: ScopeType -SCOPE_TYPE_TOPIC: ScopeType -SCOPE_TYPE_CURATED: ScopeType -SCOPE_TYPE_OTHER: ScopeType -FUNCTION_ALL: Function -FUNCTION_AI_ALL: Function -FUNCTION_AI_TRAIN: Function -FUNCTION_AI_INPUT: Function -FUNCTION_AI_INDEX: Function -FUNCTION_SEARCH: Function -SUB_FUNCTION_TRAINING: SubFunction -SUB_FUNCTION_RAG: SubFunction -SUB_FUNCTION_GROUNDING: SubFunction -SUB_FUNCTION_AGENT_VIEW: SubFunction -SUB_FUNCTION_AGENT_ACTIONS: SubFunction -SUB_FUNCTION_OTHER: SubFunction -LICENSE_USE_TRAINING_DISPLAY: LicenseUse -LICENSE_USE_RAG_DISPLAY_UNRESTRICTED: LicenseUse -LICENSE_USE_RAG_DISPLAY_MAX_WORDS: LicenseUse -LICENSE_USE_RAG_DISPLAY_ATTRIBUTION: LicenseUse -LICENSE_USE_RAG_NO_DISPLAY: LicenseUse -LICENSE_USE_AGENT_VIEW: LicenseUse -LICENSE_USE_AGENT_ACTIONS: LicenseUse -CONTENT_TYPE_TEXT: ContentType -CONTENT_TYPE_VIDEO: ContentType -CONTENT_TYPE_IMAGE: ContentType -CONTENT_TYPE_AUDIO: ContentType -CONTENT_TYPE_ALL: ContentType -CONTENT_TYPE_OTHER: ContentType -RETRIEVAL_AUTH_NONE: RetrievalAuth -RETRIEVAL_AUTH_API_KEY: RetrievalAuth -RETRIEVAL_AUTH_OAUTH2: RetrievalAuth -RETRIEVAL_AUTH_SSL: RetrievalAuth -RETRIEVAL_TYPE_HTML: RetrievalType -RETRIEVAL_TYPE_RSS: RetrievalType -RETRIEVAL_TYPE_API: RetrievalType -RETRIEVAL_TYPE_MCP: RetrievalType -RETRIEVAL_TYPE_NLWEB: RetrievalType -RETRIEVAL_TYPE_XML: RetrievalType -RETRIEVAL_TYPE_NEWSML: RetrievalType -RETRIEVAL_TYPE_OTHER: RetrievalType - -class AISystem(_message.Message): - __slots__ = ("name", "ua", "id", "aisysuse", "ext") - NAME_FIELD_NUMBER: _ClassVar[int] - UA_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - AISYSUSE_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - name: str - ua: str - id: str - aisysuse: AISystemUse - ext: _struct_pb2.Struct - def __init__(self, name: _Optional[str] = ..., ua: _Optional[str] = ..., id: _Optional[str] = ..., aisysuse: _Optional[_Union[AISystemUse, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class AISystemUse(_message.Message): - __slots__ = ("lid", "aiauth", "uri", "scope", "function", "subfn", "resdis", "ext") - LID_FIELD_NUMBER: _ClassVar[int] - AIAUTH_FIELD_NUMBER: _ClassVar[int] - URI_FIELD_NUMBER: _ClassVar[int] - SCOPE_FIELD_NUMBER: _ClassVar[int] - FUNCTION_FIELD_NUMBER: _ClassVar[int] - SUBFN_FIELD_NUMBER: _ClassVar[int] - RESDIS_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - lid: str - aiauth: AuthMethod - uri: _containers.RepeatedScalarFieldContainer[str] - scope: ScopeType - function: _containers.RepeatedScalarFieldContainer[Function] - subfn: _containers.RepeatedScalarFieldContainer[SubFunction] - resdis: int - ext: _struct_pb2.Struct - def __init__(self, lid: _Optional[str] = ..., aiauth: _Optional[_Union[AuthMethod, str]] = ..., uri: _Optional[_Iterable[str]] = ..., scope: _Optional[_Union[ScopeType, str]] = ..., function: _Optional[_Iterable[_Union[Function, str]]] = ..., subfn: _Optional[_Iterable[_Union[SubFunction, str]]] = ..., resdis: _Optional[int] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class Package(_message.Message): - __slots__ = ("id", "title", "seller", "packager", "licenseurl", "citation", "scope", "retrieval", "license", "ext") - ID_FIELD_NUMBER: _ClassVar[int] - TITLE_FIELD_NUMBER: _ClassVar[int] - SELLER_FIELD_NUMBER: _ClassVar[int] - PACKAGER_FIELD_NUMBER: _ClassVar[int] - LICENSEURL_FIELD_NUMBER: _ClassVar[int] - CITATION_FIELD_NUMBER: _ClassVar[int] - SCOPE_FIELD_NUMBER: _ClassVar[int] - RETRIEVAL_FIELD_NUMBER: _ClassVar[int] - LICENSE_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - id: str - title: str - seller: str - packager: str - licenseurl: str - citation: int - scope: Scope - retrieval: Retrieval - license: _containers.RepeatedCompositeFieldContainer[License] - ext: _struct_pb2.Struct - def __init__(self, id: _Optional[str] = ..., title: _Optional[str] = ..., seller: _Optional[str] = ..., packager: _Optional[str] = ..., licenseurl: _Optional[str] = ..., citation: _Optional[int] = ..., scope: _Optional[_Union[Scope, _Mapping]] = ..., retrieval: _Optional[_Union[Retrieval, _Mapping]] = ..., license: _Optional[_Iterable[_Union[License, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class License(_message.Message): - __slots__ = ("id", "turl", "use", "country", "maxword", "citation", "price", "revshare", "cur", "dur", "ext") - ID_FIELD_NUMBER: _ClassVar[int] - TURL_FIELD_NUMBER: _ClassVar[int] - USE_FIELD_NUMBER: _ClassVar[int] - COUNTRY_FIELD_NUMBER: _ClassVar[int] - MAXWORD_FIELD_NUMBER: _ClassVar[int] - CITATION_FIELD_NUMBER: _ClassVar[int] - PRICE_FIELD_NUMBER: _ClassVar[int] - REVSHARE_FIELD_NUMBER: _ClassVar[int] - CUR_FIELD_NUMBER: _ClassVar[int] - DUR_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - id: str - turl: str - use: _containers.RepeatedScalarFieldContainer[LicenseUse] - country: _containers.RepeatedScalarFieldContainer[str] - maxword: int - citation: int - price: float - revshare: float - cur: str - dur: int - ext: _struct_pb2.Struct - def __init__(self, id: _Optional[str] = ..., turl: _Optional[str] = ..., use: _Optional[_Iterable[_Union[LicenseUse, str]]] = ..., country: _Optional[_Iterable[str]] = ..., maxword: _Optional[int] = ..., citation: _Optional[int] = ..., price: _Optional[float] = ..., revshare: _Optional[float] = ..., cur: _Optional[str] = ..., dur: _Optional[int] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class Scope(_message.Message): - __slots__ = ("scope", "max", "ctype", "text", "video", "image", "audio", "ext") - SCOPE_FIELD_NUMBER: _ClassVar[int] - MAX_FIELD_NUMBER: _ClassVar[int] - CTYPE_FIELD_NUMBER: _ClassVar[int] - TEXT_FIELD_NUMBER: _ClassVar[int] - VIDEO_FIELD_NUMBER: _ClassVar[int] - IMAGE_FIELD_NUMBER: _ClassVar[int] - AUDIO_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - scope: ScopeType - max: int - ctype: _containers.RepeatedScalarFieldContainer[ContentType] - text: _containers.RepeatedCompositeFieldContainer[Text] - video: _containers.RepeatedCompositeFieldContainer[Video] - image: _containers.RepeatedCompositeFieldContainer[Image] - audio: _containers.RepeatedCompositeFieldContainer[Audio] - ext: _struct_pb2.Struct - def __init__(self, scope: _Optional[_Union[ScopeType, str]] = ..., max: _Optional[int] = ..., ctype: _Optional[_Iterable[_Union[ContentType, str]]] = ..., text: _Optional[_Iterable[_Union[Text, _Mapping]]] = ..., video: _Optional[_Iterable[_Union[Video, _Mapping]]] = ..., image: _Optional[_Iterable[_Union[Image, _Mapping]]] = ..., audio: _Optional[_Iterable[_Union[Audio, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class Text(_message.Message): - __slots__ = ("title", "wordcount", "pubdate", "published", "update", "author", "sourcetype", "provenance", "provent", "authority", "originality", "ext") - TITLE_FIELD_NUMBER: _ClassVar[int] - WORDCOUNT_FIELD_NUMBER: _ClassVar[int] - PUBDATE_FIELD_NUMBER: _ClassVar[int] - PUBLISHED_FIELD_NUMBER: _ClassVar[int] - UPDATE_FIELD_NUMBER: _ClassVar[int] - AUTHOR_FIELD_NUMBER: _ClassVar[int] - SOURCETYPE_FIELD_NUMBER: _ClassVar[int] - PROVENANCE_FIELD_NUMBER: _ClassVar[int] - PROVENT_FIELD_NUMBER: _ClassVar[int] - AUTHORITY_FIELD_NUMBER: _ClassVar[int] - ORIGINALITY_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - title: str - wordcount: _containers.RepeatedScalarFieldContainer[int] - pubdate: str - published: int - update: str - author: _containers.RepeatedScalarFieldContainer[str] - sourcetype: int - provenance: int - provent: str - authority: float - originality: float - ext: _struct_pb2.Struct - def __init__(self, title: _Optional[str] = ..., wordcount: _Optional[_Iterable[int]] = ..., pubdate: _Optional[str] = ..., published: _Optional[int] = ..., update: _Optional[str] = ..., author: _Optional[_Iterable[str]] = ..., sourcetype: _Optional[int] = ..., provenance: _Optional[int] = ..., provent: _Optional[str] = ..., authority: _Optional[float] = ..., originality: _Optional[float] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class Video(_message.Message): - __slots__ = ("title", "dur", "clip", "wordcount", "transcript", "pubdate", "published", "update", "author", "sourcetype", "provenance", "provent", "c2pa", "ext") - TITLE_FIELD_NUMBER: _ClassVar[int] - DUR_FIELD_NUMBER: _ClassVar[int] - CLIP_FIELD_NUMBER: _ClassVar[int] - WORDCOUNT_FIELD_NUMBER: _ClassVar[int] - TRANSCRIPT_FIELD_NUMBER: _ClassVar[int] - PUBDATE_FIELD_NUMBER: _ClassVar[int] - PUBLISHED_FIELD_NUMBER: _ClassVar[int] - UPDATE_FIELD_NUMBER: _ClassVar[int] - AUTHOR_FIELD_NUMBER: _ClassVar[int] - SOURCETYPE_FIELD_NUMBER: _ClassVar[int] - PROVENANCE_FIELD_NUMBER: _ClassVar[int] - PROVENT_FIELD_NUMBER: _ClassVar[int] - C2PA_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - title: _containers.RepeatedScalarFieldContainer[str] - dur: _containers.RepeatedScalarFieldContainer[int] - clip: int - wordcount: _containers.RepeatedScalarFieldContainer[int] - transcript: int - pubdate: str - published: int - update: str - author: _containers.RepeatedScalarFieldContainer[str] - sourcetype: int - provenance: int - provent: str - c2pa: str - ext: _struct_pb2.Struct - def __init__(self, title: _Optional[_Iterable[str]] = ..., dur: _Optional[_Iterable[int]] = ..., clip: _Optional[int] = ..., wordcount: _Optional[_Iterable[int]] = ..., transcript: _Optional[int] = ..., pubdate: _Optional[str] = ..., published: _Optional[int] = ..., update: _Optional[str] = ..., author: _Optional[_Iterable[str]] = ..., sourcetype: _Optional[int] = ..., provenance: _Optional[int] = ..., provent: _Optional[str] = ..., c2pa: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class Image(_message.Message): - __slots__ = ("title", "pubdate", "published", "update", "author", "sourcetype", "provenance", "provent", "alt", "caption", "c2pa", "ext") - TITLE_FIELD_NUMBER: _ClassVar[int] - PUBDATE_FIELD_NUMBER: _ClassVar[int] - PUBLISHED_FIELD_NUMBER: _ClassVar[int] - UPDATE_FIELD_NUMBER: _ClassVar[int] - AUTHOR_FIELD_NUMBER: _ClassVar[int] - SOURCETYPE_FIELD_NUMBER: _ClassVar[int] - PROVENANCE_FIELD_NUMBER: _ClassVar[int] - PROVENT_FIELD_NUMBER: _ClassVar[int] - ALT_FIELD_NUMBER: _ClassVar[int] - CAPTION_FIELD_NUMBER: _ClassVar[int] - C2PA_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - title: _containers.RepeatedScalarFieldContainer[str] - pubdate: str - published: int - update: str - author: _containers.RepeatedScalarFieldContainer[str] - sourcetype: int - provenance: int - provent: str - alt: str - caption: str - c2pa: str - ext: _struct_pb2.Struct - def __init__(self, title: _Optional[_Iterable[str]] = ..., pubdate: _Optional[str] = ..., published: _Optional[int] = ..., update: _Optional[str] = ..., author: _Optional[_Iterable[str]] = ..., sourcetype: _Optional[int] = ..., provenance: _Optional[int] = ..., provent: _Optional[str] = ..., alt: _Optional[str] = ..., caption: _Optional[str] = ..., c2pa: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class Audio(_message.Message): - __slots__ = ("title", "dur", "wordcount", "transcript", "pubdate", "published", "update", "author", "sourcetype", "provenance", "provent", "c2pa", "ext") - TITLE_FIELD_NUMBER: _ClassVar[int] - DUR_FIELD_NUMBER: _ClassVar[int] - WORDCOUNT_FIELD_NUMBER: _ClassVar[int] - TRANSCRIPT_FIELD_NUMBER: _ClassVar[int] - PUBDATE_FIELD_NUMBER: _ClassVar[int] - PUBLISHED_FIELD_NUMBER: _ClassVar[int] - UPDATE_FIELD_NUMBER: _ClassVar[int] - AUTHOR_FIELD_NUMBER: _ClassVar[int] - SOURCETYPE_FIELD_NUMBER: _ClassVar[int] - PROVENANCE_FIELD_NUMBER: _ClassVar[int] - PROVENT_FIELD_NUMBER: _ClassVar[int] - C2PA_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - title: _containers.RepeatedScalarFieldContainer[str] - dur: _containers.RepeatedScalarFieldContainer[int] - wordcount: _containers.RepeatedScalarFieldContainer[int] - transcript: int - pubdate: str - published: int - update: str - author: _containers.RepeatedScalarFieldContainer[str] - sourcetype: int - provenance: int - provent: str - c2pa: str - ext: _struct_pb2.Struct - def __init__(self, title: _Optional[_Iterable[str]] = ..., dur: _Optional[_Iterable[int]] = ..., wordcount: _Optional[_Iterable[int]] = ..., transcript: _Optional[int] = ..., pubdate: _Optional[str] = ..., published: _Optional[int] = ..., update: _Optional[str] = ..., author: _Optional[_Iterable[str]] = ..., sourcetype: _Optional[int] = ..., provenance: _Optional[int] = ..., provent: _Optional[str] = ..., c2pa: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... - -class Retrieval(_message.Message): - __slots__ = ("auth", "endpoint", "type", "ratelmt", "ext") - AUTH_FIELD_NUMBER: _ClassVar[int] - ENDPOINT_FIELD_NUMBER: _ClassVar[int] - TYPE_FIELD_NUMBER: _ClassVar[int] - RATELMT_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - auth: RetrievalAuth - endpoint: str - type: _containers.RepeatedScalarFieldContainer[RetrievalType] - ratelmt: int - ext: _struct_pb2.Struct - def __init__(self, auth: _Optional[_Union[RetrievalAuth, str]] = ..., endpoint: _Optional[str] = ..., type: _Optional[_Iterable[_Union[RetrievalType, str]]] = ..., ratelmt: _Optional[int] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ... diff --git a/gen/python/pyproject.toml b/gen/python/pyproject.toml index 39e266c6..71c49aad 100644 --- a/gen/python/pyproject.toml +++ b/gen/python/pyproject.toml @@ -8,23 +8,13 @@ build-backend = "setuptools.build_meta" [project] name = "ramp-protocol" version = "0.1.0" -description = "Generated Python SDK for the RAMP protocol: protobuf messages, Connect service stubs, and registered vocabulary constants." +description = "Generated RAMP vocabulary constants for Python. Message/validation types are generated as Pydantic models from JSON Schema (added via scripts/gen-sdk-types.sh)." readme = "README.md" requires-python = ">=3.9" license = { text = "Apache-2.0" } -# Messages/enums are the only hard dependency — they import just google.protobuf. -dependencies = [ - "protobuf>=5.27", -] - -[project.optional-dependencies] -# Service client/handler stubs (ramp/v1/ramp_connect.py) import the `connectrpc` -# runtime, published as connect-python. Optional so `pip install ramp-protocol` -# works for message-only use. (Confirm the exact PyPI version when publishing.) -connect = ["connect-python>=0.4"] -# Runtime evaluation of the embedded protovalidate CEL rules — optional; consumers -# that only construct/parse messages do not need it. -validation = ["protovalidate>=0.7"] +# Vocabulary constants are pure string literals — no runtime dependency. The +# generated Pydantic models add `pydantic` here when the types export lands. +dependencies = [] [project.urls] Homepage = "https://ramp-protocol.org" @@ -32,8 +22,7 @@ Source = "https://github.com/RAMP-Protocol/protocol" [tool.setuptools.packages.find] where = ["."] -# PEP 420 namespace packages — the protobuf/connect plugins emit no __init__.py. -# Imports mirror the proto package: `ramp.v1.ramp_pb2`, `comp.v1.comp_pb2`, and -# the vocabulary constants at `vocab.pricingunits` (etc.). +# PEP 420 namespace packages. Currently the vocabulary constants (vocab.pricingunits +# etc.); the Pydantic message models (ramp.v1.*) are added by the types-export step. namespaces = true -include = ["ramp*", "comp*", "vocab*"] +include = ["ramp*", "vocab*"] diff --git a/gen/python/ramp/v1/__pycache__/ramp_pb2.cpython-312.pyc b/gen/python/ramp/v1/__pycache__/ramp_pb2.cpython-312.pyc deleted file mode 100644 index b80654692582d35b58582c41be35efe8f98ee454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54665 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 ramp_dot_v1_dot_ramp__pb2.ResourceResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def execute_transaction(self, request: ramp_dot_v1_dot_ramp__pb2.TransactionRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.TransactionResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def report_usage(self, request: ramp_dot_v1_dot_ramp__pb2.UsageReport, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.UsageReportResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def dispute_transaction(self, request: ramp_dot_v1_dot_ramp__pb2.DisputeRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DisputeResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def request_domain_verification(self, request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def confirm_domain_verification(self, request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class ExchangeServiceASGIApplication(ConnectASGIApplication[ExchangeService]): - def __init__(self, service: ExchangeService | AsyncGenerator[ExchangeService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - service=service, - endpoints=lambda svc: { - "/ramp.v1.ExchangeService/DiscoverResources": Endpoint.unary( - method=MethodInfo( - name="DiscoverResources", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.ResourceQuery, - output=ramp_dot_v1_dot_ramp__pb2.ResourceResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.discover_resources, - ), - "/ramp.v1.ExchangeService/ExecuteTransaction": Endpoint.unary( - method=MethodInfo( - name="ExecuteTransaction", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.TransactionRequest, - output=ramp_dot_v1_dot_ramp__pb2.TransactionResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.execute_transaction, - ), - "/ramp.v1.ExchangeService/ReportUsage": Endpoint.unary( - method=MethodInfo( - name="ReportUsage", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.UsageReport, - output=ramp_dot_v1_dot_ramp__pb2.UsageReportResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.report_usage, - ), - "/ramp.v1.ExchangeService/DisputeTransaction": Endpoint.unary( - method=MethodInfo( - name="DisputeTransaction", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DisputeRequest, - output=ramp_dot_v1_dot_ramp__pb2.DisputeResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.dispute_transaction, - ), - "/ramp.v1.ExchangeService/RequestDomainVerification": Endpoint.unary( - method=MethodInfo( - name="RequestDomainVerification", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, - output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.request_domain_verification, - ), - "/ramp.v1.ExchangeService/ConfirmDomainVerification": Endpoint.unary( - method=MethodInfo( - name="ConfirmDomainVerification", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, - output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.confirm_domain_verification, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/ramp.v1.ExchangeService" - - -class ExchangeServiceClient(ConnectClient): - async def discover_resources( - self, - request: ramp_dot_v1_dot_ramp__pb2.ResourceQuery, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.ResourceResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="DiscoverResources", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.ResourceQuery, - output=ramp_dot_v1_dot_ramp__pb2.ResourceResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def execute_transaction( - self, - request: ramp_dot_v1_dot_ramp__pb2.TransactionRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.TransactionResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="ExecuteTransaction", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.TransactionRequest, - output=ramp_dot_v1_dot_ramp__pb2.TransactionResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def report_usage( - self, - request: ramp_dot_v1_dot_ramp__pb2.UsageReport, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.UsageReportResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="ReportUsage", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.UsageReport, - output=ramp_dot_v1_dot_ramp__pb2.UsageReportResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def dispute_transaction( - self, - request: ramp_dot_v1_dot_ramp__pb2.DisputeRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.DisputeResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="DisputeTransaction", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DisputeRequest, - output=ramp_dot_v1_dot_ramp__pb2.DisputeResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def request_domain_verification( - self, - request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="RequestDomainVerification", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, - output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def confirm_domain_verification( - self, - request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="ConfirmDomainVerification", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, - output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - -class CatalogService(Protocol): - async def push_resources(self, request: ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def remove_resources(self, request: ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - async def refresh_catalog(self, request: ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class CatalogServiceASGIApplication(ConnectASGIApplication[CatalogService]): - def __init__(self, service: CatalogService | AsyncGenerator[CatalogService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - service=service, - endpoints=lambda svc: { - "/ramp.v1.CatalogService/PushResources": Endpoint.unary( - method=MethodInfo( - name="PushResources", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, - output=ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.push_resources, - ), - "/ramp.v1.CatalogService/RemoveResources": Endpoint.unary( - method=MethodInfo( - name="RemoveResources", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, - output=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.remove_resources, - ), - "/ramp.v1.CatalogService/RefreshCatalog": Endpoint.unary( - method=MethodInfo( - name="RefreshCatalog", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, - output=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.refresh_catalog, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/ramp.v1.CatalogService" - - -class CatalogServiceClient(ConnectClient): - async def push_resources( - self, - request: ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="PushResources", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, - output=ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def remove_resources( - self, - request: ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="RemoveResources", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, - output=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - async def refresh_catalog( - self, - request: ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="RefreshCatalog", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, - output=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - -class BrokerService(Protocol): - async def resolve(self, request: ramp_dot_v1_dot_ramp__pb2.RAMPRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RAMPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class BrokerServiceASGIApplication(ConnectASGIApplication[BrokerService]): - def __init__(self, service: BrokerService | AsyncGenerator[BrokerService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - service=service, - endpoints=lambda svc: { - "/ramp.v1.BrokerService/Resolve": Endpoint.unary( - method=MethodInfo( - name="Resolve", - service_name="ramp.v1.BrokerService", - input=ramp_dot_v1_dot_ramp__pb2.RAMPRequest, - output=ramp_dot_v1_dot_ramp__pb2.RAMPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=svc.resolve, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/ramp.v1.BrokerService" - - -class BrokerServiceClient(ConnectClient): - async def resolve( - self, - request: ramp_dot_v1_dot_ramp__pb2.RAMPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.RAMPResponse: - return await self.execute_unary( - request=request, - method=MethodInfo( - name="Resolve", - service_name="ramp.v1.BrokerService", - input=ramp_dot_v1_dot_ramp__pb2.RAMPRequest, - output=ramp_dot_v1_dot_ramp__pb2.RAMPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - - - - -class ExchangeServiceSync(Protocol): - def discover_resources(self, request: ramp_dot_v1_dot_ramp__pb2.ResourceQuery, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.ResourceResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def execute_transaction(self, request: ramp_dot_v1_dot_ramp__pb2.TransactionRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.TransactionResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def report_usage(self, request: ramp_dot_v1_dot_ramp__pb2.UsageReport, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.UsageReportResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def dispute_transaction(self, request: ramp_dot_v1_dot_ramp__pb2.DisputeRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DisputeResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def request_domain_verification(self, request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def confirm_domain_verification(self, request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class ExchangeServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: ExchangeServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - endpoints={ - "/ramp.v1.ExchangeService/DiscoverResources": EndpointSync.unary( - method=MethodInfo( - name="DiscoverResources", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.ResourceQuery, - output=ramp_dot_v1_dot_ramp__pb2.ResourceResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.discover_resources, - ), - "/ramp.v1.ExchangeService/ExecuteTransaction": EndpointSync.unary( - method=MethodInfo( - name="ExecuteTransaction", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.TransactionRequest, - output=ramp_dot_v1_dot_ramp__pb2.TransactionResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.execute_transaction, - ), - "/ramp.v1.ExchangeService/ReportUsage": EndpointSync.unary( - method=MethodInfo( - name="ReportUsage", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.UsageReport, - output=ramp_dot_v1_dot_ramp__pb2.UsageReportResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.report_usage, - ), - "/ramp.v1.ExchangeService/DisputeTransaction": EndpointSync.unary( - method=MethodInfo( - name="DisputeTransaction", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DisputeRequest, - output=ramp_dot_v1_dot_ramp__pb2.DisputeResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.dispute_transaction, - ), - "/ramp.v1.ExchangeService/RequestDomainVerification": EndpointSync.unary( - method=MethodInfo( - name="RequestDomainVerification", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, - output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.request_domain_verification, - ), - "/ramp.v1.ExchangeService/ConfirmDomainVerification": EndpointSync.unary( - method=MethodInfo( - name="ConfirmDomainVerification", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, - output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.confirm_domain_verification, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/ramp.v1.ExchangeService" - - -class ExchangeServiceClientSync(ConnectClientSync): - def discover_resources( - self, - request: ramp_dot_v1_dot_ramp__pb2.ResourceQuery, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.ResourceResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="DiscoverResources", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.ResourceQuery, - output=ramp_dot_v1_dot_ramp__pb2.ResourceResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def execute_transaction( - self, - request: ramp_dot_v1_dot_ramp__pb2.TransactionRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.TransactionResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="ExecuteTransaction", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.TransactionRequest, - output=ramp_dot_v1_dot_ramp__pb2.TransactionResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def report_usage( - self, - request: ramp_dot_v1_dot_ramp__pb2.UsageReport, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.UsageReportResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="ReportUsage", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.UsageReport, - output=ramp_dot_v1_dot_ramp__pb2.UsageReportResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def dispute_transaction( - self, - request: ramp_dot_v1_dot_ramp__pb2.DisputeRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.DisputeResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="DisputeTransaction", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DisputeRequest, - output=ramp_dot_v1_dot_ramp__pb2.DisputeResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def request_domain_verification( - self, - request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge: - return self.execute_unary( - request=request, - method=MethodInfo( - name="RequestDomainVerification", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationRequest, - output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationChallenge, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def confirm_domain_verification( - self, - request: ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult: - return self.execute_unary( - request=request, - method=MethodInfo( - name="ConfirmDomainVerification", - service_name="ramp.v1.ExchangeService", - input=ramp_dot_v1_dot_ramp__pb2.DomainVerificationConfirmation, - output=ramp_dot_v1_dot_ramp__pb2.DomainVerificationResult, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - -class CatalogServiceSync(Protocol): - def push_resources(self, request: ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def remove_resources(self, request: ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - def refresh_catalog(self, request: ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class CatalogServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: CatalogServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - endpoints={ - "/ramp.v1.CatalogService/PushResources": EndpointSync.unary( - method=MethodInfo( - name="PushResources", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, - output=ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.push_resources, - ), - "/ramp.v1.CatalogService/RemoveResources": EndpointSync.unary( - method=MethodInfo( - name="RemoveResources", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, - output=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.remove_resources, - ), - "/ramp.v1.CatalogService/RefreshCatalog": EndpointSync.unary( - method=MethodInfo( - name="RefreshCatalog", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, - output=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.refresh_catalog, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/ramp.v1.CatalogService" - - -class CatalogServiceClientSync(ConnectClientSync): - def push_resources( - self, - request: ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="PushResources", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.PushResourcesRequest, - output=ramp_dot_v1_dot_ramp__pb2.PushResourcesResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def remove_resources( - self, - request: ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="RemoveResources", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesRequest, - output=ramp_dot_v1_dot_ramp__pb2.RemoveResourcesResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - def refresh_catalog( - self, - request: ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="RefreshCatalog", - service_name="ramp.v1.CatalogService", - input=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogRequest, - output=ramp_dot_v1_dot_ramp__pb2.RefreshCatalogResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - -class BrokerServiceSync(Protocol): - def resolve(self, request: ramp_dot_v1_dot_ramp__pb2.RAMPRequest, ctx: RequestContext) -> ramp_dot_v1_dot_ramp__pb2.RAMPResponse: - raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") - - -class BrokerServiceWSGIApplication(ConnectWSGIApplication): - def __init__(self, service: BrokerServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None, compressions: Iterable[Compression] | None = None, codecs: Iterable[Codec] | None = None) -> None: - super().__init__( - endpoints={ - "/ramp.v1.BrokerService/Resolve": EndpointSync.unary( - method=MethodInfo( - name="Resolve", - service_name="ramp.v1.BrokerService", - input=ramp_dot_v1_dot_ramp__pb2.RAMPRequest, - output=ramp_dot_v1_dot_ramp__pb2.RAMPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - function=service.resolve, - ), - }, - interceptors=interceptors, - read_max_bytes=read_max_bytes, - compressions=compressions, - codecs=codecs, - ) - - @property - def path(self) -> str: - """Returns the URL path to mount the application to when serving multiple applications.""" - return "/ramp.v1.BrokerService" - - -class BrokerServiceClientSync(ConnectClientSync): - def resolve( - self, - request: ramp_dot_v1_dot_ramp__pb2.RAMPRequest, - *, - headers: Headers | Mapping[str, str] | None = None, - timeout_ms: int | None = None, - ) -> ramp_dot_v1_dot_ramp__pb2.RAMPResponse: - return self.execute_unary( - request=request, - method=MethodInfo( - name="Resolve", - service_name="ramp.v1.BrokerService", - input=ramp_dot_v1_dot_ramp__pb2.RAMPRequest, - output=ramp_dot_v1_dot_ramp__pb2.RAMPResponse, - idempotency_level=IdempotencyLevel.UNKNOWN, - ), - headers=headers, - timeout_ms=timeout_ms, - ) - - diff --git a/gen/python/ramp/v1/ramp_pb2.py b/gen/python/ramp/v1/ramp_pb2.py deleted file mode 100644 index 01d1d7da..00000000 --- a/gen/python/ramp/v1/ramp_pb2.py +++ /dev/null @@ -1,306 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: ramp/v1/ramp.proto -# Protobuf Python Version: 7.35.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 7, - 35, - 1, - '', - 'ramp/v1/ramp.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2 -from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -from google.protobuf import duration_pb2 as google_dot_protobuf_dot_duration__pb2 -from buf.validate import validate_pb2 as buf_dot_validate_dot_validate__pb2 -from ramp.v1 import vocab_pb2 as ramp_dot_v1_dot_vocab__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12ramp/v1/ramp.proto\x12\x07ramp.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1b\x62uf/validate/validate.proto\x1a\x13ramp/v1/vocab.proto\"\x84\x01\n\x15\x41\x63\x63\x65ptableRestriction\x12,\n\x04\x61xis\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindR\x04\x61xis\x12=\n\x06values\x18\x02 \x03(\tB%\xbaH\"\x92\x01\x1f\x10@\"\x1br\x19\x10\x01\x18@2\x13^[A-Za-z0-9._:*-]+$R\x06values\"\xa1\x03\n\rResourceQuery\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12:\n\x08\x64\x65\x61\x64line\x18\x06 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x08\x64\x65\x61\x64line\x88\x01\x01\x12-\n\x12supported_profiles\x18\x07 \x03(\tR\x11supportedProfiles\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_deadline\"\xb9\x02\n\x10ResourceResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x65xchange\x18\x03 \x01(\tR\x08\x65xchange\x12&\n\x06offers\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12\x36\n\x0coffer_groups\x18\x05 \x03(\x0b\x32\x13.ramp.v1.OfferGroupR\x0bofferGroups\x12:\n\nrate_limit\x18\x06 \x01(\x0b\x32\x16.ramp.v1.RateLimitInfoH\x00R\trateLimit\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_rate_limit\"\xcc\x02\n\nOfferGroup\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12&\n\x06offers\x18\x02 \x03(\x0b\x32\x0e.ramp.v1.OfferR\x06offers\x12H\n\x10\x64iscovery_method\x18\x03 \x01(\x0e\x32\x18.ramp.v1.DiscoveryMethodH\x00R\x0f\x64iscoveryMethod\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x04 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x01R\rabsenceReason\x88\x01\x01\x12I\n\x13restriction_filters\x18\x05 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x12restrictionFiltersB\x13\n\x11_discovery_methodB\x11\n\x0f_absence_reason\"\xbd\x01\n\rRateLimitInfo\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x1c\n\tremaining\x18\x02 \x01(\x05R\tremaining\x12\x35\n\x08reset_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07resetAt\x12\x36\n\x06window\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x42\t\n\x07_window\"\x97\x02\n\x15SubscriptionQuotaInfo\x12\'\n\x0fsubscription_id\x18\x01 \x01(\tR\x0esubscriptionId\x12\x1f\n\x0bquota_limit\x18\x02 \x01(\x05R\nquotaLimit\x12\x1d\n\nquota_used\x18\x03 \x01(\x05R\tquotaUsed\x12\'\n\x0fquota_remaining\x18\x04 \x01(\x05R\x0equotaRemaining\x12<\n\tresets_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x08resetsAt\x88\x01\x01\x12\x17\n\x04unit\x18\x06 \x01(\tH\x01R\x04unit\x88\x01\x01\x42\x0c\n\n_resets_atB\x07\n\x05_unit\"\xdb\x07\n\x05Offer\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12*\n\x07pricing\x18\x03 \x01(\x0b\x32\x10.ramp.v1.PricingR\x07pricing\x12@\n\x0f\x64\x65livery_method\x18\x04 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12?\n\treporting\x18\x05 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\treporting\x88\x01\x01\x12>\n\nexpires_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12:\n\x08identity\x18\x07 \x01(\x0b\x32\x19.ramp.v1.ResourceIdentityH\x03R\x08identity\x88\x01\x01\x12\x1c\n\tsignature\x18\t \x01(\tR\tsignature\x12/\n\x13signature_algorithm\x18\n \x01(\tR\x12signatureAlgorithm\x12,\n\x0fsubscription_id\x18\x0b \x01(\tH\x04R\x0esubscriptionId\x88\x01\x01\x12%\n\x0eiab_categories\x18\r \x03(\tR\riabCategories\x12@\n\x0c\x61ttestations\x18\x0e \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12=\n\ndata_as_of\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\x08\x64\x61taAsOf\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12,\n\x08previews\x18\x12 \x03(\x0b\x32\x10.ramp.v1.PreviewR\x08previews\x12*\n\x05terms\x18\x13 \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x08\n\x06_titleB\x0c\n\n_reportingB\r\n\x0b_expires_atB\x0b\n\t_identityB\x12\n\x10_subscription_idB\r\n\x0b_data_as_of\"\xe1\x05\n\x10ResourceIdentity\x12(\n\rcanonical_url\x18\x01 \x01(\tH\x00R\x0c\x63\x61nonicalUrl\x88\x01\x01\x12\x15\n\x03\x64oi\x18\x02 \x01(\tH\x01R\x03\x64oi\x88\x01\x01\x12 \n\tiptc_guid\x18\x03 \x01(\tH\x02R\x08iptcGuid\x88\x01\x01\x12\x17\n\x04isni\x18\x04 \x01(\tH\x03R\x04isni\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x05 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x06 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12V\n\x13resource_mutability\x18\x08 \x01(\x0e\x32\x1b.ramp.v1.ResourceMutabilityB\x08\xbaH\x05\x82\x01\x02 \x00R\x12resourceMutability\x12(\n\rc2pa_manifest\x18\x07 \x01(\tH\x06R\x0c\x63\x32paManifest\x88\x01\x01\x12\x39\n\x0b\x63\x32pa_status\x18\t \x01(\x0e\x32\x13.ramp.v1.C2PAStatusH\x07R\nc2paStatus\x88\x01\x01\x12&\n\x0csoft_binding\x18\n \x01(\tH\x08R\x0bsoftBinding\x88\x01\x01\x12\x33\n\x13soft_binding_method\x18\x0b \x01(\tH\tR\x11softBindingMethod\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x10\n\x0e_canonical_urlB\x06\n\x04_doiB\x0c\n\n_iptc_guidB\x07\n\x05_isniB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\x10\n\x0e_c2pa_manifestB\x0e\n\x0c_c2pa_statusB\x0f\n\r_soft_bindingB\x16\n\x14_soft_binding_method\"\xe1\x01\n\x13ResourceAttestation\x12\x1a\n\x08verifier\x18\x01 \x01(\tR\x08verifier\x12\x10\n\x03kid\x18\x02 \x01(\tR\x03kid\x12;\n\x0b\x61ttested_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nattestedAt\x12\x10\n\x03uri\x18\x04 \x01(\tR\x03uri\x12/\n\x06\x63laims\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06\x63laims\x12\x1c\n\tsignature\x18\x06 \x01(\tR\tsignature\"\x92\x03\n\x07License\x12\x15\n\x03uri\x18\x01 \x01(\tH\x00R\x03uri\x88\x01\x01\x12\x13\n\x02id\x18\x02 \x01(\tH\x01R\x02id\x88\x01\x01\x12\x17\n\x04name\x18\x03 \x01(\tH\x02R\x04name\x88\x01\x01\x12!\n\timmutable\x18\x04 \x01(\x08H\x03R\timmutable\x88\x01\x01\x12l\n\nuri_digest\x18\x05 \x01(\tBH\xbaHErC2A^(sha256:[0-9a-f]{64}|sha384:[0-9a-f]{96}|sha512:[0-9a-f]{128})?$H\x04R\turiDigest\x88\x01\x01:|\xbaHy\x1aw\n license.digest_required_with_uri\x12*uri_digest is required whenever uri is set\x1a\'this.uri == \'\' || this.uri_digest != \'\'B\x06\n\x04_uriB\x05\n\x03_idB\x07\n\x05_nameB\x0c\n\n_immutableB\r\n\x0b_uri_digest\"\x8a\x03\n\x0bRestriction\x12\x36\n\x04kind\x18\x01 \x01(\x0e\x32\x18.ramp.v1.RestrictionKindB\x08\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12\x43\n\tpermitted\x18\x02 \x03(\tB%\xbaH\"\x92\x01\x1f\x10@\"\x1br\x19\x10\x01\x18@2\x13^[A-Za-z0-9._:*-]+$R\tpermitted\x12\x45\n\nprohibited\x18\x03 \x03(\tB%\xbaH\"\x92\x01\x1f\x10@\"\x1br\x19\x10\x01\x18@2\x13^[A-Za-z0-9._:*-]+$R\nprohibited\x12\x1a\n\x08\x61\x64visory\x18\x04 \x01(\x08R\x08\x61\x64visory:\x9a\x01\xbaH\x96\x01\x1a\x93\x01\n)restriction.permitted_prohibited_disjoint\x12\x36\x61 token cannot appear in both permitted and prohibited\x1a.this.permitted.all(p, !(p in this.prohibited))\"\xb0\x02\n\x05Quota\x12\xcf\x01\n\x06metric\x18\x01 \x01(\tB\xb6\x01\xbaH4r2\x18@2.^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)$\x8a\xb5\x18\rdisplay-words\x8a\xb5\x18\x0bimpressions\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x0cinput-tokens\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06\x63opies\x8a\xb5\x18\x05seats\x9a\xb5\x18\x0cquotametricsR\x06metric\x12\x1d\n\x05limit\x18\x02 \x01(\x03\x42\x07\xbaH\x04\"\x02(\x01R\x05limit\x12\x36\n\x06window\x18\x03 \x01(\x0e\x32\x14.ramp.v1.QuotaWindowB\x08\xbaH\x05\x82\x01\x02 \x00R\x06window\"\x98\x04\n\nObligation\x12\x35\n\x04kind\x18\x01 \x01(\x0e\x32\x17.ramp.v1.ObligationKindB\x08\xbaH\x05\x82\x01\x02 \x00R\x04kind\x12>\n\x07trigger\x18\x02 \x01(\x0e\x32\x1a.ramp.v1.ObligationTriggerB\x08\xbaH\x05\x82\x01\x02 \x00R\x07trigger\x12:\n\rscope_license\x18\x03 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x0cscopeLicense\x88\x01\x01\x12\x1b\n\x06\x64\x65tail\x18\x04 \x01(\tH\x01R\x06\x64\x65tail\x88\x01\x01:\x9c\x02\xbaH\x98\x02\x1a\x95\x02\n-obligation.share_alike.requires_scope_license\x12\x44SHARE_ALIKE requires scope_license to identify a license (id or uri)\x1a\x9d\x01this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))B\x10\n\x0e_scope_licenseB\t\n\x07_detail\"\xd5\x06\n\x0bLicenseTerm\x12/\n\x07license\x18\x01 \x01(\x0b\x32\x10.ramp.v1.LicenseH\x00R\x07license\x88\x01\x01\x12>\n\tsemantics\x18\x02 \x01(\x0e\x32\x16.ramp.v1.TermSemanticsB\x08\xbaH\x05\x82\x01\x02 \x00R\tsemantics\x12\x38\n\x0crestrictions\x18\x03 \x03(\x0b\x32\x14.ramp.v1.RestrictionR\x0crestrictions\x12&\n\x06quotas\x18\x04 \x03(\x0b\x32\x0e.ramp.v1.QuotaR\x06quotas\x12\x35\n\x0bobligations\x18\x05 \x03(\x0b\x32\x13.ramp.v1.ObligationR\x0bobligations\x12\x37\n\x07pricing\x18\x06 \x01(\x0b\x32\x10.ramp.v1.PricingB\x06\xbaH\x03\xc8\x01\x01H\x01R\x07pricing\x88\x01\x01\x12 \n\x06scopes\x18\x07 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\"\n\npart_label\x18\x08 \x01(\tH\x02R\tpartLabel\x88\x01\x01:\x95\x03\xbaH\x91\x03\x1a\xe2\x01\n(license_term.reference_only.requires_uri\x12>REFERENCE_ONLY terms must carry a license with a non-empty uri\x1avthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\x1a\xa9\x01\n%license_term.one_restriction_per_kind\x12+at most one restriction is allowed per kind\x1aSthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)B\n\n\x08_licenseB\n\n\x08_pricingB\r\n\x0b_part_label\"\xd7\x01\n\x07Preview\x12\x10\n\x03url\x18\x01 \x01(\tR\x03url\x12\x1d\n\nmedia_type\x18\x02 \x01(\tR\tmediaType\x12\x19\n\x05width\x18\x03 \x01(\x05H\x00R\x05width\x88\x01\x01\x12\x1b\n\x06height\x18\x04 \x01(\x05H\x01R\x06height\x88\x01\x01\x12\x1f\n\x08\x64uration\x18\x05 \x01(\x05H\x02R\x08\x64uration\x88\x01\x01\x12\x17\n\x04size\x18\x06 \x01(\tH\x03R\x04size\x88\x01\x01\x42\x08\n\x06_widthB\t\n\x07_heightB\x0b\n\t_durationB\x07\n\x05_size\"\xd5\x07\n\x07Pricing\x12\x35\n\x05model\x18\x01 \x01(\x0e\x32\x15.ramp.v1.PricingModelB\x08\xbaH\x05\x82\x01\x02 \x00R\x05model\x12\x12\n\x04rate\x18\x02 \x01(\x01R\x04rate\x12\x1a\n\x08\x63urrency\x18\x03 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x04 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x05 \x01(\x05H\x01R\x11\x65stimatedQuantity\x88\x01\x01\x12;\n\x17license_duration_months\x18\x07 \x01(\x05H\x02R\x15licenseDurationMonths\x88\x01\x01\x12\x93\x02\n\x04unit\x18\x08 \x01(\tB\xf9\x01\xbaH5r3\x18@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$\x8a\xb5\x18\x07\x66\x65tches\x8a\xb5\x18\x08\x61\x63\x63\x65sses\x8a\xb5\x18\x06tokens\x8a\xb5\x18\x05\x63\x61lls\x8a\xb5\x18\x05pages\x8a\xb5\x18\x07seconds\x8a\xb5\x18\x07minutes\x8a\xb5\x18\x07records\x8a\xb5\x18\x07streams\x8a\xb5\x18\x06images\x8a\xb5\x18\x05seats\x8a\xb5\x18\x12units-manufactured\x8a\xb5\x18\ncharacters\x8a\xb5\x18\x05\x62ytes\x8a\xb5\x18\x05items\x8a\xb5\x18\x05sq-km\x9a\xb5\x18\x0cpricingunitsH\x03R\x04unit\x88\x01\x01\x12\x39\n\x08metering\x18\t \x01(\x0e\x32\x18.ramp.v1.PricingMeteringH\x04R\x08metering\x88\x01\x01:\xa7\x02\xbaH\xa3\x02\x1a\x97\x01\n\x1epricing.per_unit.requires_unit\x12\'unit is required when model is PER_UNIT\x1aLthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\x1a\x86\x01\n\x16pricing.free.zero_rate\x12!rate must be 0 when model is FREE\x1aIthis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0B\x0c\n\n_unit_costB\x15\n\x13_estimated_quantityB\x1a\n\x18_license_duration_monthsB\x07\n\x05_unitB\x0b\n\t_metering\"\xfa\x02\n\tRequester\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x34\n\x04type\x18\x03 \x01(\x0e\x32\x16.ramp.v1.RequesterTypeB\x08\xbaH\x05\x82\x01\x02 \x00R\x04type\x12\x17\n\x04name\x18\x04 \x01(\tH\x00R\x04name\x88\x01\x01\x12$\n\x0b\x62illing_ref\x18\x05 \x01(\tH\x01R\nbillingRef\x88\x01\x01\x12 \n\x06scopes\x18\x06 \x03(\tB\x08\xbaH\x05\x92\x01\x02\x10@R\x06scopes\x12\x38\n\ndelegation\x18\x07 \x01(\x0b\x32\x13.ramp.v1.DelegationH\x02R\ndelegation\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x07\n\x05_nameB\x0e\n\x0c_billing_refB\r\n\x0b_delegation\"\xe9\x04\n\nDelegation\x12)\n\x10principal_domain\x18\x01 \x01(\tR\x0fprincipalDomain\x12!\n\x0cprincipal_id\x18\x02 \x01(\tR\x0bprincipalId\x12\x16\n\x06scopes\x18\x03 \x03(\tR\x06scopes\x12\x39\n\nexpires_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12+\n\x0fmax_spend_cents\x18\x05 \x01(\x03H\x00R\rmaxSpendCents\x88\x01\x01\x12&\n\x0cmax_accesses\x18\t \x01(\x05H\x01R\x0bmaxAccesses\x88\x01\x01\x12\x41\n\x0cquota_period\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x02R\x0bquotaPeriod\x88\x01\x01\x12\x14\n\x05token\x18\x06 \x01(\x0cR\x05token\x12!\n\x0ctoken_format\x18\x07 \x01(\tR\x0btokenFormat\x12*\n\x0erevocation_uri\x18\x08 \x01(\tH\x03R\rrevocationUri\x88\x01\x01\x12\x1b\n\x06issuer\x18\x0b \x01(\tH\x04R\x06issuer\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x12\n\x10_max_spend_centsB\x0f\n\r_max_accessesB\x0f\n\r_quota_periodB\x11\n\x0f_revocation_uriB\t\n\x07_issuer\"\xf7\x02\n\x12TransactionRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x12\x30\n\trequester\x18\x04 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12,\n\x0foffer_signature\x18\x06 \x01(\tH\x01R\x0eofferSignature\x88\x01\x01\x12.\n\x05items\x18\x07 \x03(\x0b\x32\x18.ramp.v1.TransactionItemR\x05items\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_offer_idB\x12\n\x10_offer_signature\"U\n\x0fTransactionItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12\'\n\x0foffer_signature\x18\x02 \x01(\tR\x0eofferSignature\"\xc3\x08\n\x13TransactionResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12*\n\x0etransaction_id\x18\x03 \x01(\tH\x00R\rtransactionId\x88\x01\x01\x12\"\n\nbilling_id\x18\x04 \x01(\tH\x01R\tbillingId\x88\x01\x01\x12*\n\x0eresource_title\x18\x05 \x01(\tH\x02R\rresourceTitle\x88\x01\x01\x12&\n\x04\x63ost\x18\x06 \x01(\x0b\x32\r.ramp.v1.CostH\x03R\x04\x63ost\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\x07 \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\x08 \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x04R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x05R\texpiresAt\x88\x01\x01\x12.\n\x13\x61gent_identity_hash\x18\n \x01(\tR\x11\x61gentIdentityHash\x12\x32\n\x12retrieval_endpoint\x18\x12 \x01(\tH\x06R\x11retrievalEndpoint\x88\x01\x01\x12,\n\x0fsubscription_id\x18\x0c \x01(\tH\x07R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x10 \x01(\x0b\x32\r.ramp.v1.CostH\x08R\x15subscriptionUnitValue\x88\x01\x01\x12\x34\n\x05items\x18\r \x03(\x0b\x32\x1e.ramp.v1.TransactionResultItemR\x05items\x12\x31\n\ntotal_cost\x18\x0e \x01(\x0b\x32\r.ramp.v1.CostH\tR\ttotalCost\x88\x01\x01\x12M\n\x12subscription_quota\x18\x11 \x03(\x0b\x32\x1e.ramp.v1.SubscriptionQuotaInfoR\x11subscriptionQuota\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_transaction_idB\r\n\x0b_billing_idB\x11\n\x0f_resource_titleB\x07\n\x05_costB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\r\n\x0b_total_cost\"\xf3\x06\n\x15TransactionResultItem\x12\x19\n\x08offer_id\x18\x01 \x01(\tR\x07offerId\x12%\n\x0etransaction_id\x18\x02 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x03 \x01(\tR\tbillingId\x12*\n\x0eresource_title\x18\x04 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x05 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12,\n\x0fsubscription_id\x18\x06 \x01(\tH\x01R\x0esubscriptionId\x88\x01\x01\x12J\n\x17subscription_unit_value\x18\x0b \x01(\x0b\x32\r.ramp.v1.CostH\x02R\x15subscriptionUnitValue\x88\x01\x01\x12?\n\rdenial_reason\x18\x07 \x01(\x0e\x32\x15.ramp.v1.DenialReasonH\x03R\x0c\x64\x65nialReason\x88\x01\x01\x12O\n\x16restriction_mismatches\x18\r \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12>\n\nexpires_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x04R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\x0c \x01(\tH\x05R\x11retrievalEndpoint\x88\x01\x01\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x06R\x13reportingObligation\x88\x01\x01\x42\x11\n\x0f_resource_titleB\x12\n\x10_subscription_idB\x1a\n\x18_subscription_unit_valueB\x10\n\x0e_denial_reasonB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x17\n\x15_reporting_obligation\"j\n\x04\x43ost\x12\x16\n\x06\x61mount\x18\x01 \x01(\x01R\x06\x61mount\x12\x1a\n\x08\x63urrency\x18\x02 \x01(\tR\x08\x63urrency\x12 \n\tunit_cost\x18\x03 \x01(\x01H\x00R\x08unitCost\x88\x01\x01\x42\x0c\n\n_unit_cost\"\xe2\x01\n\x14PushResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x30\n\x07\x65ntries\x18\x03 \x03(\x0b\x32\x16.ramp.v1.ResourceEntryR\x07\x65ntries\x12\x1b\n\tcaller_id\x18\x04 \x01(\tR\x08\x63\x61llerId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xb3\x06\n\rResourceEntry\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\"\n\ncontent_id\x18\x03 \x01(\tH\x00R\tcontentId\x88\x01\x01\x12\x19\n\x05title\x18\x04 \x01(\tH\x01R\x05title\x88\x01\x01\x12\"\n\nword_count\x18\x05 \x01(\x05H\x02R\twordCount\x88\x01\x01\x12\x32\n\x12\x65stimated_quantity\x18\x06 \x01(\x05H\x03R\x11\x65stimatedQuantity\x88\x01\x01\x12&\n\x0c\x63ontent_hash\x18\x07 \x01(\tH\x04R\x0b\x63ontentHash\x88\x01\x01\x12$\n\x0bhash_method\x18\x08 \x01(\tH\x05R\nhashMethod\x88\x01\x01\x12\x35\n\x06source\x18\t \x01(\x0e\x32\x18.ramp.v1.IngestionSourceH\x06R\x06source\x88\x01\x01\x12\x30\n\x11provenance_source\x18\n \x01(\tH\x07R\x10provenanceSource\x88\x01\x01\x12R\n\x14provenance_timestamp\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x08R\x13provenanceTimestamp\x88\x01\x01\x12@\n\x0c\x61ttestations\x18\x0c \x03(\x0b\x32\x1c.ramp.v1.ResourceAttestationR\x0c\x61ttestations\x12*\n\x05terms\x18\r \x03(\x0b\x32\x14.ramp.v1.LicenseTermR\x05terms\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_content_idB\x08\n\x06_titleB\r\n\x0b_word_countB\x15\n\x13_estimated_quantityB\x0f\n\r_content_hashB\x0e\n\x0c_hash_methodB\t\n\x07_sourceB\x14\n\x12_provenance_sourceB\x17\n\x15_provenance_timestamp\"\xcb\x01\n\x15PushResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x08\x61\x63\x63\x65pted\x18\x02 \x01(\x05R\x08\x61\x63\x63\x65pted\x12\x1a\n\x08rejected\x18\x03 \x01(\x05R\x08rejected\x12\x1a\n\x08warnings\x18\x04 \x03(\tR\x08warnings\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"]\n\x16RemoveResourcesRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\x12\x14\n\x05paths\x18\x03 \x03(\tR\x05paths\"E\n\x17RemoveResourcesResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07removed\x18\x02 \x01(\x05R\x07removed\"F\n\x15RefreshCatalogRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\ttenant_id\x18\x02 \x01(\tR\x08tenantId\"D\n\x16RefreshCatalogResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x18\n\x07started\x18\x02 \x01(\x08R\x07started\"\x99\x02\n\x13ReportingObligation\x12\x1a\n\x08required\x18\x01 \x01(\x08R\x08required\x12\x36\n\x06window\x18\x02 \x01(\x0b\x32\x19.google.protobuf.DurationH\x00R\x06window\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x03 \x01(\tH\x01R\x08\x65ndpoint\x88\x01\x01\x12\'\n\x0frequired_fields\x18\x04 \x03(\tR\x0erequiredFields\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_windowB\x0b\n\t_endpoint\"\xa0\x03\n\x0bUsageReport\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12$\n\x05usage\x18\x05 \x01(\x0b\x32\x0e.ramp.v1.UsageR\x05usage\x12\x38\n\ttimestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ttimestamp\x12\x1f\n\x08\x65xchange\x18\x08 \x01(\tH\x00R\x08\x65xchange\x88\x01\x01\x12+\n\x06\x61ssets\x18\t \x03(\x0b\x32\x13.ramp.v1.UsageAssetR\x06\x61ssets\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0b\n\t_exchange\"\xd1\x01\n\x11\x41ttributionDetail\x12(\n\rdisplayed_url\x18\x01 \x01(\tH\x00R\x0c\x64isplayedUrl\x88\x01\x01\x12\x34\n\x06\x66ormat\x18\x02 \x01(\x0e\x32\x17.ramp.v1.CitationFormatH\x01R\x06\x66ormat\x88\x01\x01\x12+\n\x0fvisible_to_user\x18\x03 \x01(\x08H\x02R\rvisibleToUser\x88\x01\x01\x42\x10\n\x0e_displayed_urlB\t\n\x07_formatB\x12\n\x10_visible_to_user\"\xa9\x03\n\x05Usage\x12\x1a\n\x08\x66unction\x18\x01 \x03(\tR\x08\x66unction\x12\x14\n\x05subfn\x18\x02 \x03(\tR\x05subfn\x12+\n\x11\x63onsumed_quantity\x18\x03 \x01(\x05R\x10\x63onsumedQuantity\x12/\n\x11\x64isplayed_to_user\x18\x04 \x01(\x08H\x00R\x0f\x64isplayedToUser\x88\x01\x01\x12\x30\n\x11\x63itation_included\x18\x05 \x01(\x08H\x01R\x10\x63itationIncluded\x88\x01\x01\x12<\n\x0b\x61ttribution\x18\x06 \x03(\x0b\x32\x1a.ramp.v1.AttributionDetailR\x0b\x61ttribution\x12\x62\n\rconsumed_unit\x18\x08 \x01(\tB8\xbaH5r3\x18@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$H\x02R\x0c\x63onsumedUnit\x88\x01\x01\x42\x14\n\x12_displayed_to_userB\x14\n\x12_citation_includedB\x10\n\x0e_consumed_unit\"v\n\nUsageAsset\x12\x10\n\x03uri\x18\x01 \x01(\tR\x03uri\x12\x19\n\x05title\x18\x02 \x01(\tH\x00R\x05title\x88\x01\x01\x12\"\n\npackage_id\x18\x03 \x01(\tH\x01R\tpackageId\x88\x01\x01\x42\x08\n\x06_titleB\r\n\x0b_package_id\"\x92\x01\n\x13UsageReportResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1b\n\treport_id\x18\x03 \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xa7\x04\n\x0bRAMPRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x30\n\trequester\x18\x03 \x01(\x0b\x32\x12.ramp.v1.RequesterR\trequester\x12\x1d\n\x04uris\x18\x08 \x03(\tB\t\xbaH\x06\x92\x01\x03\x10\x80\x02R\x04uris\x12W\n\x17\x61\x63\x63\x65ptable_restrictions\x18\t \x03(\x0b\x32\x1e.ramp.v1.AcceptableRestrictionR\x16\x61\x63\x63\x65ptableRestrictions\x12\x42\n\x0b\x63onstraints\x18\x04 \x01(\x0b\x32\x1b.ramp.v1.RequestConstraintsH\x00R\x0b\x63onstraints\x88\x01\x01\x12-\n\x12supported_profiles\x18\x05 \x03(\tR\x11supportedProfiles\x12\x19\n\x05query\x18\x06 \x01(\tH\x01R\x05query\x88\x01\x01\x12\x43\n\x0esearch_filters\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02R\rsearchFilters\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_constraintsB\x08\n\x06_queryB\x11\n\x0f_search_filters\"\xca\x05\n\x12RequestConstraints\x12\x1c\n\texchanges\x18\x01 \x03(\tR\texchanges\x12/\n\tmax_price\x18\x02 \x01(\x0b\x32\r.ramp.v1.CostH\x00R\x08maxPrice\x88\x01\x01\x12\'\n\rmax_unit_cost\x18\x03 \x01(\x01H\x01R\x0bmaxUnitCost\x88\x01\x01\x12H\n\x13\x64\x65livery_preference\x18\x04 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x12\x64\x65liveryPreference\x12\x30\n\x11reporting_capable\x18\x05 \x01(\x08H\x02R\x10reportingCapable\x88\x01\x01\x12/\n\x13preferred_exchanges\x18\x06 \x03(\tR\x12preferredExchanges\x12&\n\x0c\x62udget_scope\x18\x07 \x01(\tH\x03R\x0b\x62udgetScope\x88\x01\x01\x12\x37\n\rperiod_budget\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostH\x04R\x0cperiodBudget\x88\x01\x01\x12\x43\n\rbudget_period\x18\t \x01(\x0b\x32\x19.google.protobuf.DurationH\x05R\x0c\x62udgetPeriod\x88\x01\x01\x12@\n\x0cmax_data_age\x18\n \x01(\x0b\x32\x19.google.protobuf.DurationH\x06R\nmaxDataAge\x88\x01\x01\x12\x1e\n\x08max_hops\x18\x0b \x01(\x05H\x07R\x07maxHops\x88\x01\x01\x42\x0c\n\n_max_priceB\x10\n\x0e_max_unit_costB\x14\n\x12_reporting_capableB\x0f\n\r_budget_scopeB\x10\n\x0e_period_budgetB\x10\n\x0e_budget_periodB\x0f\n\r_max_data_ageB\x0b\n\t_max_hops\"\xb0\x01\n\nJsonWebKey\x12\x10\n\x03kid\x18\x01 \x01(\tR\x03kid\x12\x10\n\x03kty\x18\x02 \x01(\tR\x03kty\x12\x10\n\x03\x63rv\x18\x03 \x01(\tR\x03\x63rv\x12\x10\n\x03use\x18\x04 \x01(\tR\x03use\x12\x10\n\x03\x61lg\x18\x05 \x01(\tR\x03\x61lg\x12\x0c\n\x01x\x18\x06 \x01(\tR\x01x\x12\x1d\n\nnot_before\x18\x07 \x01(\tR\tnotBefore\x12\x1b\n\tnot_after\x18\x08 \x01(\tR\x08notAfter\"\xef\x0c\n\x11WellKnownManifest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12+\n\x04role\x18\x02 \x01(\x0e\x32\r.ramp.v1.RoleB\x08\xbaH\x05\x82\x01\x02 \x00R\x04role\x12\x16\n\x06\x64omain\x18\x03 \x01(\tR\x06\x64omain\x12\x1d\n\x07\x63ontact\x18\x04 \x01(\tH\x00R\x07\x63ontact\x88\x01\x01\x12\x34\n\x0bpublic_keys\x18\x05 \x03(\x0b\x32\x13.ramp.v1.JsonWebKeyR\npublicKeys\x12.\n\x10invalidation_url\x18\x06 \x01(\tH\x01R\x0finvalidationUrl\x88\x01\x01\x12\x39\n\texchanges\x18\x07 \x03(\x0b\x32\x1b.ramp.v1.AuthorizedExchangeR\texchanges\x12N\n\x14\x63\x61talog_contributors\x18\x08 \x03(\x0b\x32\x1b.ramp.v1.CatalogContributorR\x13\x63\x61talogContributors\x12\x17\n\x04name\x18\t \x01(\tH\x02R\x04name\x88\x01\x01\x12\x1f\n\x08operator\x18\n \x01(\tH\x03R\x08operator\x88\x01\x01\x12,\n\x0foperator_domain\x18\x0b \x01(\tH\x04R\x0eoperatorDomain\x88\x01\x01\x12\x1f\n\x08\x65ndpoint\x18\x0c \x01(\tH\x05R\x08\x65ndpoint\x88\x01\x01\x12,\n\x0fhealth_endpoint\x18\r \x01(\tH\x06R\x0ehealthEndpoint\x88\x01\x01\x12.\n\x10\x63\x61talog_endpoint\x18\x0e \x01(\tH\x07R\x0f\x63\x61talogEndpoint\x88\x01\x01\x12>\n\x1bprotocol_versions_supported\x18\x10 \x03(\tR\x19protocolVersionsSupported\x12O\n\x18pricing_models_supported\x18\x11 \x03(\x0e\x32\x15.ramp.v1.PricingModelR\x16pricingModelsSupported\x12U\n\x1a\x64\x65livery_methods_supported\x18\x12 \x03(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x18\x64\x65liveryMethodsSupported\x12\x34\n\x16hash_methods_supported\x18\x13 \x03(\tR\x14hashMethodsSupported\x12-\n\x12\x61\x63\x63\x65pted_verifiers\x18\x14 \x03(\tR\x11\x61\x63\x63\x65ptedVerifiers\x12 \n\tterms_uri\x18\x15 \x01(\tH\x08R\x08termsUri\x88\x01\x01\x12$\n\x0bprivacy_uri\x18\x16 \x01(\tH\tR\nprivacyUri\x88\x01\x01\x12-\n\x12supported_profiles\x18\x17 \x03(\tR\x11supportedProfiles\x12I\n\x16supported_auth_methods\x18\x18 \x03(\x0e\x32\x13.ramp.v1.AuthMethodR\x14supportedAuthMethods\x12$\n\x0boidc_issuer\x18\x19 \x01(\tH\nR\noidcIssuer\x88\x01\x01\x12\x33\n\x13gnap_grant_endpoint\x18\x1a \x01(\tH\x0bR\x11gnapGrantEndpoint\x88\x01\x01\x12(\n\rbase_currency\x18\x1b \x01(\tH\x0cR\x0c\x62\x61seCurrency\x88\x01\x01\x12\x37\n\x15max_intermediary_hops\x18\x1c \x01(\x05H\rR\x13maxIntermediaryHops\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\n\n\x08_contactB\x13\n\x11_invalidation_urlB\x07\n\x05_nameB\x0b\n\t_operatorB\x12\n\x10_operator_domainB\x0b\n\t_endpointB\x12\n\x10_health_endpointB\x13\n\x11_catalog_endpointB\x0c\n\n_terms_uriB\x0e\n\x0c_privacy_uriB\x0e\n\x0c_oidc_issuerB\x16\n\x14_gnap_grant_endpointB\x10\n\x0e_base_currencyB\x18\n\x16_max_intermediary_hops\"`\n\x13KeyInvalidationList\x12/\n\x05\x61s_of\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x04\x61sOf\x12\x18\n\x07revoked\x18\x02 \x03(\tR\x07revoked\"P\n\x12\x43\x61talogContributor\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\"\n\x0crelationship\x18\x02 \x01(\tR\x0crelationship\"\xe3\x01\n\x12\x41uthorizedExchange\x12\x16\n\x06\x64omain\x18\x01 \x01(\tR\x06\x64omain\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12K\n\x0crelationship\x18\x03 \x01(\x0e\x32\x1d.ramp.v1.ProviderRelationshipB\x08\xbaH\x05\x82\x01\x02 \x00R\x0crelationship\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\xe8\x06\n\x0cRAMPResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12%\n\x0etransaction_id\x18\x04 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x05 \x01(\tR\tbillingId\x12\x1a\n\x08\x65xchange\x18\x06 \x01(\tR\x08\x65xchange\x12*\n\x0eresource_title\x18\x07 \x01(\tH\x00R\rresourceTitle\x88\x01\x01\x12!\n\x04\x63ost\x18\x08 \x01(\x0b\x32\r.ramp.v1.CostR\x04\x63ost\x12@\n\x0f\x64\x65livery_method\x18\t \x01(\x0e\x32\x17.ramp.v1.DeliveryMethodR\x0e\x64\x65liveryMethod\x12T\n\x14reporting_obligation\x18\n \x01(\x0b\x32\x1c.ramp.v1.ReportingObligationH\x01R\x13reportingObligation\x88\x01\x01\x12>\n\nexpires_at\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x02R\texpiresAt\x88\x01\x01\x12\x32\n\x12retrieval_endpoint\x18\r \x01(\tH\x03R\x11retrievalEndpoint\x88\x01\x01\x12\x33\n\x13\x61gent_identity_hash\x18\x0e \x01(\tH\x04R\x11\x61gentIdentityHash\x88\x01\x01\x12\x31\n\nbroker_fee\x18\x0c \x01(\x0b\x32\r.ramp.v1.CostH\x05R\tbrokerFee\x88\x01\x01\x12G\n\x0e\x61\x62sence_reason\x18\x10 \x01(\x0e\x32\x1b.ramp.v1.OfferAbsenceReasonH\x06R\rabsenceReason\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x11\n\x0f_resource_titleB\x17\n\x15_reporting_obligationB\r\n\x0b_expires_atB\x15\n\x13_retrieval_endpointB\x16\n\x14_agent_identity_hashB\r\n\x0b_broker_feeB\x11\n\x0f_absence_reason\"\x99\x04\n\x0e\x44isputeRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x30\n\x0fidempotency_key\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x0eidempotencyKey\x12%\n\x0etransaction_id\x18\x03 \x01(\tR\rtransactionId\x12\x1d\n\nbilling_id\x18\x04 \x01(\tR\tbillingId\x12\x38\n\x06reason\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeReasonB\x08\xbaH\x05\x82\x01\x02 \x00R\x06reason\x12%\n\x0b\x64\x65scription\x18\x06 \x01(\tH\x00R\x0b\x64\x65scription\x88\x01\x01\x12\x37\n\x15received_content_hash\x18\x07 \x01(\tH\x01R\x13receivedContentHash\x88\x01\x01\x12\x35\n\x14received_hash_method\x18\x08 \x01(\tH\x02R\x12receivedHashMethod\x88\x01\x01\x12\x1b\n\treport_id\x18\t \x01(\tR\x08reportId\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_descriptionB\x18\n\x16_received_content_hashB\x17\n\x15_received_hash_method\"\x8d\x03\n\x0f\x44isputeResponse\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\"\n\ndispute_id\x18\x02 \x01(\tH\x00R\tdisputeId\x88\x01\x01\x12Q\n\x14\x65stimated_resolution\x18\x04 \x01(\x0b\x32\x19.google.protobuf.DurationH\x01R\x13\x65stimatedResolution\x88\x01\x01\x12.\n\x06status\x18\x05 \x01(\x0e\x32\x16.ramp.v1.DisputeStatusR\x06status\x12<\n\nresolution\x18\x06 \x01(\x0e\x32\x17.ramp.v1.ResolutionTypeH\x02R\nresolution\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\r\n\x0b_dispute_idB\x17\n\x15_estimated_resolutionB\r\n\x0b_resolution\"\xc3\x01\n\x19\x44omainVerificationRequest\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12 \n\tcaller_id\x18\x03 \x01(\tH\x00R\x08\x63\x61llerId\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0c\n\n_caller_id\"\xf9\x01\n\x1b\x44omainVerificationChallenge\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x14\n\x05token\x18\x02 \x01(\tR\x05token\x12\x39\n\nexpires_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\texpiresAt\x12)\n\x10verification_url\x18\x04 \x01(\tR\x0fverificationUrl\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCritical\"\x91\x02\n\x1e\x44omainVerificationConfirmation\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12\x14\n\x05token\x18\x03 \x01(\tR\x05token\x12$\n\x0bsigning_key\x18\x04 \x01(\tH\x00R\nsigningKey\x88\x01\x01\x12\x1e\n\x08\x63\x64n_type\x18\x05 \x01(\tH\x01R\x07\x63\x64nType\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\x0e\n\x0c_signing_keyB\x0b\n\t_cdn_type\"\xf3\x01\n\x18\x44omainVerificationResult\x12\x10\n\x03ver\x18\x01 \x01(\tR\x03ver\x12\x1a\n\x06key_id\x18\x02 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12@\n\x0bvalid_until\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\nvalidUntil\x88\x01\x01\x12)\n\x03\x65xt\x18\x0f \x01(\x0b\x32\x17.google.protobuf.StructR\x03\x65xt\x12!\n\x0c\x65xt_critical\x18Z \x03(\tR\x0b\x65xtCriticalB\t\n\x07_key_idB\x0e\n\x0c_valid_until\"\x88\x06\n\x0b\x45rrorDetail\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x16\n\x06\x64omain\x18\x02 \x01(\tR\x06\x64omain\x12>\n\x08metadata\x18\x03 \x03(\x0b\x32\".ramp.v1.ErrorDetail.MetadataEntryR\x08metadata\x12K\n\x12transaction_denial\x18\n \x01(\x0b\x32\x1a.ramp.v1.TransactionDenialH\x00R\x11transactionDenial\x12H\n\x11\x63\x61talog_rejection\x18\x0b \x01(\x0b\x32\x19.ramp.v1.CatalogRejectionH\x00R\x10\x63\x61talogRejection\x12Q\n\x14registration_failure\x18\x0c \x01(\x0b\x32\x1c.ramp.v1.RegistrationFailureH\x00R\x13registrationFailure\x12\x42\n\x0f\x64ispute_failure\x18\r \x01(\x0b\x32\x17.ramp.v1.DisputeFailureH\x00R\x0e\x64isputeFailure\x12\x64\n\x1b\x64omain_verification_failure\x18\x0e \x01(\x0b\x32\".ramp.v1.DomainVerificationFailureH\x00R\x19\x64omainVerificationFailure\x12U\n\x16retrieval_auth_failure\x18\x0f \x01(\x0b\x32\x1d.ramp.v1.RetrievalAuthFailureH\x00R\x14retrievalAuthFailure\x12U\n\x16usage_report_rejection\x18\x10 \x01(\x0b\x32\x1d.ramp.v1.UsageReportRejectionH\x00R\x14usageReportRejection\x1a;\n\rMetadataEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\x08\n\x06reason\"\xcc\x01\n\x11TransactionDenial\x12\x39\n\x06reason\x18\x01 \x01(\x0e\x32\x15.ramp.v1.DenialReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12O\n\x16restriction_mismatches\x18\x02 \x03(\x0e\x32\x18.ramp.v1.RestrictionKindR\x15restrictionMismatches\x12\x1e\n\x08offer_id\x18\x03 \x01(\tH\x00R\x07offerId\x88\x01\x01\x42\x0b\n\t_offer_id\"~\n\x10\x43\x61talogRejection\x12\x43\n\x06reason\x18\x01 \x01(\x0e\x32\x1f.ramp.v1.CatalogRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\x12%\n\x0erejected_paths\x18\x02 \x03(\tR\rrejectedPaths\"]\n\x13RegistrationFailure\x12\x46\n\x06reason\x18\x01 \x01(\x0e\x32\".ramp.v1.RegistrationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"S\n\x0e\x44isputeFailure\x12\x41\n\x06reason\x18\x01 \x01(\x0e\x32\x1d.ramp.v1.DisputeFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"i\n\x19\x44omainVerificationFailure\x12L\n\x06reason\x18\x01 \x01(\x0e\x32(.ramp.v1.DomainVerificationFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14RetrievalAuthFailure\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.RetrievalAuthFailureReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason\"_\n\x14UsageReportRejection\x12G\n\x06reason\x18\x01 \x01(\x0e\x32#.ramp.v1.UsageReportRejectionReasonB\n\xbaH\x07\x82\x01\x04\x10\x01 \x00R\x06reason*\xb6\x01\n\x0f\x44iscoveryMethod\x12 \n\x1c\x44ISCOVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x44ISCOVERY_METHOD_EXCHANGE\x10\x01\x12\x1b\n\x17\x44ISCOVERY_METHOD_SEARCH\x10\x02\x12#\n\x1f\x44ISCOVERY_METHOD_RECOMMENDATION\x10\x03\x12 \n\x1c\x44ISCOVERY_METHOD_SYNDICATION\x10\x04*\xf9\x02\n\x12OfferAbsenceReason\x12$\n OFFER_ABSENCE_REASON_UNSPECIFIED\x10\x00\x12\'\n#OFFER_ABSENCE_REASON_NOT_IN_CATALOG\x10\x01\x12(\n$OFFER_ABSENCE_REASON_CONTENT_BLOCKED\x10\x02\x12-\n)OFFER_ABSENCE_REASON_RESTRICTION_FILTERED\x10\x03\x12\x30\n,OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE\x10\x04\x12\'\n#OFFER_ABSENCE_REASON_NOT_AUTHORIZED\x10\x05\x12+\n\'OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT\x10\x06\x12\x33\n/OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION\x10\x07*q\n\rTermSemantics\x12\x1e\n\x1aTERM_SEMANTICS_UNSPECIFIED\x10\x00\x12\x1d\n\x19TERM_SEMANTICS_ENUMERATED\x10\x01\x12!\n\x1dTERM_SEMANTICS_REFERENCE_ONLY\x10\x02*\xe5\x04\n\x0fRestrictionKind\x12 \n\x1cRESTRICTION_KIND_UNSPECIFIED\x10\x00\x12\xbe\x02\n\x19RESTRICTION_KIND_FUNCTION\x10\x01\x1a\x9e\x02\x92\xb5\x18\x03\x61ll\x92\xb5\x18\x06\x61i-all\x92\xb5\x18\x08\x61i-train\x92\xb5\x18\x08\x61i-input\x92\xb5\x18\x08\x61i-index\x92\xb5\x18\x06search\x92\xb5\x18\x05\x63rawl\x92\xb5\x18\x14text-and-data-mining\x92\xb5\x18\x03tts\x92\xb5\x18\ncommercial\x92\xb5\x18\x0b\x61\x64vertising\x92\xb5\x18\teditorial\x92\xb5\x18\x08research\x92\xb5\x18\treproduce\x92\xb5\x18\ndistribute\x92\xb5\x18\x06modify\x92\xb5\x18\x07\x64isplay\x92\xb5\x18\x04sync\x92\xb5\x18\tbroadcast\x92\xb5\x18\x06stream\x92\xb5\x18\x05print\x92\xb5\x18\x0bmanufacture\x92\xb5\x18\x04sell\xa2\xb5\x18\x0e\x66unctiontokens\x12\x45\n\x1aRESTRICTION_KIND_GEOGRAPHY\x10\x02\x1a%\x92\xb5\x18\x01*\x92\xb5\x18\x02\x45U\x92\xb5\x18\x03\x45\x45\x41\xa2\xb5\x18\x0fgeographytokens\x12\x8b\x01\n\x1aRESTRICTION_KIND_USER_TYPE\x10\x03\x1ak\x92\xb5\x18\nindividual\x92\xb5\x18\x08\x61\x63\x61\x64\x65mic\x92\xb5\x18\nnon_profit\x92\xb5\x18\x0enews_publisher\x92\xb5\x18\x0b\x62roadcaster\x92\xb5\x18\x11\x63ommercial_entity\xa2\xb5\x18\tusertypes\x12\x1a\n\x16RESTRICTION_KIND_OTHER\x10\x04*\x8e\x01\n\x0bQuotaWindow\x12\x1c\n\x18QUOTA_WINDOW_UNSPECIFIED\x10\x00\x12\x17\n\x13QUOTA_WINDOW_HOURLY\x10\x01\x12\x16\n\x12QUOTA_WINDOW_DAILY\x10\x02\x12\x18\n\x14QUOTA_WINDOW_MONTHLY\x10\x03\x12\x16\n\x12QUOTA_WINDOW_TOTAL\x10\x04*\xf2\x01\n\x0eObligationKind\x12\x1f\n\x1bOBLIGATION_KIND_UNSPECIFIED\x10\x00\x12\x1f\n\x1bOBLIGATION_KIND_ATTRIBUTION\x10\x01\x12 \n\x1cOBLIGATION_KIND_CONTRIBUTION\x10\x02\x12\x1f\n\x1bOBLIGATION_KIND_SHARE_ALIKE\x10\x03\x12$\n OBLIGATION_KIND_NETWORK_COPYLEFT\x10\x04\x12\x1a\n\x16OBLIGATION_KIND_NOTICE\x10\x05\x12\x19\n\x15OBLIGATION_KIND_OTHER\x10\x06*\xcf\x01\n\x11ObligationTrigger\x12\"\n\x1eOBLIGATION_TRIGGER_UNSPECIFIED\x10\x00\x12\x1d\n\x19OBLIGATION_TRIGGER_ON_USE\x10\x01\x12&\n\"OBLIGATION_TRIGGER_ON_DISTRIBUTION\x10\x02\x12)\n%OBLIGATION_TRIGGER_ON_NETWORK_SERVICE\x10\x03\x12$\n OBLIGATION_TRIGGER_ON_DERIVATIVE\x10\x04*y\n\x0cPricingModel\x12\x1d\n\x19PRICING_MODEL_UNSPECIFIED\x10\x00\x12\x16\n\x12PRICING_MODEL_FREE\x10\x01\x12\x1a\n\x16PRICING_MODEL_PER_UNIT\x10\x02\x12\x16\n\x12PRICING_MODEL_FLAT\x10\x03*u\n\x0fPricingMetering\x12\x1b\n\x17PRICING_METERING_ONLINE\x10\x00\x12\x19\n\x15PRICING_METERING_NONE\x10\x01\x12*\n&PRICING_METERING_OFFLINE_SELF_REPORTED\x10\x02*\x8e\x01\n\x0e\x44\x65liveryMethod\x12\x1f\n\x1b\x44\x45LIVERY_METHOD_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x44\x45LIVERY_METHOD_DIRECT\x10\x01\x12 \n\x1c\x44\x45LIVERY_METHOD_INSTRUCTIONS\x10\x02\x12\x1d\n\x19\x44\x45LIVERY_METHOD_STREAMING\x10\x03*\xbf\x01\n\rRequesterType\x12\x1e\n\x1aREQUESTER_TYPE_UNSPECIFIED\x10\x00\x12\x18\n\x14REQUESTER_TYPE_AGENT\x10\x01\x12\x1d\n\x19REQUESTER_TYPE_HUMAN_TOOL\x10\x02\x12\x1a\n\x16REQUESTER_TYPE_SERVICE\x10\x03\x12\x1c\n\x18REQUESTER_TYPE_DELEGATED\x10\x04\x12\x1b\n\x17REQUESTER_TYPE_RESEARCH\x10\x05*\x8a\x01\n\nC2PAStatus\x12\x1b\n\x17\x43\x32PA_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x43\x32PA_STATUS_TRUSTED\x10\x01\x12\x15\n\x11\x43\x32PA_STATUS_VALID\x10\x02\x12\x17\n\x13\x43\x32PA_STATUS_INVALID\x10\x03\x12\x16\n\x12\x43\x32PA_STATUS_ABSENT\x10\x04*\x98\x01\n\x12ResourceMutability\x12#\n\x1fRESOURCE_MUTABILITY_UNSPECIFIED\x10\x00\x12\x1e\n\x1aRESOURCE_MUTABILITY_STATIC\x10\x01\x12\x1f\n\x1bRESOURCE_MUTABILITY_DYNAMIC\x10\x02\x12\x1c\n\x18RESOURCE_MUTABILITY_LIVE\x10\x03*\xef\x05\n\x0c\x44\x65nialReason\x12\x1d\n\x19\x44\x45NIAL_REASON_UNSPECIFIED\x10\x00\x12&\n\"DENIAL_REASON_BILLING_REF_INACTIVE\x10\x01\x12&\n\"DENIAL_REASON_INSUFFICIENT_BALANCE\x10\x02\x12\x1e\n\x1a\x44\x45NIAL_REASON_RATE_LIMITED\x10\x03\x12%\n!DENIAL_REASON_CONTENT_UNAVAILABLE\x10\x04\x12+\n\'DENIAL_REASON_RESTRICTION_NOT_SATISFIED\x10\x05\x12#\n\x1f\x44\x45NIAL_REASON_REPORTING_OVERDUE\x10\x06\x12\x1f\n\x1b\x44\x45NIAL_REASON_OFFER_EXPIRED\x10\x07\x12#\n\x1f\x44\x45NIAL_REASON_SIGNATURE_INVALID\x10\x08\x12 \n\x1c\x44\x45NIAL_REASON_QUOTA_EXCEEDED\x10\t\x12$\n DENIAL_REASON_DELEGATION_INVALID\x10\n\x12$\n DENIAL_REASON_SCOPE_INSUFFICIENT\x10\x0b\x12%\n!DENIAL_REASON_ENTITLEMENT_MISSING\x10\x0c\x12\'\n#DENIAL_REASON_ENTITLEMENT_MALFORMED\x10\r\x12%\n!DENIAL_REASON_ENTITLEMENT_EXPIRED\x10\x0e\x12)\n%DENIAL_REASON_ENTITLEMENT_WRONG_BUYER\x10\x0f\x12%\n!DENIAL_REASON_SUBSCRIPTION_LAPSED\x10\x10\x12)\n%DENIAL_REASON_ENTITLEMENT_NOT_GRANTED\x10\x11\x12/\n+DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION\x10\x12*\x8c\x02\n\x0fIngestionSource\x12 \n\x1cINGESTION_SOURCE_UNSPECIFIED\x10\x00\x12!\n\x1dINGESTION_SOURCE_RAMP_SITEMAP\x10\x01\x12\x18\n\x14INGESTION_SOURCE_RSL\x10\x02\x12\x1c\n\x18INGESTION_SOURCE_SITEMAP\x10\x03\x12\x1f\n\x1bINGESTION_SOURCE_HTML_CRAWL\x10\x04\x12\x1c\n\x18INGESTION_SOURCE_CMS_API\x10\x05\x12\x1b\n\x17INGESTION_SOURCE_MANUAL\x10\x06\x12 \n\x1cINGESTION_SOURCE_CATALOG_API\x10\x07*d\n\x0e\x43itationFormat\x12\x18\n\x14\x43ITATION_FORMAT_LINK\x10\x00\x12\x1c\n\x18\x43ITATION_FORMAT_FOOTNOTE\x10\x01\x12\x1a\n\x16\x43ITATION_FORMAT_INLINE\x10\x02*d\n\x04Role\x12\x14\n\x10ROLE_UNSPECIFIED\x10\x00\x12\x0e\n\nROLE_AGENT\x10\x01\x12\x11\n\rROLE_EXCHANGE\x10\x02\x12\x0f\n\x0bROLE_BROKER\x10\x03\x12\x12\n\x0eROLE_PUBLISHER\x10\x04*\x83\x01\n\x14ProviderRelationship\x12%\n!PROVIDER_RELATIONSHIP_UNSPECIFIED\x10\x00\x12 \n\x1cPROVIDER_RELATIONSHIP_DIRECT\x10\x01\x12\"\n\x1ePROVIDER_RELATIONSHIP_RESELLER\x10\x02*\x95\x01\n\nAuthMethod\x12\x1b\n\x17\x41UTH_METHOD_UNSPECIFIED\x10\x00\x12\x14\n\x10\x41UTH_METHOD_GNAP\x10\x01\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_DPOP\x10\x02\x12\x1c\n\x18\x41UTH_METHOD_OAUTH_BEARER\x10\x03\x12\x1a\n\x16\x41UTH_METHOD_OAUTH_MTLS\x10\x04*\xea\x01\n\rDisputeReason\x12\x1e\n\x1a\x44ISPUTE_REASON_UNSPECIFIED\x10\x00\x12#\n\x1f\x44ISPUTE_REASON_CONTENT_MISMATCH\x10\x01\x12\"\n\x1e\x44ISPUTE_REASON_DELIVERY_FAILED\x10\x02\x12 \n\x1c\x44ISPUTE_REASON_WRONG_CONTENT\x10\x03\x12\'\n#DISPUTE_REASON_EXPIRED_BEFORE_FETCH\x10\x04\x12%\n!DISPUTE_REASON_INCOMPLETE_CONTENT\x10\x05*\xbe\x02\n\rDisputeStatus\x12\x1e\n\x1a\x44ISPUTE_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14\x44ISPUTE_STATUS_FILED\x10\x01\x12 \n\x1c\x44ISPUTE_STATUS_AUTO_RESOLVED\x10\x02\x12\"\n\x1e\x44ISPUTE_STATUS_EVIDENCE_NEEDED\x10\x03\x12\x1f\n\x1b\x44ISPUTE_STATUS_UNDER_REVIEW\x10\x04\x12\x1c\n\x18\x44ISPUTE_STATUS_ESCALATED\x10\x05\x12\x1b\n\x17\x44ISPUTE_STATUS_RESOLVED\x10\x06\x12\x1b\n\x17\x44ISPUTE_STATUS_APPEALED\x10\x07\x12\x1a\n\x16\x44ISPUTE_STATUS_SETTLED\x10\x08\x12\x18\n\x14\x44ISPUTE_STATUS_FINAL\x10\t*\xae\x01\n\x0eResolutionType\x12\x1f\n\x1bRESOLUTION_TYPE_UNSPECIFIED\x10\x00\x12\x1a\n\x16RESOLUTION_TYPE_CREDIT\x10\x01\x12\x1e\n\x1aRESOLUTION_TYPE_REDELIVERY\x10\x02\x12\x1c\n\x18RESOLUTION_TYPE_REJECTED\x10\x03\x12!\n\x1dRESOLUTION_TYPE_INVESTIGATION\x10\x04*\x95\x03\n\x16\x43\x61talogRejectionReason\x12(\n$CATALOG_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x34\n0CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR\x10\x01\x12,\n(CATALOG_REJECTION_REASON_TENANT_MISMATCH\x10\x02\x12\x30\n,CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED\x10\x03\x12.\n*CATALOG_REJECTION_REASON_SIGNATURE_INVALID\x10\x04\x12,\n(CATALOG_REJECTION_REASON_MALFORMED_ENTRY\x10\x05\x12\x30\n,CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN\x10\x06\x12+\n\'CATALOG_REJECTION_REASON_QUOTA_EXCEEDED\x10\x07*\xc1\x02\n\x19RegistrationFailureReason\x12+\n\'REGISTRATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x33\n/REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED\x10\x01\x12+\n\'REGISTRATION_FAILURE_REASON_INVALID_KEY\x10\x02\x12\x31\n-REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID\x10\x03\x12\x32\n.REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED\x10\x04\x12.\n*REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED\x10\x05*\x95\x02\n\x14\x44isputeFailureReason\x12&\n\"DISPUTE_FAILURE_REASON_UNSPECIFIED\x10\x00\x12\x30\n,DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'DISPUTE_FAILURE_REASON_REPORT_NOT_FILED\x10\x02\x12)\n%DISPUTE_FAILURE_REASON_WINDOW_EXPIRED\x10\x03\x12$\n DISPUTE_FAILURE_REASON_DUPLICATE\x10\x04\x12%\n!DISPUTE_FAILURE_REASON_INELIGIBLE\x10\x05*\xbb\x03\n\x1f\x44omainVerificationFailureReason\x12\x32\n.DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED\x10\x00\x12:\n6DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND\x10\x01\x12\x39\n5DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH\x10\x02\x12\x38\n4DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED\x10\x03\x12\x33\n/DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED\x10\x04\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED\x10\x05\x12>\n:DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED\x10\x06*\xd9\x05\n\x1aRetrievalAuthFailureReason\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED\x10\x00\x12-\n)RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED\x10\x01\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING\x10\x02\x12\x34\n0RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING\x10\x03\x12\x38\n4RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH\x10\x04\x12\x33\n/RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING\x10\x05\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING\x10\x06\x12\x30\n,RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH\x10\x07\x12\x35\n1RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH\x10\x08\x12\x37\n3RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING\x10\t\x12\x36\n2RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING\x10\n\x12/\n+RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED\x10\x0b\x12\x39\n5RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID\x10\x0c*\xcb\x02\n\x1aUsageReportRejectionReason\x12-\n)USAGE_REPORT_REJECTION_REASON_UNSPECIFIED\x10\x00\x12\x37\n3USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND\x10\x01\x12+\n\'USAGE_REPORT_REJECTION_REASON_DUPLICATE\x10\x02\x12\x30\n,USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED\x10\x03\x12\x39\n5USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS\x10\x04\x12+\n\'USAGE_REPORT_REJECTION_REASON_MALFORMED\x10\x05\x32\x86\x04\n\x0f\x45xchangeService\x12\x46\n\x11\x44iscoverResources\x12\x16.ramp.v1.ResourceQuery\x1a\x19.ramp.v1.ResourceResponse\x12O\n\x12\x45xecuteTransaction\x12\x1b.ramp.v1.TransactionRequest\x1a\x1c.ramp.v1.TransactionResponse\x12\x41\n\x0bReportUsage\x12\x14.ramp.v1.UsageReport\x1a\x1c.ramp.v1.UsageReportResponse\x12G\n\x12\x44isputeTransaction\x12\x17.ramp.v1.DisputeRequest\x1a\x18.ramp.v1.DisputeResponse\x12\x65\n\x19RequestDomainVerification\x12\".ramp.v1.DomainVerificationRequest\x1a$.ramp.v1.DomainVerificationChallenge\x12g\n\x19\x43onfirmDomainVerification\x12\'.ramp.v1.DomainVerificationConfirmation\x1a!.ramp.v1.DomainVerificationResult2\x89\x02\n\x0e\x43\x61talogService\x12N\n\rPushResources\x12\x1d.ramp.v1.PushResourcesRequest\x1a\x1e.ramp.v1.PushResourcesResponse\x12T\n\x0fRemoveResources\x12\x1f.ramp.v1.RemoveResourcesRequest\x1a .ramp.v1.RemoveResourcesResponse\x12Q\n\x0eRefreshCatalog\x12\x1e.ramp.v1.RefreshCatalogRequest\x1a\x1f.ramp.v1.RefreshCatalogResponse2G\n\rBrokerService\x12\x36\n\x07Resolve\x12\x14.ramp.v1.RAMPRequest\x1a\x15.ramp.v1.RAMPResponseB\x8e\x01\n\x0b\x63om.ramp.v1B\tRampProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ramp.v1.ramp_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\013com.ramp.v1B\tRampProtoP\001Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\242\002\003RXX\252\002\007Ramp.V1\312\002\007Ramp\\V1\342\002\023Ramp\\V1\\GPBMetadata\352\002\010Ramp::V1' - _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_FUNCTION"]._loaded_options = None - _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_FUNCTION"]._serialized_options = b'\222\265\030\003all\222\265\030\006ai-all\222\265\030\010ai-train\222\265\030\010ai-input\222\265\030\010ai-index\222\265\030\006search\222\265\030\005crawl\222\265\030\024text-and-data-mining\222\265\030\003tts\222\265\030\ncommercial\222\265\030\013advertising\222\265\030\teditorial\222\265\030\010research\222\265\030\treproduce\222\265\030\ndistribute\222\265\030\006modify\222\265\030\007display\222\265\030\004sync\222\265\030\tbroadcast\222\265\030\006stream\222\265\030\005print\222\265\030\013manufacture\222\265\030\004sell\242\265\030\016functiontokens' - _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_GEOGRAPHY"]._loaded_options = None - _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_GEOGRAPHY"]._serialized_options = b'\222\265\030\001*\222\265\030\002EU\222\265\030\003EEA\242\265\030\017geographytokens' - _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_USER_TYPE"]._loaded_options = None - _globals['_RESTRICTIONKIND'].values_by_name["RESTRICTION_KIND_USER_TYPE"]._serialized_options = b'\222\265\030\nindividual\222\265\030\010academic\222\265\030\nnon_profit\222\265\030\016news_publisher\222\265\030\013broadcaster\222\265\030\021commercial_entity\242\265\030\tusertypes' - _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._loaded_options = None - _globals['_ACCEPTABLERESTRICTION'].fields_by_name['values']._serialized_options = b'\272H\"\222\001\037\020@\"\033r\031\020\001\030@2\023^[A-Za-z0-9._:*-]+$' - _globals['_RESOURCEQUERY'].fields_by_name['uris']._loaded_options = None - _globals['_RESOURCEQUERY'].fields_by_name['uris']._serialized_options = b'\272H\006\222\001\003\020\200\002' - _globals['_RESOURCEIDENTITY'].fields_by_name['resource_mutability']._loaded_options = None - _globals['_RESOURCEIDENTITY'].fields_by_name['resource_mutability']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_LICENSE'].fields_by_name['uri_digest']._loaded_options = None - _globals['_LICENSE'].fields_by_name['uri_digest']._serialized_options = b'\272HErC2A^(sha256:[0-9a-f]{64}|sha384:[0-9a-f]{96}|sha512:[0-9a-f]{128})?$' - _globals['_LICENSE']._loaded_options = None - _globals['_LICENSE']._serialized_options = b'\272Hy\032w\n license.digest_required_with_uri\022*uri_digest is required whenever uri is set\032\'this.uri == \'\' || this.uri_digest != \'\'' - _globals['_RESTRICTION'].fields_by_name['kind']._loaded_options = None - _globals['_RESTRICTION'].fields_by_name['kind']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_RESTRICTION'].fields_by_name['permitted']._loaded_options = None - _globals['_RESTRICTION'].fields_by_name['permitted']._serialized_options = b'\272H\"\222\001\037\020@\"\033r\031\020\001\030@2\023^[A-Za-z0-9._:*-]+$' - _globals['_RESTRICTION'].fields_by_name['prohibited']._loaded_options = None - _globals['_RESTRICTION'].fields_by_name['prohibited']._serialized_options = b'\272H\"\222\001\037\020@\"\033r\031\020\001\030@2\023^[A-Za-z0-9._:*-]+$' - _globals['_RESTRICTION']._loaded_options = None - _globals['_RESTRICTION']._serialized_options = b'\272H\226\001\032\223\001\n)restriction.permitted_prohibited_disjoint\0226a token cannot appear in both permitted and prohibited\032.this.permitted.all(p, !(p in this.prohibited))' - _globals['_QUOTA'].fields_by_name['metric']._loaded_options = None - _globals['_QUOTA'].fields_by_name['metric']._serialized_options = b'\272H4r2\030@2.^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)$\212\265\030\rdisplay-words\212\265\030\013impressions\212\265\030\006tokens\212\265\030\014input-tokens\212\265\030\022units-manufactured\212\265\030\010accesses\212\265\030\006copies\212\265\030\005seats\232\265\030\014quotametrics' - _globals['_QUOTA'].fields_by_name['limit']._loaded_options = None - _globals['_QUOTA'].fields_by_name['limit']._serialized_options = b'\272H\004\"\002(\001' - _globals['_QUOTA'].fields_by_name['window']._loaded_options = None - _globals['_QUOTA'].fields_by_name['window']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_OBLIGATION'].fields_by_name['kind']._loaded_options = None - _globals['_OBLIGATION'].fields_by_name['kind']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_OBLIGATION'].fields_by_name['trigger']._loaded_options = None - _globals['_OBLIGATION'].fields_by_name['trigger']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_OBLIGATION']._loaded_options = None - _globals['_OBLIGATION']._serialized_options = b'\272H\230\002\032\225\002\n-obligation.share_alike.requires_scope_license\022DSHARE_ALIKE requires scope_license to identify a license (id or uri)\032\235\001this.kind != ramp.v1.ObligationKind.OBLIGATION_KIND_SHARE_ALIKE || (has(this.scope_license) && (this.scope_license.id != \'\' || this.scope_license.uri != \'\'))' - _globals['_LICENSETERM'].fields_by_name['semantics']._loaded_options = None - _globals['_LICENSETERM'].fields_by_name['semantics']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_LICENSETERM'].fields_by_name['pricing']._loaded_options = None - _globals['_LICENSETERM'].fields_by_name['pricing']._serialized_options = b'\272H\003\310\001\001' - _globals['_LICENSETERM'].fields_by_name['scopes']._loaded_options = None - _globals['_LICENSETERM'].fields_by_name['scopes']._serialized_options = b'\272H\005\222\001\002\020@' - _globals['_LICENSETERM']._loaded_options = None - _globals['_LICENSETERM']._serialized_options = b'\272H\221\003\032\342\001\n(license_term.reference_only.requires_uri\022>REFERENCE_ONLY terms must carry a license with a non-empty uri\032vthis.semantics != ramp.v1.TermSemantics.TERM_SEMANTICS_REFERENCE_ONLY || (has(this.license) && this.license.uri != \'\')\032\251\001\n%license_term.one_restriction_per_kind\022+at most one restriction is allowed per kind\032Sthis.restrictions.all(r, this.restrictions.filter(o, o.kind == r.kind).size() <= 1)' - _globals['_PRICING'].fields_by_name['model']._loaded_options = None - _globals['_PRICING'].fields_by_name['model']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_PRICING'].fields_by_name['unit']._loaded_options = None - _globals['_PRICING'].fields_by_name['unit']._serialized_options = b'\272H5r3\030@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$\212\265\030\007fetches\212\265\030\010accesses\212\265\030\006tokens\212\265\030\005calls\212\265\030\005pages\212\265\030\007seconds\212\265\030\007minutes\212\265\030\007records\212\265\030\007streams\212\265\030\006images\212\265\030\005seats\212\265\030\022units-manufactured\212\265\030\ncharacters\212\265\030\005bytes\212\265\030\005items\212\265\030\005sq-km\232\265\030\014pricingunits' - _globals['_PRICING']._loaded_options = None - _globals['_PRICING']._serialized_options = b'\272H\243\002\032\227\001\n\036pricing.per_unit.requires_unit\022\'unit is required when model is PER_UNIT\032Lthis.model != ramp.v1.PricingModel.PRICING_MODEL_PER_UNIT || this.unit != \'\'\032\206\001\n\026pricing.free.zero_rate\022!rate must be 0 when model is FREE\032Ithis.model != ramp.v1.PricingModel.PRICING_MODEL_FREE || this.rate == 0.0' - _globals['_REQUESTER'].fields_by_name['type']._loaded_options = None - _globals['_REQUESTER'].fields_by_name['type']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_REQUESTER'].fields_by_name['scopes']._loaded_options = None - _globals['_REQUESTER'].fields_by_name['scopes']._serialized_options = b'\272H\005\222\001\002\020@' - _globals['_TRANSACTIONREQUEST'].fields_by_name['idempotency_key']._loaded_options = None - _globals['_TRANSACTIONREQUEST'].fields_by_name['idempotency_key']._serialized_options = b'\272H\004r\002\020\001' - _globals['_USAGEREPORT'].fields_by_name['idempotency_key']._loaded_options = None - _globals['_USAGEREPORT'].fields_by_name['idempotency_key']._serialized_options = b'\272H\004r\002\020\001' - _globals['_USAGE'].fields_by_name['consumed_unit']._loaded_options = None - _globals['_USAGE'].fields_by_name['consumed_unit']._serialized_options = b'\272H5r3\030@2/^([a-z0-9-]+|[A-Za-z0-9._-]+:[A-Za-z0-9._-]+)?$' - _globals['_RAMPREQUEST'].fields_by_name['uris']._loaded_options = None - _globals['_RAMPREQUEST'].fields_by_name['uris']._serialized_options = b'\272H\006\222\001\003\020\200\002' - _globals['_WELLKNOWNMANIFEST'].fields_by_name['role']._loaded_options = None - _globals['_WELLKNOWNMANIFEST'].fields_by_name['role']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_AUTHORIZEDEXCHANGE'].fields_by_name['relationship']._loaded_options = None - _globals['_AUTHORIZEDEXCHANGE'].fields_by_name['relationship']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_DISPUTEREQUEST'].fields_by_name['idempotency_key']._loaded_options = None - _globals['_DISPUTEREQUEST'].fields_by_name['idempotency_key']._serialized_options = b'\272H\004r\002\020\001' - _globals['_DISPUTEREQUEST'].fields_by_name['reason']._loaded_options = None - _globals['_DISPUTEREQUEST'].fields_by_name['reason']._serialized_options = b'\272H\005\202\001\002 \000' - _globals['_ERRORDETAIL_METADATAENTRY']._loaded_options = None - _globals['_ERRORDETAIL_METADATAENTRY']._serialized_options = b'8\001' - _globals['_TRANSACTIONDENIAL'].fields_by_name['reason']._loaded_options = None - _globals['_TRANSACTIONDENIAL'].fields_by_name['reason']._serialized_options = b'\272H\007\202\001\004\020\001 \000' - _globals['_CATALOGREJECTION'].fields_by_name['reason']._loaded_options = None - _globals['_CATALOGREJECTION'].fields_by_name['reason']._serialized_options = b'\272H\007\202\001\004\020\001 \000' - _globals['_REGISTRATIONFAILURE'].fields_by_name['reason']._loaded_options = None - _globals['_REGISTRATIONFAILURE'].fields_by_name['reason']._serialized_options = b'\272H\007\202\001\004\020\001 \000' - _globals['_DISPUTEFAILURE'].fields_by_name['reason']._loaded_options = None - _globals['_DISPUTEFAILURE'].fields_by_name['reason']._serialized_options = b'\272H\007\202\001\004\020\001 \000' - _globals['_DOMAINVERIFICATIONFAILURE'].fields_by_name['reason']._loaded_options = None - _globals['_DOMAINVERIFICATIONFAILURE'].fields_by_name['reason']._serialized_options = b'\272H\007\202\001\004\020\001 \000' - _globals['_RETRIEVALAUTHFAILURE'].fields_by_name['reason']._loaded_options = None - _globals['_RETRIEVALAUTHFAILURE'].fields_by_name['reason']._serialized_options = b'\272H\007\202\001\004\020\001 \000' - _globals['_USAGEREPORTREJECTION'].fields_by_name['reason']._loaded_options = None - _globals['_USAGEREPORTREJECTION'].fields_by_name['reason']._serialized_options = b'\272H\007\202\001\004\020\001 \000' - _globals['_DISCOVERYMETHOD']._serialized_start=22144 - _globals['_DISCOVERYMETHOD']._serialized_end=22326 - _globals['_OFFERABSENCEREASON']._serialized_start=22329 - _globals['_OFFERABSENCEREASON']._serialized_end=22706 - _globals['_TERMSEMANTICS']._serialized_start=22708 - _globals['_TERMSEMANTICS']._serialized_end=22821 - _globals['_RESTRICTIONKIND']._serialized_start=22824 - _globals['_RESTRICTIONKIND']._serialized_end=23437 - _globals['_QUOTAWINDOW']._serialized_start=23440 - _globals['_QUOTAWINDOW']._serialized_end=23582 - _globals['_OBLIGATIONKIND']._serialized_start=23585 - _globals['_OBLIGATIONKIND']._serialized_end=23827 - _globals['_OBLIGATIONTRIGGER']._serialized_start=23830 - _globals['_OBLIGATIONTRIGGER']._serialized_end=24037 - _globals['_PRICINGMODEL']._serialized_start=24039 - _globals['_PRICINGMODEL']._serialized_end=24160 - _globals['_PRICINGMETERING']._serialized_start=24162 - _globals['_PRICINGMETERING']._serialized_end=24279 - _globals['_DELIVERYMETHOD']._serialized_start=24282 - _globals['_DELIVERYMETHOD']._serialized_end=24424 - _globals['_REQUESTERTYPE']._serialized_start=24427 - _globals['_REQUESTERTYPE']._serialized_end=24618 - _globals['_C2PASTATUS']._serialized_start=24621 - _globals['_C2PASTATUS']._serialized_end=24759 - _globals['_RESOURCEMUTABILITY']._serialized_start=24762 - _globals['_RESOURCEMUTABILITY']._serialized_end=24914 - _globals['_DENIALREASON']._serialized_start=24917 - _globals['_DENIALREASON']._serialized_end=25668 - _globals['_INGESTIONSOURCE']._serialized_start=25671 - _globals['_INGESTIONSOURCE']._serialized_end=25939 - _globals['_CITATIONFORMAT']._serialized_start=25941 - _globals['_CITATIONFORMAT']._serialized_end=26041 - _globals['_ROLE']._serialized_start=26043 - _globals['_ROLE']._serialized_end=26143 - _globals['_PROVIDERRELATIONSHIP']._serialized_start=26146 - _globals['_PROVIDERRELATIONSHIP']._serialized_end=26277 - _globals['_AUTHMETHOD']._serialized_start=26280 - _globals['_AUTHMETHOD']._serialized_end=26429 - _globals['_DISPUTEREASON']._serialized_start=26432 - _globals['_DISPUTEREASON']._serialized_end=26666 - _globals['_DISPUTESTATUS']._serialized_start=26669 - _globals['_DISPUTESTATUS']._serialized_end=26987 - _globals['_RESOLUTIONTYPE']._serialized_start=26990 - _globals['_RESOLUTIONTYPE']._serialized_end=27164 - _globals['_CATALOGREJECTIONREASON']._serialized_start=27167 - _globals['_CATALOGREJECTIONREASON']._serialized_end=27572 - _globals['_REGISTRATIONFAILUREREASON']._serialized_start=27575 - _globals['_REGISTRATIONFAILUREREASON']._serialized_end=27896 - _globals['_DISPUTEFAILUREREASON']._serialized_start=27899 - _globals['_DISPUTEFAILUREREASON']._serialized_end=28176 - _globals['_DOMAINVERIFICATIONFAILUREREASON']._serialized_start=28179 - _globals['_DOMAINVERIFICATIONFAILUREREASON']._serialized_end=28622 - _globals['_RETRIEVALAUTHFAILUREREASON']._serialized_start=28625 - _globals['_RETRIEVALAUTHFAILUREREASON']._serialized_end=29354 - _globals['_USAGEREPORTREJECTIONREASON']._serialized_start=29357 - _globals['_USAGEREPORTREJECTIONREASON']._serialized_end=29688 - _globals['_ACCEPTABLERESTRICTION']._serialized_start=177 - _globals['_ACCEPTABLERESTRICTION']._serialized_end=309 - _globals['_RESOURCEQUERY']._serialized_start=312 - _globals['_RESOURCEQUERY']._serialized_end=729 - _globals['_RESOURCERESPONSE']._serialized_start=732 - _globals['_RESOURCERESPONSE']._serialized_end=1045 - _globals['_OFFERGROUP']._serialized_start=1048 - _globals['_OFFERGROUP']._serialized_end=1380 - _globals['_RATELIMITINFO']._serialized_start=1383 - _globals['_RATELIMITINFO']._serialized_end=1572 - _globals['_SUBSCRIPTIONQUOTAINFO']._serialized_start=1575 - _globals['_SUBSCRIPTIONQUOTAINFO']._serialized_end=1854 - _globals['_OFFER']._serialized_start=1857 - _globals['_OFFER']._serialized_end=2844 - _globals['_RESOURCEIDENTITY']._serialized_start=2847 - _globals['_RESOURCEIDENTITY']._serialized_end=3584 - _globals['_RESOURCEATTESTATION']._serialized_start=3587 - _globals['_RESOURCEATTESTATION']._serialized_end=3812 - _globals['_LICENSE']._serialized_start=3815 - _globals['_LICENSE']._serialized_end=4217 - _globals['_RESTRICTION']._serialized_start=4220 - _globals['_RESTRICTION']._serialized_end=4614 - _globals['_QUOTA']._serialized_start=4617 - _globals['_QUOTA']._serialized_end=4921 - _globals['_OBLIGATION']._serialized_start=4924 - _globals['_OBLIGATION']._serialized_end=5460 - _globals['_LICENSETERM']._serialized_start=5463 - _globals['_LICENSETERM']._serialized_end=6316 - _globals['_PREVIEW']._serialized_start=6319 - _globals['_PREVIEW']._serialized_end=6534 - _globals['_PRICING']._serialized_start=6537 - _globals['_PRICING']._serialized_end=7518 - _globals['_REQUESTER']._serialized_start=7521 - _globals['_REQUESTER']._serialized_end=7899 - _globals['_DELEGATION']._serialized_start=7902 - _globals['_DELEGATION']._serialized_end=8519 - _globals['_TRANSACTIONREQUEST']._serialized_start=8522 - _globals['_TRANSACTIONREQUEST']._serialized_end=8897 - _globals['_TRANSACTIONITEM']._serialized_start=8899 - _globals['_TRANSACTIONITEM']._serialized_end=8984 - _globals['_TRANSACTIONRESPONSE']._serialized_start=8987 - _globals['_TRANSACTIONRESPONSE']._serialized_end=10078 - _globals['_TRANSACTIONRESULTITEM']._serialized_start=10081 - _globals['_TRANSACTIONRESULTITEM']._serialized_end=10964 - _globals['_COST']._serialized_start=10966 - _globals['_COST']._serialized_end=11072 - _globals['_PUSHRESOURCESREQUEST']._serialized_start=11075 - _globals['_PUSHRESOURCESREQUEST']._serialized_end=11301 - _globals['_RESOURCEENTRY']._serialized_start=11304 - _globals['_RESOURCEENTRY']._serialized_end=12123 - _globals['_PUSHRESOURCESRESPONSE']._serialized_start=12126 - _globals['_PUSHRESOURCESRESPONSE']._serialized_end=12329 - _globals['_REMOVERESOURCESREQUEST']._serialized_start=12331 - _globals['_REMOVERESOURCESREQUEST']._serialized_end=12424 - _globals['_REMOVERESOURCESRESPONSE']._serialized_start=12426 - _globals['_REMOVERESOURCESRESPONSE']._serialized_end=12495 - _globals['_REFRESHCATALOGREQUEST']._serialized_start=12497 - _globals['_REFRESHCATALOGREQUEST']._serialized_end=12567 - _globals['_REFRESHCATALOGRESPONSE']._serialized_start=12569 - _globals['_REFRESHCATALOGRESPONSE']._serialized_end=12637 - _globals['_REPORTINGOBLIGATION']._serialized_start=12640 - _globals['_REPORTINGOBLIGATION']._serialized_end=12921 - _globals['_USAGEREPORT']._serialized_start=12924 - _globals['_USAGEREPORT']._serialized_end=13340 - _globals['_ATTRIBUTIONDETAIL']._serialized_start=13343 - _globals['_ATTRIBUTIONDETAIL']._serialized_end=13552 - _globals['_USAGE']._serialized_start=13555 - _globals['_USAGE']._serialized_end=13980 - _globals['_USAGEASSET']._serialized_start=13982 - _globals['_USAGEASSET']._serialized_end=14100 - _globals['_USAGEREPORTRESPONSE']._serialized_start=14103 - _globals['_USAGEREPORTRESPONSE']._serialized_end=14249 - _globals['_RAMPREQUEST']._serialized_start=14252 - _globals['_RAMPREQUEST']._serialized_end=14803 - _globals['_REQUESTCONSTRAINTS']._serialized_start=14806 - _globals['_REQUESTCONSTRAINTS']._serialized_end=15520 - _globals['_JSONWEBKEY']._serialized_start=15523 - _globals['_JSONWEBKEY']._serialized_end=15699 - _globals['_WELLKNOWNMANIFEST']._serialized_start=15702 - _globals['_WELLKNOWNMANIFEST']._serialized_end=17349 - _globals['_KEYINVALIDATIONLIST']._serialized_start=17351 - _globals['_KEYINVALIDATIONLIST']._serialized_end=17447 - _globals['_CATALOGCONTRIBUTOR']._serialized_start=17449 - _globals['_CATALOGCONTRIBUTOR']._serialized_end=17529 - _globals['_AUTHORIZEDEXCHANGE']._serialized_start=17532 - _globals['_AUTHORIZEDEXCHANGE']._serialized_end=17759 - _globals['_RAMPRESPONSE']._serialized_start=17762 - _globals['_RAMPRESPONSE']._serialized_end=18634 - _globals['_DISPUTEREQUEST']._serialized_start=18637 - _globals['_DISPUTEREQUEST']._serialized_end=19174 - _globals['_DISPUTERESPONSE']._serialized_start=19177 - _globals['_DISPUTERESPONSE']._serialized_end=19574 - _globals['_DOMAINVERIFICATIONREQUEST']._serialized_start=19577 - _globals['_DOMAINVERIFICATIONREQUEST']._serialized_end=19772 - _globals['_DOMAINVERIFICATIONCHALLENGE']._serialized_start=19775 - _globals['_DOMAINVERIFICATIONCHALLENGE']._serialized_end=20024 - _globals['_DOMAINVERIFICATIONCONFIRMATION']._serialized_start=20027 - _globals['_DOMAINVERIFICATIONCONFIRMATION']._serialized_end=20300 - _globals['_DOMAINVERIFICATIONRESULT']._serialized_start=20303 - _globals['_DOMAINVERIFICATIONRESULT']._serialized_end=20546 - _globals['_ERRORDETAIL']._serialized_start=20549 - _globals['_ERRORDETAIL']._serialized_end=21325 - _globals['_ERRORDETAIL_METADATAENTRY']._serialized_start=21256 - _globals['_ERRORDETAIL_METADATAENTRY']._serialized_end=21315 - _globals['_TRANSACTIONDENIAL']._serialized_start=21328 - _globals['_TRANSACTIONDENIAL']._serialized_end=21532 - _globals['_CATALOGREJECTION']._serialized_start=21534 - _globals['_CATALOGREJECTION']._serialized_end=21660 - _globals['_REGISTRATIONFAILURE']._serialized_start=21662 - _globals['_REGISTRATIONFAILURE']._serialized_end=21755 - _globals['_DISPUTEFAILURE']._serialized_start=21757 - _globals['_DISPUTEFAILURE']._serialized_end=21840 - _globals['_DOMAINVERIFICATIONFAILURE']._serialized_start=21842 - _globals['_DOMAINVERIFICATIONFAILURE']._serialized_end=21947 - _globals['_RETRIEVALAUTHFAILURE']._serialized_start=21949 - _globals['_RETRIEVALAUTHFAILURE']._serialized_end=22044 - _globals['_USAGEREPORTREJECTION']._serialized_start=22046 - _globals['_USAGEREPORTREJECTION']._serialized_end=22141 - _globals['_EXCHANGESERVICE']._serialized_start=29691 - _globals['_EXCHANGESERVICE']._serialized_end=30209 - _globals['_CATALOGSERVICE']._serialized_start=30212 - _globals['_CATALOGSERVICE']._serialized_end=30477 - _globals['_BROKERSERVICE']._serialized_start=30479 - _globals['_BROKERSERVICE']._serialized_end=30550 -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/ramp/v1/ramp_pb2.pyi b/gen/python/ramp/v1/ramp_pb2.pyi deleted file mode 100644 index 15aaa787..00000000 --- a/gen/python/ramp/v1/ramp_pb2.pyi +++ /dev/null @@ -1,1458 +0,0 @@ -import datetime - -from google.protobuf import struct_pb2 as _struct_pb2 -from google.protobuf import timestamp_pb2 as _timestamp_pb2 -from google.protobuf import duration_pb2 as _duration_pb2 -from buf.validate import validate_pb2 as _validate_pb2 -from ramp.v1 import vocab_pb2 as _vocab_pb2 -from google.protobuf.internal import containers as _containers -from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from collections.abc import Iterable as _Iterable, Mapping as _Mapping -from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union - -DESCRIPTOR: _descriptor.FileDescriptor - -class DiscoveryMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - DISCOVERY_METHOD_UNSPECIFIED: _ClassVar[DiscoveryMethod] - DISCOVERY_METHOD_EXCHANGE: _ClassVar[DiscoveryMethod] - DISCOVERY_METHOD_SEARCH: _ClassVar[DiscoveryMethod] - DISCOVERY_METHOD_RECOMMENDATION: _ClassVar[DiscoveryMethod] - DISCOVERY_METHOD_SYNDICATION: _ClassVar[DiscoveryMethod] - -class OfferAbsenceReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - OFFER_ABSENCE_REASON_UNSPECIFIED: _ClassVar[OfferAbsenceReason] - OFFER_ABSENCE_REASON_NOT_IN_CATALOG: _ClassVar[OfferAbsenceReason] - OFFER_ABSENCE_REASON_CONTENT_BLOCKED: _ClassVar[OfferAbsenceReason] - OFFER_ABSENCE_REASON_RESTRICTION_FILTERED: _ClassVar[OfferAbsenceReason] - OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE: _ClassVar[OfferAbsenceReason] - OFFER_ABSENCE_REASON_NOT_AUTHORIZED: _ClassVar[OfferAbsenceReason] - OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT: _ClassVar[OfferAbsenceReason] - OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION: _ClassVar[OfferAbsenceReason] - -class TermSemantics(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - TERM_SEMANTICS_UNSPECIFIED: _ClassVar[TermSemantics] - TERM_SEMANTICS_ENUMERATED: _ClassVar[TermSemantics] - TERM_SEMANTICS_REFERENCE_ONLY: _ClassVar[TermSemantics] - -class RestrictionKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - RESTRICTION_KIND_UNSPECIFIED: _ClassVar[RestrictionKind] - RESTRICTION_KIND_FUNCTION: _ClassVar[RestrictionKind] - RESTRICTION_KIND_GEOGRAPHY: _ClassVar[RestrictionKind] - RESTRICTION_KIND_USER_TYPE: _ClassVar[RestrictionKind] - RESTRICTION_KIND_OTHER: _ClassVar[RestrictionKind] - -class QuotaWindow(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - QUOTA_WINDOW_UNSPECIFIED: _ClassVar[QuotaWindow] - QUOTA_WINDOW_HOURLY: _ClassVar[QuotaWindow] - QUOTA_WINDOW_DAILY: _ClassVar[QuotaWindow] - QUOTA_WINDOW_MONTHLY: _ClassVar[QuotaWindow] - QUOTA_WINDOW_TOTAL: _ClassVar[QuotaWindow] - -class ObligationKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - OBLIGATION_KIND_UNSPECIFIED: _ClassVar[ObligationKind] - OBLIGATION_KIND_ATTRIBUTION: _ClassVar[ObligationKind] - OBLIGATION_KIND_CONTRIBUTION: _ClassVar[ObligationKind] - OBLIGATION_KIND_SHARE_ALIKE: _ClassVar[ObligationKind] - OBLIGATION_KIND_NETWORK_COPYLEFT: _ClassVar[ObligationKind] - OBLIGATION_KIND_NOTICE: _ClassVar[ObligationKind] - OBLIGATION_KIND_OTHER: _ClassVar[ObligationKind] - -class ObligationTrigger(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - OBLIGATION_TRIGGER_UNSPECIFIED: _ClassVar[ObligationTrigger] - OBLIGATION_TRIGGER_ON_USE: _ClassVar[ObligationTrigger] - OBLIGATION_TRIGGER_ON_DISTRIBUTION: _ClassVar[ObligationTrigger] - OBLIGATION_TRIGGER_ON_NETWORK_SERVICE: _ClassVar[ObligationTrigger] - OBLIGATION_TRIGGER_ON_DERIVATIVE: _ClassVar[ObligationTrigger] - -class PricingModel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - PRICING_MODEL_UNSPECIFIED: _ClassVar[PricingModel] - PRICING_MODEL_FREE: _ClassVar[PricingModel] - PRICING_MODEL_PER_UNIT: _ClassVar[PricingModel] - PRICING_MODEL_FLAT: _ClassVar[PricingModel] - -class PricingMetering(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - PRICING_METERING_ONLINE: _ClassVar[PricingMetering] - PRICING_METERING_NONE: _ClassVar[PricingMetering] - PRICING_METERING_OFFLINE_SELF_REPORTED: _ClassVar[PricingMetering] - -class DeliveryMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - DELIVERY_METHOD_UNSPECIFIED: _ClassVar[DeliveryMethod] - DELIVERY_METHOD_DIRECT: _ClassVar[DeliveryMethod] - DELIVERY_METHOD_INSTRUCTIONS: _ClassVar[DeliveryMethod] - DELIVERY_METHOD_STREAMING: _ClassVar[DeliveryMethod] - -class RequesterType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - REQUESTER_TYPE_UNSPECIFIED: _ClassVar[RequesterType] - REQUESTER_TYPE_AGENT: _ClassVar[RequesterType] - REQUESTER_TYPE_HUMAN_TOOL: _ClassVar[RequesterType] - REQUESTER_TYPE_SERVICE: _ClassVar[RequesterType] - REQUESTER_TYPE_DELEGATED: _ClassVar[RequesterType] - REQUESTER_TYPE_RESEARCH: _ClassVar[RequesterType] - -class C2PAStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - C2PA_STATUS_UNSPECIFIED: _ClassVar[C2PAStatus] - C2PA_STATUS_TRUSTED: _ClassVar[C2PAStatus] - C2PA_STATUS_VALID: _ClassVar[C2PAStatus] - C2PA_STATUS_INVALID: _ClassVar[C2PAStatus] - C2PA_STATUS_ABSENT: _ClassVar[C2PAStatus] - -class ResourceMutability(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - RESOURCE_MUTABILITY_UNSPECIFIED: _ClassVar[ResourceMutability] - RESOURCE_MUTABILITY_STATIC: _ClassVar[ResourceMutability] - RESOURCE_MUTABILITY_DYNAMIC: _ClassVar[ResourceMutability] - RESOURCE_MUTABILITY_LIVE: _ClassVar[ResourceMutability] - -class DenialReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - DENIAL_REASON_UNSPECIFIED: _ClassVar[DenialReason] - DENIAL_REASON_BILLING_REF_INACTIVE: _ClassVar[DenialReason] - DENIAL_REASON_INSUFFICIENT_BALANCE: _ClassVar[DenialReason] - DENIAL_REASON_RATE_LIMITED: _ClassVar[DenialReason] - DENIAL_REASON_CONTENT_UNAVAILABLE: _ClassVar[DenialReason] - DENIAL_REASON_RESTRICTION_NOT_SATISFIED: _ClassVar[DenialReason] - DENIAL_REASON_REPORTING_OVERDUE: _ClassVar[DenialReason] - DENIAL_REASON_OFFER_EXPIRED: _ClassVar[DenialReason] - DENIAL_REASON_SIGNATURE_INVALID: _ClassVar[DenialReason] - DENIAL_REASON_QUOTA_EXCEEDED: _ClassVar[DenialReason] - DENIAL_REASON_DELEGATION_INVALID: _ClassVar[DenialReason] - DENIAL_REASON_SCOPE_INSUFFICIENT: _ClassVar[DenialReason] - DENIAL_REASON_ENTITLEMENT_MISSING: _ClassVar[DenialReason] - DENIAL_REASON_ENTITLEMENT_MALFORMED: _ClassVar[DenialReason] - DENIAL_REASON_ENTITLEMENT_EXPIRED: _ClassVar[DenialReason] - DENIAL_REASON_ENTITLEMENT_WRONG_BUYER: _ClassVar[DenialReason] - DENIAL_REASON_SUBSCRIPTION_LAPSED: _ClassVar[DenialReason] - DENIAL_REASON_ENTITLEMENT_NOT_GRANTED: _ClassVar[DenialReason] - DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION: _ClassVar[DenialReason] - -class IngestionSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - INGESTION_SOURCE_UNSPECIFIED: _ClassVar[IngestionSource] - INGESTION_SOURCE_RAMP_SITEMAP: _ClassVar[IngestionSource] - INGESTION_SOURCE_RSL: _ClassVar[IngestionSource] - INGESTION_SOURCE_SITEMAP: _ClassVar[IngestionSource] - INGESTION_SOURCE_HTML_CRAWL: _ClassVar[IngestionSource] - INGESTION_SOURCE_CMS_API: _ClassVar[IngestionSource] - INGESTION_SOURCE_MANUAL: _ClassVar[IngestionSource] - INGESTION_SOURCE_CATALOG_API: _ClassVar[IngestionSource] - -class CitationFormat(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - CITATION_FORMAT_LINK: _ClassVar[CitationFormat] - CITATION_FORMAT_FOOTNOTE: _ClassVar[CitationFormat] - CITATION_FORMAT_INLINE: _ClassVar[CitationFormat] - -class Role(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - ROLE_UNSPECIFIED: _ClassVar[Role] - ROLE_AGENT: _ClassVar[Role] - ROLE_EXCHANGE: _ClassVar[Role] - ROLE_BROKER: _ClassVar[Role] - ROLE_PUBLISHER: _ClassVar[Role] - -class ProviderRelationship(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - PROVIDER_RELATIONSHIP_UNSPECIFIED: _ClassVar[ProviderRelationship] - PROVIDER_RELATIONSHIP_DIRECT: _ClassVar[ProviderRelationship] - PROVIDER_RELATIONSHIP_RESELLER: _ClassVar[ProviderRelationship] - -class AuthMethod(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - AUTH_METHOD_UNSPECIFIED: _ClassVar[AuthMethod] - AUTH_METHOD_GNAP: _ClassVar[AuthMethod] - AUTH_METHOD_OAUTH_DPOP: _ClassVar[AuthMethod] - AUTH_METHOD_OAUTH_BEARER: _ClassVar[AuthMethod] - AUTH_METHOD_OAUTH_MTLS: _ClassVar[AuthMethod] - -class DisputeReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - DISPUTE_REASON_UNSPECIFIED: _ClassVar[DisputeReason] - DISPUTE_REASON_CONTENT_MISMATCH: _ClassVar[DisputeReason] - DISPUTE_REASON_DELIVERY_FAILED: _ClassVar[DisputeReason] - DISPUTE_REASON_WRONG_CONTENT: _ClassVar[DisputeReason] - DISPUTE_REASON_EXPIRED_BEFORE_FETCH: _ClassVar[DisputeReason] - DISPUTE_REASON_INCOMPLETE_CONTENT: _ClassVar[DisputeReason] - -class DisputeStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - DISPUTE_STATUS_UNSPECIFIED: _ClassVar[DisputeStatus] - DISPUTE_STATUS_FILED: _ClassVar[DisputeStatus] - DISPUTE_STATUS_AUTO_RESOLVED: _ClassVar[DisputeStatus] - DISPUTE_STATUS_EVIDENCE_NEEDED: _ClassVar[DisputeStatus] - DISPUTE_STATUS_UNDER_REVIEW: _ClassVar[DisputeStatus] - DISPUTE_STATUS_ESCALATED: _ClassVar[DisputeStatus] - DISPUTE_STATUS_RESOLVED: _ClassVar[DisputeStatus] - DISPUTE_STATUS_APPEALED: _ClassVar[DisputeStatus] - DISPUTE_STATUS_SETTLED: _ClassVar[DisputeStatus] - DISPUTE_STATUS_FINAL: _ClassVar[DisputeStatus] - -class ResolutionType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - RESOLUTION_TYPE_UNSPECIFIED: _ClassVar[ResolutionType] - RESOLUTION_TYPE_CREDIT: _ClassVar[ResolutionType] - RESOLUTION_TYPE_REDELIVERY: _ClassVar[ResolutionType] - RESOLUTION_TYPE_REJECTED: _ClassVar[ResolutionType] - RESOLUTION_TYPE_INVESTIGATION: _ClassVar[ResolutionType] - -class CatalogRejectionReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - CATALOG_REJECTION_REASON_UNSPECIFIED: _ClassVar[CatalogRejectionReason] - CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR: _ClassVar[CatalogRejectionReason] - CATALOG_REJECTION_REASON_TENANT_MISMATCH: _ClassVar[CatalogRejectionReason] - CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED: _ClassVar[CatalogRejectionReason] - CATALOG_REJECTION_REASON_SIGNATURE_INVALID: _ClassVar[CatalogRejectionReason] - CATALOG_REJECTION_REASON_MALFORMED_ENTRY: _ClassVar[CatalogRejectionReason] - CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN: _ClassVar[CatalogRejectionReason] - CATALOG_REJECTION_REASON_QUOTA_EXCEEDED: _ClassVar[CatalogRejectionReason] - -class RegistrationFailureReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - REGISTRATION_FAILURE_REASON_UNSPECIFIED: _ClassVar[RegistrationFailureReason] - REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED: _ClassVar[RegistrationFailureReason] - REGISTRATION_FAILURE_REASON_INVALID_KEY: _ClassVar[RegistrationFailureReason] - REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID: _ClassVar[RegistrationFailureReason] - REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED: _ClassVar[RegistrationFailureReason] - REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED: _ClassVar[RegistrationFailureReason] - -class DisputeFailureReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - DISPUTE_FAILURE_REASON_UNSPECIFIED: _ClassVar[DisputeFailureReason] - DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND: _ClassVar[DisputeFailureReason] - DISPUTE_FAILURE_REASON_REPORT_NOT_FILED: _ClassVar[DisputeFailureReason] - DISPUTE_FAILURE_REASON_WINDOW_EXPIRED: _ClassVar[DisputeFailureReason] - DISPUTE_FAILURE_REASON_DUPLICATE: _ClassVar[DisputeFailureReason] - DISPUTE_FAILURE_REASON_INELIGIBLE: _ClassVar[DisputeFailureReason] - -class DomainVerificationFailureReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED: _ClassVar[DomainVerificationFailureReason] - DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND: _ClassVar[DomainVerificationFailureReason] - DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH: _ClassVar[DomainVerificationFailureReason] - DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED: _ClassVar[DomainVerificationFailureReason] - DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED: _ClassVar[DomainVerificationFailureReason] - DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED: _ClassVar[DomainVerificationFailureReason] - DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED: _ClassVar[DomainVerificationFailureReason] - -class RetrievalAuthFailureReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED: _ClassVar[RetrievalAuthFailureReason] - RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID: _ClassVar[RetrievalAuthFailureReason] - -class UsageReportRejectionReason(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - USAGE_REPORT_REJECTION_REASON_UNSPECIFIED: _ClassVar[UsageReportRejectionReason] - USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND: _ClassVar[UsageReportRejectionReason] - USAGE_REPORT_REJECTION_REASON_DUPLICATE: _ClassVar[UsageReportRejectionReason] - USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED: _ClassVar[UsageReportRejectionReason] - USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS: _ClassVar[UsageReportRejectionReason] - USAGE_REPORT_REJECTION_REASON_MALFORMED: _ClassVar[UsageReportRejectionReason] -DISCOVERY_METHOD_UNSPECIFIED: DiscoveryMethod -DISCOVERY_METHOD_EXCHANGE: DiscoveryMethod -DISCOVERY_METHOD_SEARCH: DiscoveryMethod -DISCOVERY_METHOD_RECOMMENDATION: DiscoveryMethod -DISCOVERY_METHOD_SYNDICATION: DiscoveryMethod -OFFER_ABSENCE_REASON_UNSPECIFIED: OfferAbsenceReason -OFFER_ABSENCE_REASON_NOT_IN_CATALOG: OfferAbsenceReason -OFFER_ABSENCE_REASON_CONTENT_BLOCKED: OfferAbsenceReason -OFFER_ABSENCE_REASON_RESTRICTION_FILTERED: OfferAbsenceReason -OFFER_ABSENCE_REASON_TEMPORARILY_UNAVAILABLE: OfferAbsenceReason -OFFER_ABSENCE_REASON_NOT_AUTHORIZED: OfferAbsenceReason -OFFER_ABSENCE_REASON_SCOPE_INSUFFICIENT: OfferAbsenceReason -OFFER_ABSENCE_REASON_UNKNOWN_CRITICAL_EXTENSION: OfferAbsenceReason -TERM_SEMANTICS_UNSPECIFIED: TermSemantics -TERM_SEMANTICS_ENUMERATED: TermSemantics -TERM_SEMANTICS_REFERENCE_ONLY: TermSemantics -RESTRICTION_KIND_UNSPECIFIED: RestrictionKind -RESTRICTION_KIND_FUNCTION: RestrictionKind -RESTRICTION_KIND_GEOGRAPHY: RestrictionKind -RESTRICTION_KIND_USER_TYPE: RestrictionKind -RESTRICTION_KIND_OTHER: RestrictionKind -QUOTA_WINDOW_UNSPECIFIED: QuotaWindow -QUOTA_WINDOW_HOURLY: QuotaWindow -QUOTA_WINDOW_DAILY: QuotaWindow -QUOTA_WINDOW_MONTHLY: QuotaWindow -QUOTA_WINDOW_TOTAL: QuotaWindow -OBLIGATION_KIND_UNSPECIFIED: ObligationKind -OBLIGATION_KIND_ATTRIBUTION: ObligationKind -OBLIGATION_KIND_CONTRIBUTION: ObligationKind -OBLIGATION_KIND_SHARE_ALIKE: ObligationKind -OBLIGATION_KIND_NETWORK_COPYLEFT: ObligationKind -OBLIGATION_KIND_NOTICE: ObligationKind -OBLIGATION_KIND_OTHER: ObligationKind -OBLIGATION_TRIGGER_UNSPECIFIED: ObligationTrigger -OBLIGATION_TRIGGER_ON_USE: ObligationTrigger -OBLIGATION_TRIGGER_ON_DISTRIBUTION: ObligationTrigger -OBLIGATION_TRIGGER_ON_NETWORK_SERVICE: ObligationTrigger -OBLIGATION_TRIGGER_ON_DERIVATIVE: ObligationTrigger -PRICING_MODEL_UNSPECIFIED: PricingModel -PRICING_MODEL_FREE: PricingModel -PRICING_MODEL_PER_UNIT: PricingModel -PRICING_MODEL_FLAT: PricingModel -PRICING_METERING_ONLINE: PricingMetering -PRICING_METERING_NONE: PricingMetering -PRICING_METERING_OFFLINE_SELF_REPORTED: PricingMetering -DELIVERY_METHOD_UNSPECIFIED: DeliveryMethod -DELIVERY_METHOD_DIRECT: DeliveryMethod -DELIVERY_METHOD_INSTRUCTIONS: DeliveryMethod -DELIVERY_METHOD_STREAMING: DeliveryMethod -REQUESTER_TYPE_UNSPECIFIED: RequesterType -REQUESTER_TYPE_AGENT: RequesterType -REQUESTER_TYPE_HUMAN_TOOL: RequesterType -REQUESTER_TYPE_SERVICE: RequesterType -REQUESTER_TYPE_DELEGATED: RequesterType -REQUESTER_TYPE_RESEARCH: RequesterType -C2PA_STATUS_UNSPECIFIED: C2PAStatus -C2PA_STATUS_TRUSTED: C2PAStatus -C2PA_STATUS_VALID: C2PAStatus -C2PA_STATUS_INVALID: C2PAStatus -C2PA_STATUS_ABSENT: C2PAStatus -RESOURCE_MUTABILITY_UNSPECIFIED: ResourceMutability -RESOURCE_MUTABILITY_STATIC: ResourceMutability -RESOURCE_MUTABILITY_DYNAMIC: ResourceMutability -RESOURCE_MUTABILITY_LIVE: ResourceMutability -DENIAL_REASON_UNSPECIFIED: DenialReason -DENIAL_REASON_BILLING_REF_INACTIVE: DenialReason -DENIAL_REASON_INSUFFICIENT_BALANCE: DenialReason -DENIAL_REASON_RATE_LIMITED: DenialReason -DENIAL_REASON_CONTENT_UNAVAILABLE: DenialReason -DENIAL_REASON_RESTRICTION_NOT_SATISFIED: DenialReason -DENIAL_REASON_REPORTING_OVERDUE: DenialReason -DENIAL_REASON_OFFER_EXPIRED: DenialReason -DENIAL_REASON_SIGNATURE_INVALID: DenialReason -DENIAL_REASON_QUOTA_EXCEEDED: DenialReason -DENIAL_REASON_DELEGATION_INVALID: DenialReason -DENIAL_REASON_SCOPE_INSUFFICIENT: DenialReason -DENIAL_REASON_ENTITLEMENT_MISSING: DenialReason -DENIAL_REASON_ENTITLEMENT_MALFORMED: DenialReason -DENIAL_REASON_ENTITLEMENT_EXPIRED: DenialReason -DENIAL_REASON_ENTITLEMENT_WRONG_BUYER: DenialReason -DENIAL_REASON_SUBSCRIPTION_LAPSED: DenialReason -DENIAL_REASON_ENTITLEMENT_NOT_GRANTED: DenialReason -DENIAL_REASON_ENTITLEMENT_STALE_ATTENUATION: DenialReason -INGESTION_SOURCE_UNSPECIFIED: IngestionSource -INGESTION_SOURCE_RAMP_SITEMAP: IngestionSource -INGESTION_SOURCE_RSL: IngestionSource -INGESTION_SOURCE_SITEMAP: IngestionSource -INGESTION_SOURCE_HTML_CRAWL: IngestionSource -INGESTION_SOURCE_CMS_API: IngestionSource -INGESTION_SOURCE_MANUAL: IngestionSource -INGESTION_SOURCE_CATALOG_API: IngestionSource -CITATION_FORMAT_LINK: CitationFormat -CITATION_FORMAT_FOOTNOTE: CitationFormat -CITATION_FORMAT_INLINE: CitationFormat -ROLE_UNSPECIFIED: Role -ROLE_AGENT: Role -ROLE_EXCHANGE: Role -ROLE_BROKER: Role -ROLE_PUBLISHER: Role -PROVIDER_RELATIONSHIP_UNSPECIFIED: ProviderRelationship -PROVIDER_RELATIONSHIP_DIRECT: ProviderRelationship -PROVIDER_RELATIONSHIP_RESELLER: ProviderRelationship -AUTH_METHOD_UNSPECIFIED: AuthMethod -AUTH_METHOD_GNAP: AuthMethod -AUTH_METHOD_OAUTH_DPOP: AuthMethod -AUTH_METHOD_OAUTH_BEARER: AuthMethod -AUTH_METHOD_OAUTH_MTLS: AuthMethod -DISPUTE_REASON_UNSPECIFIED: DisputeReason -DISPUTE_REASON_CONTENT_MISMATCH: DisputeReason -DISPUTE_REASON_DELIVERY_FAILED: DisputeReason -DISPUTE_REASON_WRONG_CONTENT: DisputeReason -DISPUTE_REASON_EXPIRED_BEFORE_FETCH: DisputeReason -DISPUTE_REASON_INCOMPLETE_CONTENT: DisputeReason -DISPUTE_STATUS_UNSPECIFIED: DisputeStatus -DISPUTE_STATUS_FILED: DisputeStatus -DISPUTE_STATUS_AUTO_RESOLVED: DisputeStatus -DISPUTE_STATUS_EVIDENCE_NEEDED: DisputeStatus -DISPUTE_STATUS_UNDER_REVIEW: DisputeStatus -DISPUTE_STATUS_ESCALATED: DisputeStatus -DISPUTE_STATUS_RESOLVED: DisputeStatus -DISPUTE_STATUS_APPEALED: DisputeStatus -DISPUTE_STATUS_SETTLED: DisputeStatus -DISPUTE_STATUS_FINAL: DisputeStatus -RESOLUTION_TYPE_UNSPECIFIED: ResolutionType -RESOLUTION_TYPE_CREDIT: ResolutionType -RESOLUTION_TYPE_REDELIVERY: ResolutionType -RESOLUTION_TYPE_REJECTED: ResolutionType -RESOLUTION_TYPE_INVESTIGATION: ResolutionType -CATALOG_REJECTION_REASON_UNSPECIFIED: CatalogRejectionReason -CATALOG_REJECTION_REASON_NOT_CATALOG_CONTRIBUTOR: CatalogRejectionReason -CATALOG_REJECTION_REASON_TENANT_MISMATCH: CatalogRejectionReason -CATALOG_REJECTION_REASON_DOMAIN_NOT_VERIFIED: CatalogRejectionReason -CATALOG_REJECTION_REASON_SIGNATURE_INVALID: CatalogRejectionReason -CATALOG_REJECTION_REASON_MALFORMED_ENTRY: CatalogRejectionReason -CATALOG_REJECTION_REASON_UNKNOWN_VOCAB_TOKEN: CatalogRejectionReason -CATALOG_REJECTION_REASON_QUOTA_EXCEEDED: CatalogRejectionReason -REGISTRATION_FAILURE_REASON_UNSPECIFIED: RegistrationFailureReason -REGISTRATION_FAILURE_REASON_DOMAIN_NOT_VERIFIED: RegistrationFailureReason -REGISTRATION_FAILURE_REASON_INVALID_KEY: RegistrationFailureReason -REGISTRATION_FAILURE_REASON_SIGNATURE_INVALID: RegistrationFailureReason -REGISTRATION_FAILURE_REASON_ALREADY_REGISTERED: RegistrationFailureReason -REGISTRATION_FAILURE_REASON_QUOTA_EXCEEDED: RegistrationFailureReason -DISPUTE_FAILURE_REASON_UNSPECIFIED: DisputeFailureReason -DISPUTE_FAILURE_REASON_TRANSACTION_NOT_FOUND: DisputeFailureReason -DISPUTE_FAILURE_REASON_REPORT_NOT_FILED: DisputeFailureReason -DISPUTE_FAILURE_REASON_WINDOW_EXPIRED: DisputeFailureReason -DISPUTE_FAILURE_REASON_DUPLICATE: DisputeFailureReason -DISPUTE_FAILURE_REASON_INELIGIBLE: DisputeFailureReason -DOMAIN_VERIFICATION_FAILURE_REASON_UNSPECIFIED: DomainVerificationFailureReason -DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_NOT_FOUND: DomainVerificationFailureReason -DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_MISMATCH: DomainVerificationFailureReason -DOMAIN_VERIFICATION_FAILURE_REASON_CHALLENGE_EXPIRED: DomainVerificationFailureReason -DOMAIN_VERIFICATION_FAILURE_REASON_FETCH_FAILED: DomainVerificationFailureReason -DOMAIN_VERIFICATION_FAILURE_REASON_EXCHANGE_NOT_AUTHORIZED: DomainVerificationFailureReason -DOMAIN_VERIFICATION_FAILURE_REASON_KEY_REGISTRATION_FAILED: DomainVerificationFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_UNSPECIFIED: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRED: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISSING: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_URL_EXPIRY_MISSING: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_URL_SIGNATURE_MISMATCH: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_AGENT_KEY_MISSING: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_MISSING: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_KEYID_MISMATCH: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_THUMBPRINT_MISMATCH: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_PROOF_CREATED_MISSING: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRY_MISSING: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_PROOF_EXPIRED: RetrievalAuthFailureReason -RETRIEVAL_AUTH_FAILURE_REASON_PROOF_SIGNATURE_INVALID: RetrievalAuthFailureReason -USAGE_REPORT_REJECTION_REASON_UNSPECIFIED: UsageReportRejectionReason -USAGE_REPORT_REJECTION_REASON_TRANSACTION_NOT_FOUND: UsageReportRejectionReason -USAGE_REPORT_REJECTION_REASON_DUPLICATE: UsageReportRejectionReason -USAGE_REPORT_REJECTION_REASON_WINDOW_EXPIRED: UsageReportRejectionReason -USAGE_REPORT_REJECTION_REASON_MISSING_REQUIRED_FIELDS: UsageReportRejectionReason -USAGE_REPORT_REJECTION_REASON_MALFORMED: UsageReportRejectionReason - -class AcceptableRestriction(_message.Message): - __slots__ = ("axis", "values") - AXIS_FIELD_NUMBER: _ClassVar[int] - VALUES_FIELD_NUMBER: _ClassVar[int] - axis: RestrictionKind - values: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, axis: _Optional[_Union[RestrictionKind, str]] = ..., values: _Optional[_Iterable[str]] = ...) -> None: ... - -class ResourceQuery(_message.Message): - __slots__ = ("ver", "id", "requester", "uris", "acceptable_restrictions", "deadline", "supported_profiles", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - REQUESTER_FIELD_NUMBER: _ClassVar[int] - URIS_FIELD_NUMBER: _ClassVar[int] - ACCEPTABLE_RESTRICTIONS_FIELD_NUMBER: _ClassVar[int] - DEADLINE_FIELD_NUMBER: _ClassVar[int] - SUPPORTED_PROFILES_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - id: str - requester: Requester - uris: _containers.RepeatedScalarFieldContainer[str] - acceptable_restrictions: _containers.RepeatedCompositeFieldContainer[AcceptableRestriction] - deadline: _duration_pb2.Duration - supported_profiles: _containers.RepeatedScalarFieldContainer[str] - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., id: _Optional[str] = ..., requester: _Optional[_Union[Requester, _Mapping]] = ..., uris: _Optional[_Iterable[str]] = ..., acceptable_restrictions: _Optional[_Iterable[_Union[AcceptableRestriction, _Mapping]]] = ..., deadline: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., supported_profiles: _Optional[_Iterable[str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class ResourceResponse(_message.Message): - __slots__ = ("ver", "exchange", "offers", "offer_groups", "rate_limit", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - EXCHANGE_FIELD_NUMBER: _ClassVar[int] - OFFERS_FIELD_NUMBER: _ClassVar[int] - OFFER_GROUPS_FIELD_NUMBER: _ClassVar[int] - RATE_LIMIT_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - exchange: str - offers: _containers.RepeatedCompositeFieldContainer[Offer] - offer_groups: _containers.RepeatedCompositeFieldContainer[OfferGroup] - rate_limit: RateLimitInfo - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., exchange: _Optional[str] = ..., offers: _Optional[_Iterable[_Union[Offer, _Mapping]]] = ..., offer_groups: _Optional[_Iterable[_Union[OfferGroup, _Mapping]]] = ..., rate_limit: _Optional[_Union[RateLimitInfo, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class OfferGroup(_message.Message): - __slots__ = ("uri", "offers", "discovery_method", "absence_reason", "restriction_filters") - URI_FIELD_NUMBER: _ClassVar[int] - OFFERS_FIELD_NUMBER: _ClassVar[int] - DISCOVERY_METHOD_FIELD_NUMBER: _ClassVar[int] - ABSENCE_REASON_FIELD_NUMBER: _ClassVar[int] - RESTRICTION_FILTERS_FIELD_NUMBER: _ClassVar[int] - uri: str - offers: _containers.RepeatedCompositeFieldContainer[Offer] - discovery_method: DiscoveryMethod - absence_reason: OfferAbsenceReason - restriction_filters: _containers.RepeatedScalarFieldContainer[RestrictionKind] - def __init__(self, uri: _Optional[str] = ..., offers: _Optional[_Iterable[_Union[Offer, _Mapping]]] = ..., discovery_method: _Optional[_Union[DiscoveryMethod, str]] = ..., absence_reason: _Optional[_Union[OfferAbsenceReason, str]] = ..., restriction_filters: _Optional[_Iterable[_Union[RestrictionKind, str]]] = ...) -> None: ... - -class RateLimitInfo(_message.Message): - __slots__ = ("limit", "remaining", "reset_at", "window") - LIMIT_FIELD_NUMBER: _ClassVar[int] - REMAINING_FIELD_NUMBER: _ClassVar[int] - RESET_AT_FIELD_NUMBER: _ClassVar[int] - WINDOW_FIELD_NUMBER: _ClassVar[int] - limit: int - remaining: int - reset_at: _timestamp_pb2.Timestamp - window: _duration_pb2.Duration - def __init__(self, limit: _Optional[int] = ..., remaining: _Optional[int] = ..., reset_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., window: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ...) -> None: ... - -class SubscriptionQuotaInfo(_message.Message): - __slots__ = ("subscription_id", "quota_limit", "quota_used", "quota_remaining", "resets_at", "unit") - SUBSCRIPTION_ID_FIELD_NUMBER: _ClassVar[int] - QUOTA_LIMIT_FIELD_NUMBER: _ClassVar[int] - QUOTA_USED_FIELD_NUMBER: _ClassVar[int] - QUOTA_REMAINING_FIELD_NUMBER: _ClassVar[int] - RESETS_AT_FIELD_NUMBER: _ClassVar[int] - UNIT_FIELD_NUMBER: _ClassVar[int] - subscription_id: str - quota_limit: int - quota_used: int - quota_remaining: int - resets_at: _timestamp_pb2.Timestamp - unit: str - def __init__(self, subscription_id: _Optional[str] = ..., quota_limit: _Optional[int] = ..., quota_used: _Optional[int] = ..., quota_remaining: _Optional[int] = ..., resets_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., unit: _Optional[str] = ...) -> None: ... - -class Offer(_message.Message): - __slots__ = ("offer_id", "title", "pricing", "delivery_method", "reporting", "expires_at", "identity", "signature", "signature_algorithm", "subscription_id", "iab_categories", "attestations", "data_as_of", "subscription_quota", "previews", "terms", "ext", "ext_critical") - OFFER_ID_FIELD_NUMBER: _ClassVar[int] - TITLE_FIELD_NUMBER: _ClassVar[int] - PRICING_FIELD_NUMBER: _ClassVar[int] - DELIVERY_METHOD_FIELD_NUMBER: _ClassVar[int] - REPORTING_FIELD_NUMBER: _ClassVar[int] - EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] - IDENTITY_FIELD_NUMBER: _ClassVar[int] - SIGNATURE_FIELD_NUMBER: _ClassVar[int] - SIGNATURE_ALGORITHM_FIELD_NUMBER: _ClassVar[int] - SUBSCRIPTION_ID_FIELD_NUMBER: _ClassVar[int] - IAB_CATEGORIES_FIELD_NUMBER: _ClassVar[int] - ATTESTATIONS_FIELD_NUMBER: _ClassVar[int] - DATA_AS_OF_FIELD_NUMBER: _ClassVar[int] - SUBSCRIPTION_QUOTA_FIELD_NUMBER: _ClassVar[int] - PREVIEWS_FIELD_NUMBER: _ClassVar[int] - TERMS_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - offer_id: str - title: str - pricing: Pricing - delivery_method: DeliveryMethod - reporting: ReportingObligation - expires_at: _timestamp_pb2.Timestamp - identity: ResourceIdentity - signature: str - signature_algorithm: str - subscription_id: str - iab_categories: _containers.RepeatedScalarFieldContainer[str] - attestations: _containers.RepeatedCompositeFieldContainer[ResourceAttestation] - data_as_of: _timestamp_pb2.Timestamp - subscription_quota: _containers.RepeatedCompositeFieldContainer[SubscriptionQuotaInfo] - previews: _containers.RepeatedCompositeFieldContainer[Preview] - terms: _containers.RepeatedCompositeFieldContainer[LicenseTerm] - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, offer_id: _Optional[str] = ..., title: _Optional[str] = ..., pricing: _Optional[_Union[Pricing, _Mapping]] = ..., delivery_method: _Optional[_Union[DeliveryMethod, str]] = ..., reporting: _Optional[_Union[ReportingObligation, _Mapping]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., identity: _Optional[_Union[ResourceIdentity, _Mapping]] = ..., signature: _Optional[str] = ..., signature_algorithm: _Optional[str] = ..., subscription_id: _Optional[str] = ..., iab_categories: _Optional[_Iterable[str]] = ..., attestations: _Optional[_Iterable[_Union[ResourceAttestation, _Mapping]]] = ..., data_as_of: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., subscription_quota: _Optional[_Iterable[_Union[SubscriptionQuotaInfo, _Mapping]]] = ..., previews: _Optional[_Iterable[_Union[Preview, _Mapping]]] = ..., terms: _Optional[_Iterable[_Union[LicenseTerm, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class ResourceIdentity(_message.Message): - __slots__ = ("canonical_url", "doi", "iptc_guid", "isni", "content_hash", "hash_method", "resource_mutability", "c2pa_manifest", "c2pa_status", "soft_binding", "soft_binding_method", "ext", "ext_critical") - CANONICAL_URL_FIELD_NUMBER: _ClassVar[int] - DOI_FIELD_NUMBER: _ClassVar[int] - IPTC_GUID_FIELD_NUMBER: _ClassVar[int] - ISNI_FIELD_NUMBER: _ClassVar[int] - CONTENT_HASH_FIELD_NUMBER: _ClassVar[int] - HASH_METHOD_FIELD_NUMBER: _ClassVar[int] - RESOURCE_MUTABILITY_FIELD_NUMBER: _ClassVar[int] - C2PA_MANIFEST_FIELD_NUMBER: _ClassVar[int] - C2PA_STATUS_FIELD_NUMBER: _ClassVar[int] - SOFT_BINDING_FIELD_NUMBER: _ClassVar[int] - SOFT_BINDING_METHOD_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - canonical_url: str - doi: str - iptc_guid: str - isni: str - content_hash: str - hash_method: str - resource_mutability: ResourceMutability - c2pa_manifest: str - c2pa_status: C2PAStatus - soft_binding: str - soft_binding_method: str - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, canonical_url: _Optional[str] = ..., doi: _Optional[str] = ..., iptc_guid: _Optional[str] = ..., isni: _Optional[str] = ..., content_hash: _Optional[str] = ..., hash_method: _Optional[str] = ..., resource_mutability: _Optional[_Union[ResourceMutability, str]] = ..., c2pa_manifest: _Optional[str] = ..., c2pa_status: _Optional[_Union[C2PAStatus, str]] = ..., soft_binding: _Optional[str] = ..., soft_binding_method: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class ResourceAttestation(_message.Message): - __slots__ = ("verifier", "kid", "attested_at", "uri", "claims", "signature") - VERIFIER_FIELD_NUMBER: _ClassVar[int] - KID_FIELD_NUMBER: _ClassVar[int] - ATTESTED_AT_FIELD_NUMBER: _ClassVar[int] - URI_FIELD_NUMBER: _ClassVar[int] - CLAIMS_FIELD_NUMBER: _ClassVar[int] - SIGNATURE_FIELD_NUMBER: _ClassVar[int] - verifier: str - kid: str - attested_at: _timestamp_pb2.Timestamp - uri: str - claims: _struct_pb2.Struct - signature: str - def __init__(self, verifier: _Optional[str] = ..., kid: _Optional[str] = ..., attested_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., uri: _Optional[str] = ..., claims: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., signature: _Optional[str] = ...) -> None: ... - -class License(_message.Message): - __slots__ = ("uri", "id", "name", "immutable", "uri_digest") - URI_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - NAME_FIELD_NUMBER: _ClassVar[int] - IMMUTABLE_FIELD_NUMBER: _ClassVar[int] - URI_DIGEST_FIELD_NUMBER: _ClassVar[int] - uri: str - id: str - name: str - immutable: bool - uri_digest: str - def __init__(self, uri: _Optional[str] = ..., id: _Optional[str] = ..., name: _Optional[str] = ..., immutable: _Optional[bool] = ..., uri_digest: _Optional[str] = ...) -> None: ... - -class Restriction(_message.Message): - __slots__ = ("kind", "permitted", "prohibited", "advisory") - KIND_FIELD_NUMBER: _ClassVar[int] - PERMITTED_FIELD_NUMBER: _ClassVar[int] - PROHIBITED_FIELD_NUMBER: _ClassVar[int] - ADVISORY_FIELD_NUMBER: _ClassVar[int] - kind: RestrictionKind - permitted: _containers.RepeatedScalarFieldContainer[str] - prohibited: _containers.RepeatedScalarFieldContainer[str] - advisory: bool - def __init__(self, kind: _Optional[_Union[RestrictionKind, str]] = ..., permitted: _Optional[_Iterable[str]] = ..., prohibited: _Optional[_Iterable[str]] = ..., advisory: _Optional[bool] = ...) -> None: ... - -class Quota(_message.Message): - __slots__ = ("metric", "limit", "window") - METRIC_FIELD_NUMBER: _ClassVar[int] - LIMIT_FIELD_NUMBER: _ClassVar[int] - WINDOW_FIELD_NUMBER: _ClassVar[int] - metric: str - limit: int - window: QuotaWindow - def __init__(self, metric: _Optional[str] = ..., limit: _Optional[int] = ..., window: _Optional[_Union[QuotaWindow, str]] = ...) -> None: ... - -class Obligation(_message.Message): - __slots__ = ("kind", "trigger", "scope_license", "detail") - KIND_FIELD_NUMBER: _ClassVar[int] - TRIGGER_FIELD_NUMBER: _ClassVar[int] - SCOPE_LICENSE_FIELD_NUMBER: _ClassVar[int] - DETAIL_FIELD_NUMBER: _ClassVar[int] - kind: ObligationKind - trigger: ObligationTrigger - scope_license: License - detail: str - def __init__(self, kind: _Optional[_Union[ObligationKind, str]] = ..., trigger: _Optional[_Union[ObligationTrigger, str]] = ..., scope_license: _Optional[_Union[License, _Mapping]] = ..., detail: _Optional[str] = ...) -> None: ... - -class LicenseTerm(_message.Message): - __slots__ = ("license", "semantics", "restrictions", "quotas", "obligations", "pricing", "scopes", "part_label") - LICENSE_FIELD_NUMBER: _ClassVar[int] - SEMANTICS_FIELD_NUMBER: _ClassVar[int] - RESTRICTIONS_FIELD_NUMBER: _ClassVar[int] - QUOTAS_FIELD_NUMBER: _ClassVar[int] - OBLIGATIONS_FIELD_NUMBER: _ClassVar[int] - PRICING_FIELD_NUMBER: _ClassVar[int] - SCOPES_FIELD_NUMBER: _ClassVar[int] - PART_LABEL_FIELD_NUMBER: _ClassVar[int] - license: License - semantics: TermSemantics - restrictions: _containers.RepeatedCompositeFieldContainer[Restriction] - quotas: _containers.RepeatedCompositeFieldContainer[Quota] - obligations: _containers.RepeatedCompositeFieldContainer[Obligation] - pricing: Pricing - scopes: _containers.RepeatedScalarFieldContainer[str] - part_label: str - def __init__(self, license: _Optional[_Union[License, _Mapping]] = ..., semantics: _Optional[_Union[TermSemantics, str]] = ..., restrictions: _Optional[_Iterable[_Union[Restriction, _Mapping]]] = ..., quotas: _Optional[_Iterable[_Union[Quota, _Mapping]]] = ..., obligations: _Optional[_Iterable[_Union[Obligation, _Mapping]]] = ..., pricing: _Optional[_Union[Pricing, _Mapping]] = ..., scopes: _Optional[_Iterable[str]] = ..., part_label: _Optional[str] = ...) -> None: ... - -class Preview(_message.Message): - __slots__ = ("url", "media_type", "width", "height", "duration", "size") - URL_FIELD_NUMBER: _ClassVar[int] - MEDIA_TYPE_FIELD_NUMBER: _ClassVar[int] - WIDTH_FIELD_NUMBER: _ClassVar[int] - HEIGHT_FIELD_NUMBER: _ClassVar[int] - DURATION_FIELD_NUMBER: _ClassVar[int] - SIZE_FIELD_NUMBER: _ClassVar[int] - url: str - media_type: str - width: int - height: int - duration: int - size: str - def __init__(self, url: _Optional[str] = ..., media_type: _Optional[str] = ..., width: _Optional[int] = ..., height: _Optional[int] = ..., duration: _Optional[int] = ..., size: _Optional[str] = ...) -> None: ... - -class Pricing(_message.Message): - __slots__ = ("model", "rate", "currency", "unit_cost", "estimated_quantity", "license_duration_months", "unit", "metering") - MODEL_FIELD_NUMBER: _ClassVar[int] - RATE_FIELD_NUMBER: _ClassVar[int] - CURRENCY_FIELD_NUMBER: _ClassVar[int] - UNIT_COST_FIELD_NUMBER: _ClassVar[int] - ESTIMATED_QUANTITY_FIELD_NUMBER: _ClassVar[int] - LICENSE_DURATION_MONTHS_FIELD_NUMBER: _ClassVar[int] - UNIT_FIELD_NUMBER: _ClassVar[int] - METERING_FIELD_NUMBER: _ClassVar[int] - model: PricingModel - rate: float - currency: str - unit_cost: float - estimated_quantity: int - license_duration_months: int - unit: str - metering: PricingMetering - def __init__(self, model: _Optional[_Union[PricingModel, str]] = ..., rate: _Optional[float] = ..., currency: _Optional[str] = ..., unit_cost: _Optional[float] = ..., estimated_quantity: _Optional[int] = ..., license_duration_months: _Optional[int] = ..., unit: _Optional[str] = ..., metering: _Optional[_Union[PricingMetering, str]] = ...) -> None: ... - -class Requester(_message.Message): - __slots__ = ("id", "domain", "type", "name", "billing_ref", "scopes", "delegation", "ext", "ext_critical") - ID_FIELD_NUMBER: _ClassVar[int] - DOMAIN_FIELD_NUMBER: _ClassVar[int] - TYPE_FIELD_NUMBER: _ClassVar[int] - NAME_FIELD_NUMBER: _ClassVar[int] - BILLING_REF_FIELD_NUMBER: _ClassVar[int] - SCOPES_FIELD_NUMBER: _ClassVar[int] - DELEGATION_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - id: str - domain: str - type: RequesterType - name: str - billing_ref: str - scopes: _containers.RepeatedScalarFieldContainer[str] - delegation: Delegation - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, id: _Optional[str] = ..., domain: _Optional[str] = ..., type: _Optional[_Union[RequesterType, str]] = ..., name: _Optional[str] = ..., billing_ref: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., delegation: _Optional[_Union[Delegation, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class Delegation(_message.Message): - __slots__ = ("principal_domain", "principal_id", "scopes", "expires_at", "max_spend_cents", "max_accesses", "quota_period", "token", "token_format", "revocation_uri", "issuer", "ext", "ext_critical") - PRINCIPAL_DOMAIN_FIELD_NUMBER: _ClassVar[int] - PRINCIPAL_ID_FIELD_NUMBER: _ClassVar[int] - SCOPES_FIELD_NUMBER: _ClassVar[int] - EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] - MAX_SPEND_CENTS_FIELD_NUMBER: _ClassVar[int] - MAX_ACCESSES_FIELD_NUMBER: _ClassVar[int] - QUOTA_PERIOD_FIELD_NUMBER: _ClassVar[int] - TOKEN_FIELD_NUMBER: _ClassVar[int] - TOKEN_FORMAT_FIELD_NUMBER: _ClassVar[int] - REVOCATION_URI_FIELD_NUMBER: _ClassVar[int] - ISSUER_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - principal_domain: str - principal_id: str - scopes: _containers.RepeatedScalarFieldContainer[str] - expires_at: _timestamp_pb2.Timestamp - max_spend_cents: int - max_accesses: int - quota_period: _duration_pb2.Duration - token: bytes - token_format: str - revocation_uri: str - issuer: str - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, principal_domain: _Optional[str] = ..., principal_id: _Optional[str] = ..., scopes: _Optional[_Iterable[str]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., max_spend_cents: _Optional[int] = ..., max_accesses: _Optional[int] = ..., quota_period: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., token: _Optional[bytes] = ..., token_format: _Optional[str] = ..., revocation_uri: _Optional[str] = ..., issuer: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class TransactionRequest(_message.Message): - __slots__ = ("ver", "idempotency_key", "offer_id", "requester", "offer_signature", "items", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - IDEMPOTENCY_KEY_FIELD_NUMBER: _ClassVar[int] - OFFER_ID_FIELD_NUMBER: _ClassVar[int] - REQUESTER_FIELD_NUMBER: _ClassVar[int] - OFFER_SIGNATURE_FIELD_NUMBER: _ClassVar[int] - ITEMS_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - idempotency_key: str - offer_id: str - requester: Requester - offer_signature: str - items: _containers.RepeatedCompositeFieldContainer[TransactionItem] - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., idempotency_key: _Optional[str] = ..., offer_id: _Optional[str] = ..., requester: _Optional[_Union[Requester, _Mapping]] = ..., offer_signature: _Optional[str] = ..., items: _Optional[_Iterable[_Union[TransactionItem, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class TransactionItem(_message.Message): - __slots__ = ("offer_id", "offer_signature") - OFFER_ID_FIELD_NUMBER: _ClassVar[int] - OFFER_SIGNATURE_FIELD_NUMBER: _ClassVar[int] - offer_id: str - offer_signature: str - def __init__(self, offer_id: _Optional[str] = ..., offer_signature: _Optional[str] = ...) -> None: ... - -class TransactionResponse(_message.Message): - __slots__ = ("ver", "transaction_id", "billing_id", "resource_title", "cost", "delivery_method", "reporting_obligation", "expires_at", "agent_identity_hash", "retrieval_endpoint", "subscription_id", "subscription_unit_value", "items", "total_cost", "subscription_quota", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] - BILLING_ID_FIELD_NUMBER: _ClassVar[int] - RESOURCE_TITLE_FIELD_NUMBER: _ClassVar[int] - COST_FIELD_NUMBER: _ClassVar[int] - DELIVERY_METHOD_FIELD_NUMBER: _ClassVar[int] - REPORTING_OBLIGATION_FIELD_NUMBER: _ClassVar[int] - EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] - AGENT_IDENTITY_HASH_FIELD_NUMBER: _ClassVar[int] - RETRIEVAL_ENDPOINT_FIELD_NUMBER: _ClassVar[int] - SUBSCRIPTION_ID_FIELD_NUMBER: _ClassVar[int] - SUBSCRIPTION_UNIT_VALUE_FIELD_NUMBER: _ClassVar[int] - ITEMS_FIELD_NUMBER: _ClassVar[int] - TOTAL_COST_FIELD_NUMBER: _ClassVar[int] - SUBSCRIPTION_QUOTA_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - transaction_id: str - billing_id: str - resource_title: str - cost: Cost - delivery_method: DeliveryMethod - reporting_obligation: ReportingObligation - expires_at: _timestamp_pb2.Timestamp - agent_identity_hash: str - retrieval_endpoint: str - subscription_id: str - subscription_unit_value: Cost - items: _containers.RepeatedCompositeFieldContainer[TransactionResultItem] - total_cost: Cost - subscription_quota: _containers.RepeatedCompositeFieldContainer[SubscriptionQuotaInfo] - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., resource_title: _Optional[str] = ..., cost: _Optional[_Union[Cost, _Mapping]] = ..., delivery_method: _Optional[_Union[DeliveryMethod, str]] = ..., reporting_obligation: _Optional[_Union[ReportingObligation, _Mapping]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., agent_identity_hash: _Optional[str] = ..., retrieval_endpoint: _Optional[str] = ..., subscription_id: _Optional[str] = ..., subscription_unit_value: _Optional[_Union[Cost, _Mapping]] = ..., items: _Optional[_Iterable[_Union[TransactionResultItem, _Mapping]]] = ..., total_cost: _Optional[_Union[Cost, _Mapping]] = ..., subscription_quota: _Optional[_Iterable[_Union[SubscriptionQuotaInfo, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class TransactionResultItem(_message.Message): - __slots__ = ("offer_id", "transaction_id", "billing_id", "resource_title", "cost", "subscription_id", "subscription_unit_value", "denial_reason", "restriction_mismatches", "expires_at", "retrieval_endpoint", "delivery_method", "reporting_obligation") - OFFER_ID_FIELD_NUMBER: _ClassVar[int] - TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] - BILLING_ID_FIELD_NUMBER: _ClassVar[int] - RESOURCE_TITLE_FIELD_NUMBER: _ClassVar[int] - COST_FIELD_NUMBER: _ClassVar[int] - SUBSCRIPTION_ID_FIELD_NUMBER: _ClassVar[int] - SUBSCRIPTION_UNIT_VALUE_FIELD_NUMBER: _ClassVar[int] - DENIAL_REASON_FIELD_NUMBER: _ClassVar[int] - RESTRICTION_MISMATCHES_FIELD_NUMBER: _ClassVar[int] - EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] - RETRIEVAL_ENDPOINT_FIELD_NUMBER: _ClassVar[int] - DELIVERY_METHOD_FIELD_NUMBER: _ClassVar[int] - REPORTING_OBLIGATION_FIELD_NUMBER: _ClassVar[int] - offer_id: str - transaction_id: str - billing_id: str - resource_title: str - cost: Cost - subscription_id: str - subscription_unit_value: Cost - denial_reason: DenialReason - restriction_mismatches: _containers.RepeatedScalarFieldContainer[RestrictionKind] - expires_at: _timestamp_pb2.Timestamp - retrieval_endpoint: str - delivery_method: DeliveryMethod - reporting_obligation: ReportingObligation - def __init__(self, offer_id: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., resource_title: _Optional[str] = ..., cost: _Optional[_Union[Cost, _Mapping]] = ..., subscription_id: _Optional[str] = ..., subscription_unit_value: _Optional[_Union[Cost, _Mapping]] = ..., denial_reason: _Optional[_Union[DenialReason, str]] = ..., restriction_mismatches: _Optional[_Iterable[_Union[RestrictionKind, str]]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., retrieval_endpoint: _Optional[str] = ..., delivery_method: _Optional[_Union[DeliveryMethod, str]] = ..., reporting_obligation: _Optional[_Union[ReportingObligation, _Mapping]] = ...) -> None: ... - -class Cost(_message.Message): - __slots__ = ("amount", "currency", "unit_cost") - AMOUNT_FIELD_NUMBER: _ClassVar[int] - CURRENCY_FIELD_NUMBER: _ClassVar[int] - UNIT_COST_FIELD_NUMBER: _ClassVar[int] - amount: float - currency: str - unit_cost: float - def __init__(self, amount: _Optional[float] = ..., currency: _Optional[str] = ..., unit_cost: _Optional[float] = ...) -> None: ... - -class PushResourcesRequest(_message.Message): - __slots__ = ("ver", "tenant_id", "entries", "caller_id", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - TENANT_ID_FIELD_NUMBER: _ClassVar[int] - ENTRIES_FIELD_NUMBER: _ClassVar[int] - CALLER_ID_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - tenant_id: str - entries: _containers.RepeatedCompositeFieldContainer[ResourceEntry] - caller_id: str - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., tenant_id: _Optional[str] = ..., entries: _Optional[_Iterable[_Union[ResourceEntry, _Mapping]]] = ..., caller_id: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class ResourceEntry(_message.Message): - __slots__ = ("domain", "path", "content_id", "title", "word_count", "estimated_quantity", "content_hash", "hash_method", "source", "provenance_source", "provenance_timestamp", "attestations", "terms", "ext", "ext_critical") - DOMAIN_FIELD_NUMBER: _ClassVar[int] - PATH_FIELD_NUMBER: _ClassVar[int] - CONTENT_ID_FIELD_NUMBER: _ClassVar[int] - TITLE_FIELD_NUMBER: _ClassVar[int] - WORD_COUNT_FIELD_NUMBER: _ClassVar[int] - ESTIMATED_QUANTITY_FIELD_NUMBER: _ClassVar[int] - CONTENT_HASH_FIELD_NUMBER: _ClassVar[int] - HASH_METHOD_FIELD_NUMBER: _ClassVar[int] - SOURCE_FIELD_NUMBER: _ClassVar[int] - PROVENANCE_SOURCE_FIELD_NUMBER: _ClassVar[int] - PROVENANCE_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] - ATTESTATIONS_FIELD_NUMBER: _ClassVar[int] - TERMS_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - domain: str - path: str - content_id: str - title: str - word_count: int - estimated_quantity: int - content_hash: str - hash_method: str - source: IngestionSource - provenance_source: str - provenance_timestamp: _timestamp_pb2.Timestamp - attestations: _containers.RepeatedCompositeFieldContainer[ResourceAttestation] - terms: _containers.RepeatedCompositeFieldContainer[LicenseTerm] - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, domain: _Optional[str] = ..., path: _Optional[str] = ..., content_id: _Optional[str] = ..., title: _Optional[str] = ..., word_count: _Optional[int] = ..., estimated_quantity: _Optional[int] = ..., content_hash: _Optional[str] = ..., hash_method: _Optional[str] = ..., source: _Optional[_Union[IngestionSource, str]] = ..., provenance_source: _Optional[str] = ..., provenance_timestamp: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., attestations: _Optional[_Iterable[_Union[ResourceAttestation, _Mapping]]] = ..., terms: _Optional[_Iterable[_Union[LicenseTerm, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class PushResourcesResponse(_message.Message): - __slots__ = ("ver", "accepted", "rejected", "warnings", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - ACCEPTED_FIELD_NUMBER: _ClassVar[int] - REJECTED_FIELD_NUMBER: _ClassVar[int] - WARNINGS_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - accepted: int - rejected: int - warnings: _containers.RepeatedScalarFieldContainer[str] - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., accepted: _Optional[int] = ..., rejected: _Optional[int] = ..., warnings: _Optional[_Iterable[str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class RemoveResourcesRequest(_message.Message): - __slots__ = ("ver", "tenant_id", "paths") - VER_FIELD_NUMBER: _ClassVar[int] - TENANT_ID_FIELD_NUMBER: _ClassVar[int] - PATHS_FIELD_NUMBER: _ClassVar[int] - ver: str - tenant_id: str - paths: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., tenant_id: _Optional[str] = ..., paths: _Optional[_Iterable[str]] = ...) -> None: ... - -class RemoveResourcesResponse(_message.Message): - __slots__ = ("ver", "removed") - VER_FIELD_NUMBER: _ClassVar[int] - REMOVED_FIELD_NUMBER: _ClassVar[int] - ver: str - removed: int - def __init__(self, ver: _Optional[str] = ..., removed: _Optional[int] = ...) -> None: ... - -class RefreshCatalogRequest(_message.Message): - __slots__ = ("ver", "tenant_id") - VER_FIELD_NUMBER: _ClassVar[int] - TENANT_ID_FIELD_NUMBER: _ClassVar[int] - ver: str - tenant_id: str - def __init__(self, ver: _Optional[str] = ..., tenant_id: _Optional[str] = ...) -> None: ... - -class RefreshCatalogResponse(_message.Message): - __slots__ = ("ver", "started") - VER_FIELD_NUMBER: _ClassVar[int] - STARTED_FIELD_NUMBER: _ClassVar[int] - ver: str - started: bool - def __init__(self, ver: _Optional[str] = ..., started: _Optional[bool] = ...) -> None: ... - -class ReportingObligation(_message.Message): - __slots__ = ("required", "window", "endpoint", "required_fields", "ext", "ext_critical") - REQUIRED_FIELD_NUMBER: _ClassVar[int] - WINDOW_FIELD_NUMBER: _ClassVar[int] - ENDPOINT_FIELD_NUMBER: _ClassVar[int] - REQUIRED_FIELDS_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - required: bool - window: _duration_pb2.Duration - endpoint: str - required_fields: _containers.RepeatedScalarFieldContainer[str] - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, required: _Optional[bool] = ..., window: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., endpoint: _Optional[str] = ..., required_fields: _Optional[_Iterable[str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class UsageReport(_message.Message): - __slots__ = ("ver", "idempotency_key", "transaction_id", "billing_id", "usage", "timestamp", "exchange", "assets", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - IDEMPOTENCY_KEY_FIELD_NUMBER: _ClassVar[int] - TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] - BILLING_ID_FIELD_NUMBER: _ClassVar[int] - USAGE_FIELD_NUMBER: _ClassVar[int] - TIMESTAMP_FIELD_NUMBER: _ClassVar[int] - EXCHANGE_FIELD_NUMBER: _ClassVar[int] - ASSETS_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - idempotency_key: str - transaction_id: str - billing_id: str - usage: Usage - timestamp: _timestamp_pb2.Timestamp - exchange: str - assets: _containers.RepeatedCompositeFieldContainer[UsageAsset] - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., idempotency_key: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., usage: _Optional[_Union[Usage, _Mapping]] = ..., timestamp: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., exchange: _Optional[str] = ..., assets: _Optional[_Iterable[_Union[UsageAsset, _Mapping]]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class AttributionDetail(_message.Message): - __slots__ = ("displayed_url", "format", "visible_to_user") - DISPLAYED_URL_FIELD_NUMBER: _ClassVar[int] - FORMAT_FIELD_NUMBER: _ClassVar[int] - VISIBLE_TO_USER_FIELD_NUMBER: _ClassVar[int] - displayed_url: str - format: CitationFormat - visible_to_user: bool - def __init__(self, displayed_url: _Optional[str] = ..., format: _Optional[_Union[CitationFormat, str]] = ..., visible_to_user: _Optional[bool] = ...) -> None: ... - -class Usage(_message.Message): - __slots__ = ("function", "subfn", "consumed_quantity", "displayed_to_user", "citation_included", "attribution", "consumed_unit") - FUNCTION_FIELD_NUMBER: _ClassVar[int] - SUBFN_FIELD_NUMBER: _ClassVar[int] - CONSUMED_QUANTITY_FIELD_NUMBER: _ClassVar[int] - DISPLAYED_TO_USER_FIELD_NUMBER: _ClassVar[int] - CITATION_INCLUDED_FIELD_NUMBER: _ClassVar[int] - ATTRIBUTION_FIELD_NUMBER: _ClassVar[int] - CONSUMED_UNIT_FIELD_NUMBER: _ClassVar[int] - function: _containers.RepeatedScalarFieldContainer[str] - subfn: _containers.RepeatedScalarFieldContainer[str] - consumed_quantity: int - displayed_to_user: bool - citation_included: bool - attribution: _containers.RepeatedCompositeFieldContainer[AttributionDetail] - consumed_unit: str - def __init__(self, function: _Optional[_Iterable[str]] = ..., subfn: _Optional[_Iterable[str]] = ..., consumed_quantity: _Optional[int] = ..., displayed_to_user: _Optional[bool] = ..., citation_included: _Optional[bool] = ..., attribution: _Optional[_Iterable[_Union[AttributionDetail, _Mapping]]] = ..., consumed_unit: _Optional[str] = ...) -> None: ... - -class UsageAsset(_message.Message): - __slots__ = ("uri", "title", "package_id") - URI_FIELD_NUMBER: _ClassVar[int] - TITLE_FIELD_NUMBER: _ClassVar[int] - PACKAGE_ID_FIELD_NUMBER: _ClassVar[int] - uri: str - title: str - package_id: str - def __init__(self, uri: _Optional[str] = ..., title: _Optional[str] = ..., package_id: _Optional[str] = ...) -> None: ... - -class UsageReportResponse(_message.Message): - __slots__ = ("ver", "report_id", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - REPORT_ID_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - report_id: str - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., report_id: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class RAMPRequest(_message.Message): - __slots__ = ("ver", "id", "requester", "uris", "acceptable_restrictions", "constraints", "supported_profiles", "query", "search_filters", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - ID_FIELD_NUMBER: _ClassVar[int] - REQUESTER_FIELD_NUMBER: _ClassVar[int] - URIS_FIELD_NUMBER: _ClassVar[int] - ACCEPTABLE_RESTRICTIONS_FIELD_NUMBER: _ClassVar[int] - CONSTRAINTS_FIELD_NUMBER: _ClassVar[int] - SUPPORTED_PROFILES_FIELD_NUMBER: _ClassVar[int] - QUERY_FIELD_NUMBER: _ClassVar[int] - SEARCH_FILTERS_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - id: str - requester: Requester - uris: _containers.RepeatedScalarFieldContainer[str] - acceptable_restrictions: _containers.RepeatedCompositeFieldContainer[AcceptableRestriction] - constraints: RequestConstraints - supported_profiles: _containers.RepeatedScalarFieldContainer[str] - query: str - search_filters: _struct_pb2.Struct - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., id: _Optional[str] = ..., requester: _Optional[_Union[Requester, _Mapping]] = ..., uris: _Optional[_Iterable[str]] = ..., acceptable_restrictions: _Optional[_Iterable[_Union[AcceptableRestriction, _Mapping]]] = ..., constraints: _Optional[_Union[RequestConstraints, _Mapping]] = ..., supported_profiles: _Optional[_Iterable[str]] = ..., query: _Optional[str] = ..., search_filters: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class RequestConstraints(_message.Message): - __slots__ = ("exchanges", "max_price", "max_unit_cost", "delivery_preference", "reporting_capable", "preferred_exchanges", "budget_scope", "period_budget", "budget_period", "max_data_age", "max_hops") - EXCHANGES_FIELD_NUMBER: _ClassVar[int] - MAX_PRICE_FIELD_NUMBER: _ClassVar[int] - MAX_UNIT_COST_FIELD_NUMBER: _ClassVar[int] - DELIVERY_PREFERENCE_FIELD_NUMBER: _ClassVar[int] - REPORTING_CAPABLE_FIELD_NUMBER: _ClassVar[int] - PREFERRED_EXCHANGES_FIELD_NUMBER: _ClassVar[int] - BUDGET_SCOPE_FIELD_NUMBER: _ClassVar[int] - PERIOD_BUDGET_FIELD_NUMBER: _ClassVar[int] - BUDGET_PERIOD_FIELD_NUMBER: _ClassVar[int] - MAX_DATA_AGE_FIELD_NUMBER: _ClassVar[int] - MAX_HOPS_FIELD_NUMBER: _ClassVar[int] - exchanges: _containers.RepeatedScalarFieldContainer[str] - max_price: Cost - max_unit_cost: float - delivery_preference: _containers.RepeatedScalarFieldContainer[DeliveryMethod] - reporting_capable: bool - preferred_exchanges: _containers.RepeatedScalarFieldContainer[str] - budget_scope: str - period_budget: Cost - budget_period: _duration_pb2.Duration - max_data_age: _duration_pb2.Duration - max_hops: int - def __init__(self, exchanges: _Optional[_Iterable[str]] = ..., max_price: _Optional[_Union[Cost, _Mapping]] = ..., max_unit_cost: _Optional[float] = ..., delivery_preference: _Optional[_Iterable[_Union[DeliveryMethod, str]]] = ..., reporting_capable: _Optional[bool] = ..., preferred_exchanges: _Optional[_Iterable[str]] = ..., budget_scope: _Optional[str] = ..., period_budget: _Optional[_Union[Cost, _Mapping]] = ..., budget_period: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., max_data_age: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., max_hops: _Optional[int] = ...) -> None: ... - -class JsonWebKey(_message.Message): - __slots__ = ("kid", "kty", "crv", "use", "alg", "x", "not_before", "not_after") - KID_FIELD_NUMBER: _ClassVar[int] - KTY_FIELD_NUMBER: _ClassVar[int] - CRV_FIELD_NUMBER: _ClassVar[int] - USE_FIELD_NUMBER: _ClassVar[int] - ALG_FIELD_NUMBER: _ClassVar[int] - X_FIELD_NUMBER: _ClassVar[int] - NOT_BEFORE_FIELD_NUMBER: _ClassVar[int] - NOT_AFTER_FIELD_NUMBER: _ClassVar[int] - kid: str - kty: str - crv: str - use: str - alg: str - x: str - not_before: str - not_after: str - def __init__(self, kid: _Optional[str] = ..., kty: _Optional[str] = ..., crv: _Optional[str] = ..., use: _Optional[str] = ..., alg: _Optional[str] = ..., x: _Optional[str] = ..., not_before: _Optional[str] = ..., not_after: _Optional[str] = ...) -> None: ... - -class WellKnownManifest(_message.Message): - __slots__ = ("ver", "role", "domain", "contact", "public_keys", "invalidation_url", "exchanges", "catalog_contributors", "name", "operator", "operator_domain", "endpoint", "health_endpoint", "catalog_endpoint", "protocol_versions_supported", "pricing_models_supported", "delivery_methods_supported", "hash_methods_supported", "accepted_verifiers", "terms_uri", "privacy_uri", "supported_profiles", "supported_auth_methods", "oidc_issuer", "gnap_grant_endpoint", "base_currency", "max_intermediary_hops", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - ROLE_FIELD_NUMBER: _ClassVar[int] - DOMAIN_FIELD_NUMBER: _ClassVar[int] - CONTACT_FIELD_NUMBER: _ClassVar[int] - PUBLIC_KEYS_FIELD_NUMBER: _ClassVar[int] - INVALIDATION_URL_FIELD_NUMBER: _ClassVar[int] - EXCHANGES_FIELD_NUMBER: _ClassVar[int] - CATALOG_CONTRIBUTORS_FIELD_NUMBER: _ClassVar[int] - NAME_FIELD_NUMBER: _ClassVar[int] - OPERATOR_FIELD_NUMBER: _ClassVar[int] - OPERATOR_DOMAIN_FIELD_NUMBER: _ClassVar[int] - ENDPOINT_FIELD_NUMBER: _ClassVar[int] - HEALTH_ENDPOINT_FIELD_NUMBER: _ClassVar[int] - CATALOG_ENDPOINT_FIELD_NUMBER: _ClassVar[int] - PROTOCOL_VERSIONS_SUPPORTED_FIELD_NUMBER: _ClassVar[int] - PRICING_MODELS_SUPPORTED_FIELD_NUMBER: _ClassVar[int] - DELIVERY_METHODS_SUPPORTED_FIELD_NUMBER: _ClassVar[int] - HASH_METHODS_SUPPORTED_FIELD_NUMBER: _ClassVar[int] - ACCEPTED_VERIFIERS_FIELD_NUMBER: _ClassVar[int] - TERMS_URI_FIELD_NUMBER: _ClassVar[int] - PRIVACY_URI_FIELD_NUMBER: _ClassVar[int] - SUPPORTED_PROFILES_FIELD_NUMBER: _ClassVar[int] - SUPPORTED_AUTH_METHODS_FIELD_NUMBER: _ClassVar[int] - OIDC_ISSUER_FIELD_NUMBER: _ClassVar[int] - GNAP_GRANT_ENDPOINT_FIELD_NUMBER: _ClassVar[int] - BASE_CURRENCY_FIELD_NUMBER: _ClassVar[int] - MAX_INTERMEDIARY_HOPS_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - role: Role - domain: str - contact: str - public_keys: _containers.RepeatedCompositeFieldContainer[JsonWebKey] - invalidation_url: str - exchanges: _containers.RepeatedCompositeFieldContainer[AuthorizedExchange] - catalog_contributors: _containers.RepeatedCompositeFieldContainer[CatalogContributor] - name: str - operator: str - operator_domain: str - endpoint: str - health_endpoint: str - catalog_endpoint: str - protocol_versions_supported: _containers.RepeatedScalarFieldContainer[str] - pricing_models_supported: _containers.RepeatedScalarFieldContainer[PricingModel] - delivery_methods_supported: _containers.RepeatedScalarFieldContainer[DeliveryMethod] - hash_methods_supported: _containers.RepeatedScalarFieldContainer[str] - accepted_verifiers: _containers.RepeatedScalarFieldContainer[str] - terms_uri: str - privacy_uri: str - supported_profiles: _containers.RepeatedScalarFieldContainer[str] - supported_auth_methods: _containers.RepeatedScalarFieldContainer[AuthMethod] - oidc_issuer: str - gnap_grant_endpoint: str - base_currency: str - max_intermediary_hops: int - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., role: _Optional[_Union[Role, str]] = ..., domain: _Optional[str] = ..., contact: _Optional[str] = ..., public_keys: _Optional[_Iterable[_Union[JsonWebKey, _Mapping]]] = ..., invalidation_url: _Optional[str] = ..., exchanges: _Optional[_Iterable[_Union[AuthorizedExchange, _Mapping]]] = ..., catalog_contributors: _Optional[_Iterable[_Union[CatalogContributor, _Mapping]]] = ..., name: _Optional[str] = ..., operator: _Optional[str] = ..., operator_domain: _Optional[str] = ..., endpoint: _Optional[str] = ..., health_endpoint: _Optional[str] = ..., catalog_endpoint: _Optional[str] = ..., protocol_versions_supported: _Optional[_Iterable[str]] = ..., pricing_models_supported: _Optional[_Iterable[_Union[PricingModel, str]]] = ..., delivery_methods_supported: _Optional[_Iterable[_Union[DeliveryMethod, str]]] = ..., hash_methods_supported: _Optional[_Iterable[str]] = ..., accepted_verifiers: _Optional[_Iterable[str]] = ..., terms_uri: _Optional[str] = ..., privacy_uri: _Optional[str] = ..., supported_profiles: _Optional[_Iterable[str]] = ..., supported_auth_methods: _Optional[_Iterable[_Union[AuthMethod, str]]] = ..., oidc_issuer: _Optional[str] = ..., gnap_grant_endpoint: _Optional[str] = ..., base_currency: _Optional[str] = ..., max_intermediary_hops: _Optional[int] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class KeyInvalidationList(_message.Message): - __slots__ = ("as_of", "revoked") - AS_OF_FIELD_NUMBER: _ClassVar[int] - REVOKED_FIELD_NUMBER: _ClassVar[int] - as_of: _timestamp_pb2.Timestamp - revoked: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, as_of: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., revoked: _Optional[_Iterable[str]] = ...) -> None: ... - -class CatalogContributor(_message.Message): - __slots__ = ("domain", "relationship") - DOMAIN_FIELD_NUMBER: _ClassVar[int] - RELATIONSHIP_FIELD_NUMBER: _ClassVar[int] - domain: str - relationship: str - def __init__(self, domain: _Optional[str] = ..., relationship: _Optional[str] = ...) -> None: ... - -class AuthorizedExchange(_message.Message): - __slots__ = ("domain", "endpoint", "relationship", "ext", "ext_critical") - DOMAIN_FIELD_NUMBER: _ClassVar[int] - ENDPOINT_FIELD_NUMBER: _ClassVar[int] - RELATIONSHIP_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - domain: str - endpoint: str - relationship: ProviderRelationship - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, domain: _Optional[str] = ..., endpoint: _Optional[str] = ..., relationship: _Optional[_Union[ProviderRelationship, str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class RAMPResponse(_message.Message): - __slots__ = ("ver", "transaction_id", "billing_id", "exchange", "resource_title", "cost", "delivery_method", "reporting_obligation", "expires_at", "retrieval_endpoint", "agent_identity_hash", "broker_fee", "absence_reason", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] - BILLING_ID_FIELD_NUMBER: _ClassVar[int] - EXCHANGE_FIELD_NUMBER: _ClassVar[int] - RESOURCE_TITLE_FIELD_NUMBER: _ClassVar[int] - COST_FIELD_NUMBER: _ClassVar[int] - DELIVERY_METHOD_FIELD_NUMBER: _ClassVar[int] - REPORTING_OBLIGATION_FIELD_NUMBER: _ClassVar[int] - EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] - RETRIEVAL_ENDPOINT_FIELD_NUMBER: _ClassVar[int] - AGENT_IDENTITY_HASH_FIELD_NUMBER: _ClassVar[int] - BROKER_FEE_FIELD_NUMBER: _ClassVar[int] - ABSENCE_REASON_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - transaction_id: str - billing_id: str - exchange: str - resource_title: str - cost: Cost - delivery_method: DeliveryMethod - reporting_obligation: ReportingObligation - expires_at: _timestamp_pb2.Timestamp - retrieval_endpoint: str - agent_identity_hash: str - broker_fee: Cost - absence_reason: OfferAbsenceReason - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., exchange: _Optional[str] = ..., resource_title: _Optional[str] = ..., cost: _Optional[_Union[Cost, _Mapping]] = ..., delivery_method: _Optional[_Union[DeliveryMethod, str]] = ..., reporting_obligation: _Optional[_Union[ReportingObligation, _Mapping]] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., retrieval_endpoint: _Optional[str] = ..., agent_identity_hash: _Optional[str] = ..., broker_fee: _Optional[_Union[Cost, _Mapping]] = ..., absence_reason: _Optional[_Union[OfferAbsenceReason, str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class DisputeRequest(_message.Message): - __slots__ = ("ver", "idempotency_key", "transaction_id", "billing_id", "reason", "description", "received_content_hash", "received_hash_method", "report_id", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - IDEMPOTENCY_KEY_FIELD_NUMBER: _ClassVar[int] - TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int] - BILLING_ID_FIELD_NUMBER: _ClassVar[int] - REASON_FIELD_NUMBER: _ClassVar[int] - DESCRIPTION_FIELD_NUMBER: _ClassVar[int] - RECEIVED_CONTENT_HASH_FIELD_NUMBER: _ClassVar[int] - RECEIVED_HASH_METHOD_FIELD_NUMBER: _ClassVar[int] - REPORT_ID_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - idempotency_key: str - transaction_id: str - billing_id: str - reason: DisputeReason - description: str - received_content_hash: str - received_hash_method: str - report_id: str - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., idempotency_key: _Optional[str] = ..., transaction_id: _Optional[str] = ..., billing_id: _Optional[str] = ..., reason: _Optional[_Union[DisputeReason, str]] = ..., description: _Optional[str] = ..., received_content_hash: _Optional[str] = ..., received_hash_method: _Optional[str] = ..., report_id: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class DisputeResponse(_message.Message): - __slots__ = ("ver", "dispute_id", "estimated_resolution", "status", "resolution", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - DISPUTE_ID_FIELD_NUMBER: _ClassVar[int] - ESTIMATED_RESOLUTION_FIELD_NUMBER: _ClassVar[int] - STATUS_FIELD_NUMBER: _ClassVar[int] - RESOLUTION_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - dispute_id: str - estimated_resolution: _duration_pb2.Duration - status: DisputeStatus - resolution: ResolutionType - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., dispute_id: _Optional[str] = ..., estimated_resolution: _Optional[_Union[datetime.timedelta, _duration_pb2.Duration, _Mapping]] = ..., status: _Optional[_Union[DisputeStatus, str]] = ..., resolution: _Optional[_Union[ResolutionType, str]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class DomainVerificationRequest(_message.Message): - __slots__ = ("ver", "domain", "caller_id", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - DOMAIN_FIELD_NUMBER: _ClassVar[int] - CALLER_ID_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - domain: str - caller_id: str - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., domain: _Optional[str] = ..., caller_id: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class DomainVerificationChallenge(_message.Message): - __slots__ = ("ver", "token", "expires_at", "verification_url", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - TOKEN_FIELD_NUMBER: _ClassVar[int] - EXPIRES_AT_FIELD_NUMBER: _ClassVar[int] - VERIFICATION_URL_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - token: str - expires_at: _timestamp_pb2.Timestamp - verification_url: str - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., token: _Optional[str] = ..., expires_at: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., verification_url: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class DomainVerificationConfirmation(_message.Message): - __slots__ = ("ver", "domain", "token", "signing_key", "cdn_type", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - DOMAIN_FIELD_NUMBER: _ClassVar[int] - TOKEN_FIELD_NUMBER: _ClassVar[int] - SIGNING_KEY_FIELD_NUMBER: _ClassVar[int] - CDN_TYPE_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - domain: str - token: str - signing_key: str - cdn_type: str - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., domain: _Optional[str] = ..., token: _Optional[str] = ..., signing_key: _Optional[str] = ..., cdn_type: _Optional[str] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class DomainVerificationResult(_message.Message): - __slots__ = ("ver", "key_id", "valid_until", "ext", "ext_critical") - VER_FIELD_NUMBER: _ClassVar[int] - KEY_ID_FIELD_NUMBER: _ClassVar[int] - VALID_UNTIL_FIELD_NUMBER: _ClassVar[int] - EXT_FIELD_NUMBER: _ClassVar[int] - EXT_CRITICAL_FIELD_NUMBER: _ClassVar[int] - ver: str - key_id: str - valid_until: _timestamp_pb2.Timestamp - ext: _struct_pb2.Struct - ext_critical: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, ver: _Optional[str] = ..., key_id: _Optional[str] = ..., valid_until: _Optional[_Union[datetime.datetime, _timestamp_pb2.Timestamp, _Mapping]] = ..., ext: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., ext_critical: _Optional[_Iterable[str]] = ...) -> None: ... - -class ErrorDetail(_message.Message): - __slots__ = ("message", "domain", "metadata", "transaction_denial", "catalog_rejection", "registration_failure", "dispute_failure", "domain_verification_failure", "retrieval_auth_failure", "usage_report_rejection") - class MetadataEntry(_message.Message): - __slots__ = ("key", "value") - KEY_FIELD_NUMBER: _ClassVar[int] - VALUE_FIELD_NUMBER: _ClassVar[int] - key: str - value: str - def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... - MESSAGE_FIELD_NUMBER: _ClassVar[int] - DOMAIN_FIELD_NUMBER: _ClassVar[int] - METADATA_FIELD_NUMBER: _ClassVar[int] - TRANSACTION_DENIAL_FIELD_NUMBER: _ClassVar[int] - CATALOG_REJECTION_FIELD_NUMBER: _ClassVar[int] - REGISTRATION_FAILURE_FIELD_NUMBER: _ClassVar[int] - DISPUTE_FAILURE_FIELD_NUMBER: _ClassVar[int] - DOMAIN_VERIFICATION_FAILURE_FIELD_NUMBER: _ClassVar[int] - RETRIEVAL_AUTH_FAILURE_FIELD_NUMBER: _ClassVar[int] - USAGE_REPORT_REJECTION_FIELD_NUMBER: _ClassVar[int] - message: str - domain: str - metadata: _containers.ScalarMap[str, str] - transaction_denial: TransactionDenial - catalog_rejection: CatalogRejection - registration_failure: RegistrationFailure - dispute_failure: DisputeFailure - domain_verification_failure: DomainVerificationFailure - retrieval_auth_failure: RetrievalAuthFailure - usage_report_rejection: UsageReportRejection - def __init__(self, message: _Optional[str] = ..., domain: _Optional[str] = ..., metadata: _Optional[_Mapping[str, str]] = ..., transaction_denial: _Optional[_Union[TransactionDenial, _Mapping]] = ..., catalog_rejection: _Optional[_Union[CatalogRejection, _Mapping]] = ..., registration_failure: _Optional[_Union[RegistrationFailure, _Mapping]] = ..., dispute_failure: _Optional[_Union[DisputeFailure, _Mapping]] = ..., domain_verification_failure: _Optional[_Union[DomainVerificationFailure, _Mapping]] = ..., retrieval_auth_failure: _Optional[_Union[RetrievalAuthFailure, _Mapping]] = ..., usage_report_rejection: _Optional[_Union[UsageReportRejection, _Mapping]] = ...) -> None: ... - -class TransactionDenial(_message.Message): - __slots__ = ("reason", "restriction_mismatches", "offer_id") - REASON_FIELD_NUMBER: _ClassVar[int] - RESTRICTION_MISMATCHES_FIELD_NUMBER: _ClassVar[int] - OFFER_ID_FIELD_NUMBER: _ClassVar[int] - reason: DenialReason - restriction_mismatches: _containers.RepeatedScalarFieldContainer[RestrictionKind] - offer_id: str - def __init__(self, reason: _Optional[_Union[DenialReason, str]] = ..., restriction_mismatches: _Optional[_Iterable[_Union[RestrictionKind, str]]] = ..., offer_id: _Optional[str] = ...) -> None: ... - -class CatalogRejection(_message.Message): - __slots__ = ("reason", "rejected_paths") - REASON_FIELD_NUMBER: _ClassVar[int] - REJECTED_PATHS_FIELD_NUMBER: _ClassVar[int] - reason: CatalogRejectionReason - rejected_paths: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, reason: _Optional[_Union[CatalogRejectionReason, str]] = ..., rejected_paths: _Optional[_Iterable[str]] = ...) -> None: ... - -class RegistrationFailure(_message.Message): - __slots__ = ("reason",) - REASON_FIELD_NUMBER: _ClassVar[int] - reason: RegistrationFailureReason - def __init__(self, reason: _Optional[_Union[RegistrationFailureReason, str]] = ...) -> None: ... - -class DisputeFailure(_message.Message): - __slots__ = ("reason",) - REASON_FIELD_NUMBER: _ClassVar[int] - reason: DisputeFailureReason - def __init__(self, reason: _Optional[_Union[DisputeFailureReason, str]] = ...) -> None: ... - -class DomainVerificationFailure(_message.Message): - __slots__ = ("reason",) - REASON_FIELD_NUMBER: _ClassVar[int] - reason: DomainVerificationFailureReason - def __init__(self, reason: _Optional[_Union[DomainVerificationFailureReason, str]] = ...) -> None: ... - -class RetrievalAuthFailure(_message.Message): - __slots__ = ("reason",) - REASON_FIELD_NUMBER: _ClassVar[int] - reason: RetrievalAuthFailureReason - def __init__(self, reason: _Optional[_Union[RetrievalAuthFailureReason, str]] = ...) -> None: ... - -class UsageReportRejection(_message.Message): - __slots__ = ("reason",) - REASON_FIELD_NUMBER: _ClassVar[int] - reason: UsageReportRejectionReason - def __init__(self, reason: _Optional[_Union[UsageReportRejectionReason, str]] = ...) -> None: ... diff --git a/gen/python/ramp/v1/vocab_pb2.py b/gen/python/ramp/v1/vocab_pb2.py deleted file mode 100644 index 249605e3..00000000 --- a/gen/python/ramp/v1/vocab_pb2.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: ramp/v1/vocab.proto -# Protobuf Python Version: 7.35.1 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 7, - 35, - 1, - '', - 'ramp/v1/vocab.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13ramp/v1/vocab.proto\x12\x07ramp.v1\x1a google/protobuf/descriptor.proto:5\n\x05vocab\x12\x1d.google.protobuf.FieldOptions\x18\xd1\x86\x03 \x03(\tR\x05vocab:G\n\rvocab_package\x12\x1d.google.protobuf.FieldOptions\x18\xd3\x86\x03 \x01(\tR\x0cvocabPackage\x88\x01\x01:B\n\nvocab_enum\x12!.google.protobuf.EnumValueOptions\x18\xd2\x86\x03 \x03(\tR\tvocabEnum:T\n\x12vocab_enum_package\x12!.google.protobuf.EnumValueOptions\x18\xd4\x86\x03 \x01(\tR\x10vocabEnumPackage\x88\x01\x01\x42\x8f\x01\n\x0b\x63om.ramp.v1B\nVocabProtoP\x01Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\xa2\x02\x03RXX\xaa\x02\x07Ramp.V1\xca\x02\x07Ramp\\V1\xe2\x02\x13Ramp\\V1\\GPBMetadata\xea\x02\x08Ramp::V1b\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ramp.v1.vocab_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\013com.ramp.v1B\nVocabProtoP\001Z7github.com/RAMP-Protocol/protocol/gen/go/ramp/v1;rampv1\242\002\003RXX\252\002\007Ramp.V1\312\002\007Ramp\\V1\342\002\023Ramp\\V1\\GPBMetadata\352\002\010Ramp::V1' -# @@protoc_insertion_point(module_scope) diff --git a/gen/python/ramp/v1/vocab_pb2.pyi b/gen/python/ramp/v1/vocab_pb2.pyi deleted file mode 100644 index 4087cffc..00000000 --- a/gen/python/ramp/v1/vocab_pb2.pyi +++ /dev/null @@ -1,13 +0,0 @@ -from google.protobuf import descriptor_pb2 as _descriptor_pb2 -from google.protobuf import descriptor as _descriptor -from typing import ClassVar as _ClassVar - -DESCRIPTOR: _descriptor.FileDescriptor -VOCAB_FIELD_NUMBER: _ClassVar[int] -vocab: _descriptor.FieldDescriptor -VOCAB_PACKAGE_FIELD_NUMBER: _ClassVar[int] -vocab_package: _descriptor.FieldDescriptor -VOCAB_ENUM_FIELD_NUMBER: _ClassVar[int] -vocab_enum: _descriptor.FieldDescriptor -VOCAB_ENUM_PACKAGE_FIELD_NUMBER: _ClassVar[int] -vocab_enum_package: _descriptor.FieldDescriptor diff --git a/gen/python/vocab/__pycache__/pricingunits.cpython-312.pyc b/gen/python/vocab/__pycache__/pricingunits.cpython-312.pyc deleted file mode 100644 index d72d0b8a87e0d724de9a5a4e4532c9f212560e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1029 zcmZ8fy>Ht_6hDfjNRj%o{DBnCz%E4v)X`KR2!aBvLdSwF#U-hsw-_|<$!08(${l6E zMh6WY3UujEAo&-H4*5g6coaAl=s%#sodOi-J1S|45{KV=@Atls_gkZ35&T+@zkK<( zO2{A5`0%ygEB8O3@|rM02~()TDzw5>sxpmgOs6`l(ke5k!Axqh8m%#lTFj<4tJ6Ab z&<1PLCTr0a5Ky23DrlfX6$~(;1{T;*hXypEHEGj!g}@fHe^oY}X@|98n{C0)L}Q)r zHM)DV-Q6jS3FPr5h{BBG7=%ErnrBy#ib9X0=@i90x#q_UOrG4TL56-LC&^-`V?j+WtKfWYpa&j6*N%A9+Dxy8XTv z1gKTR7suWxDD=L2a)RR2eU7XVc>NcnXQ&JZqj4x19~oaVLFjw#5HknEGFA^fHw=o- zcr*xuv!Od0AG-Z;jN2Dh|H$>x@O-TN^|!K)J_tQb)`M@(j)#ScO^e!uXSeu_Am`gS zXrbaGDYWw}o0dEMLiirid`J4sr?ZSLrtlU20!?|X;w{2jRTO32B=*kISlPQvb5+|~ zR##?gsc*pAM#ul)W5{mzj&xRyPnOnyQe^VlBzk?N;jva)tvvQh`}b_fy_MGd;H|Ac j-7+dm_0P{p>%klK$8>40s}<$pPr;g?coY65MY+&F-exY8 diff --git a/gen/ts/comp/v1/comp_pb.ts b/gen/ts/comp/v1/comp_pb.ts deleted file mode 100644 index 68eb2f9e..00000000 --- a/gen/ts/comp/v1/comp_pb.ts +++ /dev/null @@ -1,1218 +0,0 @@ -// CoMP v1.0 — IAB Tech Lab Content Monetization Protocol -// -// 1:1 mapping from the official CoMP WG specification. -// Source: https://github.com/IABTechLab/CoMP/blob/dev/CoMP-1.0.md -// -// Enum alignment: proto3 enum values map directly to CoMP integer values -// (first real CoMP value = 0). No UNSPECIFIED sentinels — proto3 default -// zero is a valid CoMP value, not a sentinel. -// -// This file preserves CoMP field names, enum values, and semantics exactly. -// RAMP extensions live in ramp/v1/ramp.proto, never here. - -// @generated by protoc-gen-es v2.12.0 with parameter "target=ts" -// @generated from file comp/v1/comp.proto (package comp.v1, syntax proto3) -/* eslint-disable */ - -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; -import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; -import { file_google_protobuf_struct } from "@bufbuild/protobuf/wkt"; -import type { JsonObject, Message } from "@bufbuild/protobuf"; - -/** - * Describes the file comp/v1/comp.proto. - */ -export const file_comp_v1_comp: GenFile = /*@__PURE__*/ - fileDesc("ChJjb21wL3YxL2NvbXAucHJvdG8SB2NvbXAudjEilgEKCEFJU3lzdGVtEgwKBG5hbWUYASABKAkSDwoCdWEYAiABKAlIAIgBARIPCgJpZBgDIAEoCUgBiAEBEiYKCGFpc3lzdXNlGAQgASgLMhQuY29tcC52MS5BSVN5c3RlbVVzZRIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0QgUKA191YUIFCgNfaWQijgIKC0FJU3lzdGVtVXNlEgsKA2xpZBgBIAEoCRIjCgZhaWF1dGgYAiABKA4yEy5jb21wLnYxLkF1dGhNZXRob2QSCwoDdXJpGAMgAygJEiYKBXNjb3BlGAQgASgOMhIuY29tcC52MS5TY29wZVR5cGVIAIgBARIjCghmdW5jdGlvbhgFIAMoDjIRLmNvbXAudjEuRnVuY3Rpb24SIwoFc3ViZm4YBiADKA4yFC5jb21wLnYxLlN1YkZ1bmN0aW9uEhMKBnJlc2RpcxgHIAEoBUgBiAEBEiQKA2V4dBgPIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RCCAoGX3Njb3BlQgkKB19yZXNkaXMi9AIKB1BhY2thZ2USCgoCaWQYASABKAkSEgoFdGl0bGUYAiABKAlIAIgBARITCgZzZWxsZXIYAyABKAlIAYgBARIVCghwYWNrYWdlchgEIAEoCUgCiAEBEhcKCmxpY2Vuc2V1cmwYBSABKAlIA4gBARIVCghjaXRhdGlvbhgGIAEoBUgEiAEBEiIKBXNjb3BlGAcgASgLMg4uY29tcC52MS5TY29wZUgFiAEBEioKCXJldHJpZXZhbBgIIAEoCzISLmNvbXAudjEuUmV0cmlldmFsSAaIAQESIQoHbGljZW5zZRgJIAMoCzIQLmNvbXAudjEuTGljZW5zZRIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0QggKBl90aXRsZUIJCgdfc2VsbGVyQgsKCV9wYWNrYWdlckINCgtfbGljZW5zZXVybEILCglfY2l0YXRpb25CCAoGX3Njb3BlQgwKCl9yZXRyaWV2YWwi0gIKB0xpY2Vuc2USDwoCaWQYASABKAlIAIgBARIRCgR0dXJsGAIgASgJSAGIAQESIAoDdXNlGAMgAygOMhMuY29tcC52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CwoDZHVyGAIgAygFEhEKCXdvcmRjb3VudBgDIAMoBRIXCgp0cmFuc2NyaXB0GAQgASgFSACIAQESFAoHcHViZGF0ZRgFIAEoCUgBiAEBEhYKCXB1Ymxpc2hlZBgGIAEoBUgCiAEBEhMKBnVwZGF0ZRgHIAEoCUgDiAEBEg4KBmF1dGhvchgIIAMoCRIXCgpzb3VyY2V0eXBlGAkgASgFSASIAQESFwoKcHJvdmVuYW5jZRgKIAEoBUgFiAEBEhQKB3Byb3ZlbnQYCyABKAlIBogBARIRCgRjMnBhGAwgASgJSAeIAQESJAoDZXh0GA8gASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEINCgtfdHJhbnNjcmlwdEIKCghfcHViZGF0ZUIMCgpfcHVibGlzaGVkQgkKB191cGRhdGVCDQoLX3NvdXJjZXR5cGVCDQoLX3Byb3ZlbmFuY2VCCgoIX3Byb3ZlbnRCBwoFX2MycGEi0QEKCVJldHJpZXZhbBIpCgRhdXRoGAEgASgOMhYuY29tcC52MS5SZXRyaWV2YWxBdXRoSACIAQESFQoIZW5kcG9pbnQYAiABKAlIAYgBARIkCgR0eXBlGAMgAygOMhYuY29tcC52MS5SZXRyaWV2YWxUeXBlEhQKB3JhdGVsbXQYBCABKAVIAogBARIkCgNleHQYDyABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0QgcKBV9hdXRoQgsKCV9lbmRwb2ludEIKCghfcmF0ZWxtdCqcAQoKQXV0aE1ldGhvZBIaChZBVVRIX01FVEhPRF9VU0VSX0FHRU5UEAASEgoOQVVUSF9NRVRIT0RfSVAQARIVChFBVVRIX01FVEhPRF9UT0tFThACEhYKEkFVVEhfTUVUSE9EX1dFQkJPVBADEhgKFEFVVEhfTUVUSE9EX0FHRU5UX0lEEAQSFQoRQVVUSF9NRVRIT0RfT1RIRVIQBSq0AQoJU2NvcGVUeXBlEhoKFlNDT1BFX1RZUEVfRlVMTF9DT1JQVVMQABIWChJTQ09QRV9UWVBFX1NFQ1RJT04QARIZChVTQ09QRV9UWVBFX0RBVEVfUkFOR0UQAhIUChBTQ09QRV9UWVBFX0dFTlJFEAMSFAoQU0NPUEVfVFlQRV9UT1BJQxAEEhYKElNDT1BFX1RZUEVfQ1VSQVRFRBAFEhQKEFNDT1BFX1RZUEVfT1RIRVIQBiqLAQoIRnVuY3Rpb24SEAoMRlVOQ1RJT05fQUxMEAASEwoPRlVOQ1RJT05fQUlfQUxMEAESFQoRRlVOQ1RJT05fQUlfVFJBSU4QAhIVChFGVU5DVElPTl9BSV9JTlBVVBADEhUKEUZVTkNUSU9OX0FJX0lOREVYEAQSEwoPRlVOQ1RJT05fU0VBUkNIEAUqrwEKC1N1YkZ1bmN0aW9uEhkKFVNVQl9GVU5DVElPTl9UUkFJTklORxAAEhQKEFNVQl9GVU5DVElPTl9SQUcQARIaChZTVUJfRlVOQ1RJT05fR1JPVU5ESU5HEAISGwoXU1VCX0ZVTkNUSU9OX0FHRU5UX1ZJRVcQAxIeChpTVUJfRlVOQ1RJT05fQUdFTlRfQUNUSU9OUxAEEhYKElNVQl9GVU5DVElPTl9PVEhFUhAFKoMCCgpMaWNlbnNlVXNlEiAKHExJQ0VOU0VfVVNFX1RSQUlOSU5HX0RJU1BMQVkQABIoCiRMSUNFTlNFX1VTRV9SQUdfRElTUExBWV9VTlJFU1RSSUNURUQQARIlCiFMSUNFTlNFX1VTRV9SQUdfRElTUExBWV9NQVhfV09SRFMQAhInCiNMSUNFTlNFX1VTRV9SQUdfRElTUExBWV9BVFRSSUJVVElPThADEh4KGkxJQ0VOU0VfVVNFX1JBR19OT19ESVNQTEFZEAQSGgoWTElDRU5TRV9VU0VfQUdFTlRfVklFVxAFEh0KGUxJQ0VOU0VfVVNFX0FHRU5UX0FDVElPTlMQBiqaAQoLQ29udGVudFR5cGUSFQoRQ09OVEVOVF9UWVBFX1RFWFQQABIWChJDT05URU5UX1RZUEVfVklERU8QARIWChJDT05URU5UX1RZUEVfSU1BR0UQAhIWChJDT05URU5UX1RZUEVfQVVESU8QAxIUChBDT05URU5UX1RZUEVfQUxMEAQSFgoSQ09OVEVOVF9UWVBFX09USEVSEAUqdwoNUmV0cmlldmFsQXV0aBIXChNSRVRSSUVWQUxfQVVUSF9OT05FEAASGgoWUkVUUklFVkFMX0FVVEhfQVBJX0tFWRABEhkKFVJFVFJJRVZBTF9BVVRIX09BVVRIMhACEhYKElJFVFJJRVZBTF9BVVRIX1NTTBADKtcBCg1SZXRyaWV2YWxUeXBlEhcKE1JFVFJJRVZBTF9UWVBFX0hUTUwQABIWChJSRVRSSUVWQUxfVFlQRV9SU1MQARIWChJSRVRSSUVWQUxfVFlQRV9BUEkQAhIWChJSRVRSSUVWQUxfVFlQRV9NQ1AQAxIYChRSRVRSSUVWQUxfVFlQRV9OTFdFQhAEEhYKElJFVFJJRVZBTF9UWVBFX1hNTBAFEhkKFVJFVFJJRVZBTF9UWVBFX05FV1NNTBAGEhgKFFJFVFJJRVZBTF9UWVBFX09USEVSEAdCjgEKC2NvbS5jb21wLnYxQglDb21wUHJvdG9QAVo3Z2l0aHViLmNvbS9SQU1QLVByb3RvY29sL3Byb3RvY29sL2dlbi9nby9jb21wL3YxO2NvbXB2MaICA0NYWKoCB0NvbXAuVjHKAgdDb21wXFYx4gITQ29tcFxWMVxHUEJNZXRhZGF0YeoCCENvbXA6OlYxYgZwcm90bzM", [file_google_protobuf_struct]); - -/** - * AISystem — Information about the AI System making the request. - * CoMP §aisystem.json - * - * @generated from message comp.v1.AISystem - */ -export type AISystem = Message<"comp.v1.AISystem"> & { - /** - * Canonical domain of the AI System requesting access. - * - * @generated from field: string name = 1; - */ - name: string; - - /** - * User agent of the AI System. - * - * @generated from field: optional string ua = 2; - */ - ua?: string | undefined; - - /** - * ID of the AI system, as registered by Tech Lab Agent Registry. - * - * @generated from field: optional string id = 3; - */ - id?: string | undefined; - - /** - * How the AI system will use the content. - * - * @generated from field: comp.v1.AISystemUse aisysuse = 4; - */ - aisysuse?: AISystemUse | undefined; - - /** - * Implementer-specific extensions. - * - * @generated from field: google.protobuf.Struct ext = 15; - */ - ext?: JsonObject | undefined; -}; - -/** - * Describes the message comp.v1.AISystem. - * Use `create(AISystemSchema)` to create a new message. - */ -export const AISystemSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_comp_v1_comp, 0); - -/** - * AISystemUse — Intended use of the requested content. - * CoMP §aisystemuse.json - * - * @generated from message comp.v1.AISystemUse - */ -export type AISystemUse = Message<"comp.v1.AISystemUse"> & { - /** - * License ID — public agent identifier in CoMP. NOT a credential. - * In RAMP this maps to Requester.billing_ref (a billing handle, not an - * entitlement). Request authentication is an RFC 9421 HTTP Message Signature; - * the agent's key is resolved by its domain, never by this id. - * - * @generated from field: string lid = 1; - */ - lid: string; - - /** - * How the AI system authenticates itself. - * - * @generated from field: comp.v1.AuthMethod aiauth = 2; - */ - aiauth: AuthMethod; - - /** - * URI(s) that the AI System is requesting to crawl. - * - * @generated from field: repeated string uri = 3; - */ - uri: string[]; - - /** - * General information about the content scope requested. - * - * @generated from field: optional comp.v1.ScopeType scope = 4; - */ - scope?: ScopeType | undefined; - - /** - * Function(s) the AI System will use the content for. - * - * @generated from field: repeated comp.v1.Function function = 5; - */ - function: Function[]; - - /** - * Sub-function(s) for content use. - * - * @generated from field: repeated comp.v1.SubFunction subfn = 6; - */ - subfn: SubFunction[]; - - /** - * Whether results will be displayed to a human user. 0=no, 1=yes. - * - * @generated from field: optional int32 resdis = 7; - */ - resdis?: number | undefined; - - /** - * @generated from field: google.protobuf.Struct ext = 15; - */ - ext?: JsonObject | undefined; -}; - -/** - * Describes the message comp.v1.AISystemUse. - * Use `create(AISystemUseSchema)` to create a new message. - */ -export const AISystemUseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_comp_v1_comp, 1); - -/** - * Package — A package of content inventory. - * CoMP §package.json - * - * @generated from message comp.v1.Package - */ -export type Package = Message<"comp.v1.Package"> & { - /** - * Unique package identifier defined by the Content Owner or Exchange. - * - * @generated from field: string id = 1; - */ - id: string; - - /** - * Title of the package. - * - * @generated from field: optional string title = 2; - */ - title?: string | undefined; - - /** - * Canonical domain of the business entity offering the content. - * - * @generated from field: optional string seller = 3; - */ - seller?: string | undefined; - - /** - * Canonical domain of the packager, if different than the seller. - * - * @generated from field: optional string packager = 4; - */ - packager?: string | undefined; - - /** - * URL for the license terms. - * - * @generated from field: optional string licenseurl = 5; - */ - licenseurl?: string | undefined; - - /** - * Whether citation of the Content Owner is required. 0=no, 1=yes. - * - * @generated from field: optional int32 citation = 6; - */ - citation?: number | undefined; - - /** - * Scope of content in this package. - * - * @generated from field: optional comp.v1.Scope scope = 7; - */ - scope?: Scope | undefined; - - /** - * How to retrieve the content. - * - * @generated from field: optional comp.v1.Retrieval retrieval = 8; - */ - retrieval?: Retrieval | undefined; - - /** - * Licensing terms for this package. - * - * @generated from field: repeated comp.v1.License license = 9; - */ - license: License[]; - - /** - * @generated from field: google.protobuf.Struct ext = 15; - */ - ext?: JsonObject | undefined; -}; - -/** - * Describes the message comp.v1.Package. - * Use `create(PackageSchema)` to create a new message. - */ -export const PackageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_comp_v1_comp, 2); - -/** - * License — Licensing terms for a content package. - * CoMP §license.json - * - * @generated from message comp.v1.License - */ -export type License = Message<"comp.v1.License"> & { - /** - * @generated from field: optional string id = 1; - */ - id?: string | undefined; - - /** - * @generated from field: optional string turl = 2; - */ - turl?: string | undefined; - - /** - * @generated from field: repeated comp.v1.LicenseUse use = 3; - */ - use: LicenseUse[]; - - /** - * @generated from field: repeated string country = 4; - */ - country: string[]; - - /** - * @generated from field: optional int32 maxword = 5; - */ - maxword?: number | undefined; - - /** - * 0=required, 1=not required - * - * @generated from field: optional int32 citation = 6; - */ - citation?: number | undefined; - - /** - * @generated from field: optional double price = 7; - */ - price?: number | undefined; - - /** - * @generated from field: optional double revshare = 8; - */ - revshare?: number | undefined; - - /** - * @generated from field: optional string cur = 9; - */ - cur?: string | undefined; - - /** - * @generated from field: optional int32 dur = 10; - */ - dur?: number | undefined; - - /** - * @generated from field: google.protobuf.Struct ext = 15; - */ - ext?: JsonObject | undefined; -}; - -/** - * Describes the message comp.v1.License. - * Use `create(LicenseSchema)` to create a new message. - */ -export const LicenseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_comp_v1_comp, 3); - -/** - * Scope — What content is included in the package. - * CoMP §scope.json - * - * @generated from message comp.v1.Scope - */ -export type Scope = Message<"comp.v1.Scope"> & { - /** - * @generated from field: optional comp.v1.ScopeType scope = 1; - */ - scope?: ScopeType | undefined; - - /** - * Upper limit on crawl. 0=unlimited, 1=has maximum. - * - * @generated from field: optional int32 max = 2; - */ - max?: number | undefined; - - /** - * Content type(s) included. - * - * @generated from field: repeated comp.v1.ContentType ctype = 3; - */ - ctype: ContentType[]; - - /** - * Text assets. - * - * @generated from field: repeated comp.v1.Text text = 4; - */ - text: Text[]; - - /** - * Video assets. - * - * @generated from field: repeated comp.v1.Video video = 5; - */ - video: Video[]; - - /** - * Image assets. - * - * @generated from field: repeated comp.v1.Image image = 6; - */ - image: Image[]; - - /** - * Audio assets. - * - * @generated from field: repeated comp.v1.Audio audio = 7; - */ - audio: Audio[]; - - /** - * @generated from field: google.protobuf.Struct ext = 15; - */ - ext?: JsonObject | undefined; -}; - -/** - * Describes the message comp.v1.Scope. - * Use `create(ScopeSchema)` to create a new message. - */ -export const ScopeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_comp_v1_comp, 4); - -/** - * Text — A text-based asset. - * CoMP §text.json - * - * @generated from message comp.v1.Text - */ -export type Text = Message<"comp.v1.Text"> & { - /** - * @generated from field: optional string title = 1; - */ - title?: string | undefined; - - /** - * Word count(s) of main body. - * - * @generated from field: repeated int32 wordcount = 2; - */ - wordcount: number[]; - - /** - * Original publication date (ISO 8601). - * - * @generated from field: optional string pubdate = 3; - */ - pubdate?: string | undefined; - - /** - * Publication status. 0=not specified, 1=published, 2=unpublished/archival. - * - * @generated from field: optional int32 published = 4; - */ - published?: number | undefined; - - /** - * Most recent substantive update (ISO 8601). - * - * @generated from field: optional string update = 5; - */ - update?: string | undefined; - - /** - * Author name(s). - * - * @generated from field: repeated string author = 6; - */ - author: string[]; - - /** - * Source of creation. 0=human, 1=ai, 2=hybrid. - * - * @generated from field: optional int32 sourcetype = 7; - */ - sourcetype?: number | undefined; - - /** - * Provenance available. 0=no, 1=yes. - * - * @generated from field: optional int32 provenance = 8; - */ - provenance?: number | undefined; - - /** - * Canonical domain of the provenance entity (e.g. c2pa.org). - * - * @generated from field: optional string provent = 9; - */ - provent?: string | undefined; - - /** - * Authority score (0.0–1.0). Publisher/verifier-assessed domain authority. - * - * @generated from field: optional double authority = 10; - */ - authority?: number | undefined; - - /** - * Originality score (0.0–1.0). Degree of original vs. syndicated content. - * - * @generated from field: optional double originality = 11; - */ - originality?: number | undefined; - - /** - * @generated from field: google.protobuf.Struct ext = 15; - */ - ext?: JsonObject | undefined; -}; - -/** - * Describes the message comp.v1.Text. - * Use `create(TextSchema)` to create a new message. - */ -export const TextSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_comp_v1_comp, 5); - -/** - * Video — A video asset. - * CoMP §video.json - * - * @generated from message comp.v1.Video - */ -export type Video = Message<"comp.v1.Video"> & { - /** - * @generated from field: repeated string title = 1; - */ - title: string[]; - - /** - * Duration in seconds. - * - * @generated from field: repeated int32 dur = 2; - */ - dur: number[]; - - /** - * 0=full, 1=clip. - * - * @generated from field: optional int32 clip = 3; - */ - clip?: number | undefined; - - /** - * @generated from field: repeated int32 wordcount = 4; - */ - wordcount: number[]; - - /** - * 0=no, 1=yes. - * - * @generated from field: optional int32 transcript = 5; - */ - transcript?: number | undefined; - - /** - * @generated from field: optional string pubdate = 6; - */ - pubdate?: string | undefined; - - /** - * @generated from field: optional int32 published = 7; - */ - published?: number | undefined; - - /** - * @generated from field: optional string update = 8; - */ - update?: string | undefined; - - /** - * @generated from field: repeated string author = 9; - */ - author: string[]; - - /** - * @generated from field: optional int32 sourcetype = 10; - */ - sourcetype?: number | undefined; - - /** - * @generated from field: optional int32 provenance = 11; - */ - provenance?: number | undefined; - - /** - * @generated from field: optional string provent = 12; - */ - provent?: string | undefined; - - /** - * C2PA content credentials manifest URI. - * - * @generated from field: optional string c2pa = 13; - */ - c2pa?: string | undefined; - - /** - * @generated from field: google.protobuf.Struct ext = 15; - */ - ext?: JsonObject | undefined; -}; - -/** - * Describes the message comp.v1.Video. - * Use `create(VideoSchema)` to create a new message. - */ -export const VideoSchema: GenMessage

```typescript -// Import from the poc/agent-sdk/ directory (npm package not yet published) -import { RampClient } from "./poc/agent-sdk/client"; +// npm package not yet published — illustrative +import { RampClient } from "@ramp-protocol/agent-sdk"; const client = new RampClient({ billingRef: "ACCT-BUYER-001", @@ -132,11 +132,11 @@ await client.close(); ### Python ```python -# Reference: poc/mcp-tool/server.py (PyPI package not yet published) +# PyPI package not yet published — illustrative from ramp_sdk import RampClient, Budget client = RampClient( @@ -424,8 +424,8 @@ The concrete implementations differ in persistence strategy (in-memory vs Redis) | Language | Source | Status | Dependencies | |---|---|---|---| | Go | [`gen/go/`](https://github.com/RAMP-Protocol/protocol/tree/main/gen/go/) (types) + [`gen/go/ramp/v1/rampv1connect`](https://github.com/RAMP-Protocol/protocol/tree/main/gen/go/ramp/v1/rampv1connect) (Connect client) | Generated, usable via Go modules | `connectrpc.com/connect` + `google.golang.org/protobuf` + stdlib | -| TypeScript | [`poc/agent-sdk/client.ts`](https://github.com/RAMP-Protocol/protocol/tree/main/poc/agent-sdk/client.ts) | Working PoC (npm package planned) | `@connectrpc/connect` + `@bufbuild/protobuf` | -| Python | [`poc/mcp-tool/server.py`](https://github.com/RAMP-Protocol/protocol/tree/main/poc/mcp-tool/server.py) | Working PoC (PyPI package planned) | `httpx` + `fastmcp` | +| TypeScript | — | Planned (npm package not yet published) | `@connectrpc/connect` + `@bufbuild/protobuf` | +| Python | — | Planned (PyPI package not yet published) | `httpx` + `fastmcp` | ### What Is Language-Specific vs Shared diff --git a/website/src/content/docs/components/edge-function/deployment.mdx b/website/src/content/docs/components/edge-function/deployment.mdx index 693c3c78..be64c4ce 100644 --- a/website/src/content/docs/components/edge-function/deployment.mdx +++ b/website/src/content/docs/components/edge-function/deployment.mdx @@ -54,7 +54,7 @@ The edge function is distributed in multiple formats to match provider deploymen ### Format 1: CloudFront Function (Reference Implementation) -The working reference implementation is a vanilla JavaScript CloudFront Function at [`poc/edge-function/cloudfront-function.js`](https://github.com/RAMP-Protocol/protocol/tree/main/poc/edge-function/cloudfront-function.js). It handles bot detection, signed URL verification, and `ramp.json` serving. +The reference implementation is a vanilla JavaScript CloudFront Function that handles bot detection, signed URL verification, and `ramp.json` serving.