offering-protocol 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. offering_protocol/__init__.py +7 -0
  2. offering_protocol/agent/__init__.py +66 -0
  3. offering_protocol/agent/agent.py +135 -0
  4. offering_protocol/agent/cache.py +51 -0
  5. offering_protocol/agent/capabilities.py +262 -0
  6. offering_protocol/agent/client.py +667 -0
  7. offering_protocol/agent/details.py +227 -0
  8. offering_protocol/agent/schema.py +129 -0
  9. offering_protocol/core/__init__.py +64 -0
  10. offering_protocol/core/models.py +475 -0
  11. offering_protocol/core/references.py +135 -0
  12. offering_protocol/core/schemas/action-relation.schema.json +9 -0
  13. offering_protocol/core/schemas/action-request.schema.json +18 -0
  14. offering_protocol/core/schemas/action.schema.json +56 -0
  15. offering_protocol/core/schemas/attribute-schema-reference.schema.json +6 -0
  16. offering_protocol/core/schemas/authentication-requirement.schema.json +11 -0
  17. offering_protocol/core/schemas/capability-identifier.schema.json +9 -0
  18. offering_protocol/core/schemas/capability-link.schema.json +14 -0
  19. offering_protocol/core/schemas/collection-search-request.schema.json +45 -0
  20. offering_protocol/core/schemas/collection.schema.json +72 -0
  21. offering_protocol/core/schemas/detail-fields.schema.json +16 -0
  22. offering_protocol/core/schemas/enrollment-protocol.schema.json +15 -0
  23. offering_protocol/core/schemas/filter-capability-source.schema.json +41 -0
  24. offering_protocol/core/schemas/filter-definition-page.schema.json +25 -0
  25. offering_protocol/core/schemas/filter-definition.schema.json +63 -0
  26. offering_protocol/core/schemas/filter-expression.schema.json +45 -0
  27. offering_protocol/core/schemas/filter-operator.schema.json +14 -0
  28. offering_protocol/core/schemas/filter-type.schema.json +14 -0
  29. offering_protocol/core/schemas/filter-unit.schema.json +45 -0
  30. offering_protocol/core/schemas/http-action-target.schema.json +36 -0
  31. offering_protocol/core/schemas/invalid-parameter.schema.json +55 -0
  32. offering_protocol/core/schemas/local-resource-identifier-list.schema.json +10 -0
  33. offering_protocol/core/schemas/local-resource-identifier.schema.json +10 -0
  34. offering_protocol/core/schemas/mcp-endpoint.schema.json +29 -0
  35. offering_protocol/core/schemas/offering-search-request.schema.json +68 -0
  36. offering_protocol/core/schemas/offering-search-response.schema.json +20 -0
  37. offering_protocol/core/schemas/offering.schema.json +92 -0
  38. offering_protocol/core/schemas/openapi-action-target.schema.json +20 -0
  39. offering_protocol/core/schemas/operation-descriptor.schema.json +27 -0
  40. offering_protocol/core/schemas/page-envelope.schema.json +25 -0
  41. offering_protocol/core/schemas/page-limit.schema.json +8 -0
  42. offering_protocol/core/schemas/payment-option.schema.json +24 -0
  43. offering_protocol/core/schemas/payment-protocol.schema.json +34 -0
  44. offering_protocol/core/schemas/price-preview.schema.json +133 -0
  45. offering_protocol/core/schemas/problem-code.schema.json +9 -0
  46. offering_protocol/core/schemas/problem-details.schema.json +66 -0
  47. offering_protocol/core/schemas/protocol-version.schema.json +8 -0
  48. offering_protocol/core/schemas/refinement-bucket.schema.json +28 -0
  49. offering_protocol/core/schemas/refinement-group.schema.json +24 -0
  50. offering_protocol/core/schemas/representation.schema.json +11 -0
  51. offering_protocol/core/schemas/resource-identity.schema.json +27 -0
  52. offering_protocol/core/schemas/resource-image.schema.json +40 -0
  53. offering_protocol/core/schemas/resource-reference.schema.json +19 -0
  54. offering_protocol/core/schemas/schema-reference.schema.json +15 -0
  55. offering_protocol/core/schemas/search-capabilities.schema.json +26 -0
  56. offering_protocol/core/schemas/service-branding-image.schema.json +23 -0
  57. offering_protocol/core/schemas/service-branding.schema.json +19 -0
  58. offering_protocol/core/schemas/service-document.schema.json +337 -0
  59. offering_protocol/core/schemas/service-openapi.schema.json +15 -0
  60. offering_protocol/core/schemas/service-origin.schema.json +9 -0
  61. offering_protocol/core/schemas/service-protocols.schema.json +101 -0
  62. offering_protocol/core/schemas/sort-capability-source.schema.json +41 -0
  63. offering_protocol/core/schemas/sort-definition-page.schema.json +25 -0
  64. offering_protocol/core/schemas/sort-definition.schema.json +35 -0
  65. offering_protocol/core/schemas/sort-key.schema.json +28 -0
  66. offering_protocol/core/schemas/top-level-document.schema.json +16 -0
  67. offering_protocol/core/schemas/trust-protocol.schema.json +15 -0
  68. offering_protocol/core/validation.py +390 -0
  69. offering_protocol/directory/__init__.py +51 -0
  70. offering_protocol/directory/client.py +206 -0
  71. offering_protocol/directory/models.py +103 -0
  72. offering_protocol/directory/transport.py +145 -0
  73. offering_protocol/py.typed +1 -0
  74. offering_protocol/service/__init__.py +32 -0
  75. offering_protocol/service/service.py +444 -0
  76. offering_protocol/service/static_catalog.py +258 -0
  77. offering_protocol-0.1.0.dist-info/METADATA +362 -0
  78. offering_protocol-0.1.0.dist-info/RECORD +80 -0
  79. offering_protocol-0.1.0.dist-info/WHEEL +4 -0
  80. offering_protocol-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,92 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/offering.schema.json",
4
+ "title": "ODP Full Offering Representation",
5
+ "type": "object",
6
+ "required": [
7
+ "odp_version",
8
+ "id",
9
+ "name"
10
+ ],
11
+ "properties": {
12
+ "auth_expands": {
13
+ "const": true
14
+ },
15
+ "odp_version": {
16
+ "const": "1.0"
17
+ },
18
+ "id": {
19
+ "$ref": "local-resource-identifier.schema.json"
20
+ },
21
+ "name": {
22
+ "type": "string",
23
+ "minLength": 1,
24
+ "maxLength": 128
25
+ },
26
+ "description": {
27
+ "type": "string",
28
+ "minLength": 1,
29
+ "maxLength": 1024
30
+ },
31
+ "images": {
32
+ "type": "array",
33
+ "minItems": 1,
34
+ "maxItems": 16,
35
+ "items": {
36
+ "$ref": "resource-image.schema.json"
37
+ }
38
+ },
39
+ "language": {
40
+ "type": "string",
41
+ "minLength": 2,
42
+ "maxLength": 35
43
+ },
44
+ "localizations": {
45
+ "type": "array",
46
+ "minItems": 1,
47
+ "maxItems": 16,
48
+ "uniqueItems": true,
49
+ "items": {
50
+ "type": "string",
51
+ "minLength": 2,
52
+ "maxLength": 35
53
+ }
54
+ },
55
+ "web_url": {
56
+ "$ref": "resource-reference.schema.json"
57
+ },
58
+ "collection_ids": {
59
+ "allOf": [
60
+ {
61
+ "$ref": "local-resource-identifier-list.schema.json"
62
+ },
63
+ {
64
+ "minItems": 1
65
+ }
66
+ ]
67
+ },
68
+ "price": {
69
+ "$ref": "price-preview.schema.json"
70
+ },
71
+ "schema": {
72
+ "$ref": "attribute-schema-reference.schema.json"
73
+ },
74
+ "attributes": {
75
+ "type": "object",
76
+ "minProperties": 1
77
+ },
78
+ "actions": {
79
+ "type": "array",
80
+ "minItems": 1,
81
+ "maxItems": 16,
82
+ "items": {
83
+ "$ref": "action.schema.json"
84
+ }
85
+ }
86
+ },
87
+ "dependentRequired": {
88
+ "attributes": [
89
+ "schema"
90
+ ]
91
+ }
92
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/openapi-action-target.schema.json",
4
+ "title": "ODP OpenAPI Action target",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "operation_id"
9
+ ],
10
+ "properties": {
11
+ "url": {
12
+ "$ref": "resource-reference.schema.json"
13
+ },
14
+ "operation_id": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "maxLength": 128
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/operation-descriptor.schema.json",
4
+ "title": "ODP Operation Descriptor",
5
+ "type": "object",
6
+ "required": [
7
+ "authentication",
8
+ "name"
9
+ ],
10
+ "properties": {
11
+ "authentication": {
12
+ "$ref": "authentication-requirement.schema.json"
13
+ },
14
+ "name": {
15
+ "enum": [
16
+ "get-collection",
17
+ "get-offering",
18
+ "list-collection-offerings",
19
+ "list-collections",
20
+ "list-offerings",
21
+ "search-collections",
22
+ "search-offerings"
23
+ ]
24
+ }
25
+ },
26
+ "additionalProperties": false
27
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/page-envelope.schema.json",
4
+ "title": "ODP page envelope",
5
+ "type": "object",
6
+ "required": [
7
+ "odp_version",
8
+ "items"
9
+ ],
10
+ "properties": {
11
+ "auth_expands": {
12
+ "const": true
13
+ },
14
+ "odp_version": {
15
+ "const": "1.0"
16
+ },
17
+ "items": {
18
+ "type": "array",
19
+ "maxItems": 100
20
+ },
21
+ "next": {
22
+ "$ref": "resource-reference.schema.json"
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/page-limit.schema.json",
4
+ "title": "ODP requested page limit",
5
+ "type": "integer",
6
+ "minimum": 1,
7
+ "maximum": 100
8
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/payment-option.schema.json",
4
+ "title": "ODP Payment Option",
5
+ "type": "string",
6
+ "enum": [
7
+ "algorand",
8
+ "aptos",
9
+ "arbitrum",
10
+ "avalanche",
11
+ "base",
12
+ "card",
13
+ "ethereum",
14
+ "hedera",
15
+ "inflow",
16
+ "lightning",
17
+ "polygon",
18
+ "solana",
19
+ "stellar",
20
+ "stripe",
21
+ "tempo",
22
+ "ton"
23
+ ]
24
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/payment-protocol.schema.json",
4
+ "title": "ODP Payment Protocol Descriptor",
5
+ "type": "object",
6
+ "required": [
7
+ "authentication",
8
+ "name"
9
+ ],
10
+ "properties": {
11
+ "authentication": {
12
+ "enum": [
13
+ "not-required",
14
+ "required"
15
+ ]
16
+ },
17
+ "name": {
18
+ "enum": [
19
+ "mpp",
20
+ "x402"
21
+ ]
22
+ },
23
+ "options": {
24
+ "type": "array",
25
+ "minItems": 1,
26
+ "maxItems": 16,
27
+ "uniqueItems": true,
28
+ "items": {
29
+ "$ref": "payment-option.schema.json"
30
+ }
31
+ }
32
+ },
33
+ "additionalProperties": false
34
+ }
@@ -0,0 +1,133 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/price-preview.schema.json",
4
+ "title": "ODP Price Preview",
5
+ "$defs": {
6
+ "decimal": {
7
+ "type": "string",
8
+ "pattern": "^(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?$"
9
+ },
10
+ "currency": {
11
+ "type": "string",
12
+ "minLength": 1,
13
+ "maxLength": 64
14
+ }
15
+ },
16
+ "oneOf": [
17
+ {
18
+ "type": "object",
19
+ "required": [
20
+ "type"
21
+ ],
22
+ "properties": {
23
+ "type": {
24
+ "const": "free"
25
+ }
26
+ }
27
+ },
28
+ {
29
+ "type": "object",
30
+ "required": [
31
+ "type",
32
+ "amount",
33
+ "currency"
34
+ ],
35
+ "properties": {
36
+ "type": {
37
+ "enum": [
38
+ "fixed",
39
+ "starting_at"
40
+ ]
41
+ },
42
+ "amount": {
43
+ "$ref": "#/$defs/decimal"
44
+ },
45
+ "currency": {
46
+ "$ref": "#/$defs/currency"
47
+ }
48
+ }
49
+ },
50
+ {
51
+ "type": "object",
52
+ "required": [
53
+ "type",
54
+ "minimum",
55
+ "maximum",
56
+ "currency"
57
+ ],
58
+ "properties": {
59
+ "type": {
60
+ "const": "range"
61
+ },
62
+ "minimum": {
63
+ "$ref": "#/$defs/decimal"
64
+ },
65
+ "maximum": {
66
+ "$ref": "#/$defs/decimal"
67
+ },
68
+ "currency": {
69
+ "$ref": "#/$defs/currency"
70
+ }
71
+ }
72
+ },
73
+ {
74
+ "type": "object",
75
+ "required": [
76
+ "type",
77
+ "amount",
78
+ "currency",
79
+ "unit"
80
+ ],
81
+ "properties": {
82
+ "type": {
83
+ "const": "metered"
84
+ },
85
+ "amount": {
86
+ "$ref": "#/$defs/decimal"
87
+ },
88
+ "currency": {
89
+ "$ref": "#/$defs/currency"
90
+ },
91
+ "unit": {
92
+ "type": "string",
93
+ "minLength": 1,
94
+ "maxLength": 128
95
+ }
96
+ }
97
+ },
98
+ {
99
+ "type": "object",
100
+ "required": [
101
+ "type"
102
+ ],
103
+ "properties": {
104
+ "type": {
105
+ "const": "quote"
106
+ }
107
+ }
108
+ },
109
+ {
110
+ "type": "object",
111
+ "required": [
112
+ "type"
113
+ ],
114
+ "properties": {
115
+ "type": {
116
+ "type": "string",
117
+ "minLength": 1,
118
+ "maxLength": 64,
119
+ "not": {
120
+ "enum": [
121
+ "free",
122
+ "fixed",
123
+ "range",
124
+ "starting_at",
125
+ "metered",
126
+ "quote"
127
+ ]
128
+ }
129
+ }
130
+ }
131
+ }
132
+ ]
133
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/problem-code.schema.json",
4
+ "title": "ODP problem code",
5
+ "type": "string",
6
+ "minLength": 1,
7
+ "maxLength": 64,
8
+ "pattern": "^[A-Z][A-Z0-9_]*$"
9
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/problem-details.schema.json",
4
+ "title": "ODP Problem Details",
5
+ "type": "object",
6
+ "required": [
7
+ "type",
8
+ "title",
9
+ "status",
10
+ "code"
11
+ ],
12
+ "properties": {
13
+ "type": {
14
+ "type": "string",
15
+ "format": "uri",
16
+ "pattern": "^https://offeringprotocol\\.org/problems/[a-z0-9][a-z0-9-]*$"
17
+ },
18
+ "title": {
19
+ "type": "string",
20
+ "minLength": 1,
21
+ "maxLength": 128
22
+ },
23
+ "status": {
24
+ "type": "integer",
25
+ "minimum": 400,
26
+ "maximum": 599
27
+ },
28
+ "code": {
29
+ "$ref": "problem-code.schema.json"
30
+ },
31
+ "detail": {
32
+ "type": "string",
33
+ "minLength": 1,
34
+ "maxLength": 2048
35
+ },
36
+ "instance": {
37
+ "type": "string",
38
+ "format": "uri-reference",
39
+ "maxLength": 2048
40
+ },
41
+ "invalid_params": {
42
+ "type": "array",
43
+ "minItems": 1,
44
+ "maxItems": 32,
45
+ "items": {
46
+ "$ref": "invalid-parameter.schema.json"
47
+ }
48
+ }
49
+ },
50
+ "allOf": [
51
+ {
52
+ "if": {
53
+ "required": [
54
+ "invalid_params"
55
+ ]
56
+ },
57
+ "then": {
58
+ "properties": {
59
+ "code": {
60
+ "const": "INVALID_REQUEST"
61
+ }
62
+ }
63
+ }
64
+ }
65
+ ]
66
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/protocol-version.schema.json",
4
+ "title": "ODP protocol version",
5
+ "description": "The major and minor version governing one top-level ODP document.",
6
+ "type": "string",
7
+ "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
8
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/refinement-bucket.schema.json",
4
+ "title": "ODP Refinement Bucket",
5
+ "type": "object",
6
+ "required": [
7
+ "value",
8
+ "count"
9
+ ],
10
+ "properties": {
11
+ "value": {
12
+ "type": [
13
+ "string",
14
+ "boolean",
15
+ "integer",
16
+ "number"
17
+ ]
18
+ },
19
+ "count": {
20
+ "type": "integer",
21
+ "minimum": 0,
22
+ "maximum": 9007199254740991
23
+ },
24
+ "count_relation": {
25
+ "const": "lower_bound"
26
+ }
27
+ }
28
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/refinement-group.schema.json",
4
+ "title": "ODP Refinement Group",
5
+ "type": "object",
6
+ "required": [
7
+ "filter_id",
8
+ "values"
9
+ ],
10
+ "properties": {
11
+ "filter_id": {
12
+ "$ref": "capability-identifier.schema.json"
13
+ },
14
+ "values": {
15
+ "type": "array",
16
+ "minItems": 1,
17
+ "maxItems": 32,
18
+ "uniqueItems": true,
19
+ "items": {
20
+ "$ref": "refinement-bucket.schema.json"
21
+ }
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/representation.schema.json",
4
+ "title": "ODP representation selection",
5
+ "description": "The requested completeness level for Collection or Offering representations.",
6
+ "type": "string",
7
+ "enum": [
8
+ "terse",
9
+ "full"
10
+ ]
11
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/resource-identity.schema.json",
4
+ "title": "ODP resource identity",
5
+ "description": "The structured identity composed by an Agent from Service origin, resource type, and local identifier.",
6
+ "type": "object",
7
+ "required": [
8
+ "service",
9
+ "type",
10
+ "id"
11
+ ],
12
+ "additionalProperties": false,
13
+ "properties": {
14
+ "service": {
15
+ "$ref": "service-origin.schema.json"
16
+ },
17
+ "type": {
18
+ "enum": [
19
+ "collection",
20
+ "offering"
21
+ ]
22
+ },
23
+ "id": {
24
+ "$ref": "local-resource-identifier.schema.json"
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/resource-image.schema.json",
4
+ "title": "ODP Resource image",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "src"
9
+ ],
10
+ "properties": {
11
+ "alt": {
12
+ "type": "string",
13
+ "minLength": 1,
14
+ "maxLength": 1024
15
+ },
16
+ "height": {
17
+ "type": "integer",
18
+ "minimum": 1,
19
+ "maximum": 65535
20
+ },
21
+ "src": {
22
+ "$ref": "resource-reference.schema.json"
23
+ },
24
+ "type": {
25
+ "type": "string",
26
+ "enum": [
27
+ "image/avif",
28
+ "image/jpeg",
29
+ "image/png",
30
+ "image/svg+xml",
31
+ "image/webp"
32
+ ]
33
+ },
34
+ "width": {
35
+ "type": "integer",
36
+ "minimum": 1,
37
+ "maximum": 65535
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/resource-reference.schema.json",
4
+ "title": "ODP resource reference",
5
+ "description": "An origin-relative absolute-path reference or an absolute HTTPS URL, with loopback HTTP allowed for development.",
6
+ "type": "string",
7
+ "format": "uri-reference",
8
+ "anyOf": [
9
+ {
10
+ "pattern": "^/(?!/)[^#]*$"
11
+ },
12
+ {
13
+ "pattern": "^https://(?![^/?#]*@)[^#]+$"
14
+ },
15
+ {
16
+ "pattern": "^http://(?:localhost|127\\.0\\.0\\.1|\\[::1\\])(?::[0-9]+)?(?:/[^#]*)?$"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/schema-reference.schema.json",
4
+ "title": "ODP JSON Schema reference",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "url"
9
+ ],
10
+ "properties": {
11
+ "url": {
12
+ "$ref": "resource-reference.schema.json"
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/search-capabilities.schema.json",
4
+ "title": "ODP search capability advertisement",
5
+ "type": "object",
6
+ "anyOf": [
7
+ {
8
+ "required": [
9
+ "filters"
10
+ ]
11
+ },
12
+ {
13
+ "required": [
14
+ "sorts"
15
+ ]
16
+ }
17
+ ],
18
+ "properties": {
19
+ "filters": {
20
+ "$ref": "filter-capability-source.schema.json"
21
+ },
22
+ "sorts": {
23
+ "$ref": "sort-capability-source.schema.json"
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://offeringprotocol.org/schemas/service-branding-image.schema.json",
4
+ "title": "ODP Service branding image",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "src"
9
+ ],
10
+ "properties": {
11
+ "src": {
12
+ "$ref": "resource-reference.schema.json"
13
+ },
14
+ "type": {
15
+ "type": "string",
16
+ "enum": [
17
+ "image/png",
18
+ "image/svg+xml",
19
+ "image/webp"
20
+ ]
21
+ }
22
+ }
23
+ }