@hypequery/protocol-conformance 0.16.1 → 0.17.0
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.
- package/dist/client-contract-fixtures.d.ts.map +1 -1
- package/dist/client-contract-fixtures.js +5 -0
- package/fixtures/client-contract-v1/README.md +9 -2
- package/fixtures/client-contract-v1/identities.json +18 -0
- package/fixtures/client-contract-v1/queries.json +137 -0
- package/fixtures/client-contract-v1/query-rejections.json +105 -0
- package/fixtures/client-contract-v1/rejections.json +281 -0
- package/fixtures/client-contract-v1/relations.json +20 -0
- package/fixtures/client-contract-v1/success.json +394 -0
- package/fixtures/deployments-v2/README.md +4 -0
- package/fixtures/deployments-v2/identity.json +10 -0
- package/fixtures/deployments-v2/rejections.json +708 -0
- package/fixtures/deployments-v2/success.json +158 -0
- package/fixtures/deployments-v3/README.md +2 -0
- package/fixtures/deployments-v3/identity.json +3 -1
- package/fixtures/deployments-v3/rejections.json +5 -1
- package/fixtures/deployments-v3/success.json +3 -1
- package/fixtures/expressions-v1/README.md +2 -0
- package/fixtures/expressions-v1/rejections.json +8 -1
- package/fixtures/expressions-v1/success.json +9 -2
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-contract-fixtures.d.ts","sourceRoot":"","sources":["../src/client-contract-fixtures.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqBjD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"client-contract-fixtures.d.ts","sourceRoot":"","sources":["../src/client-contract-fixtures.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqBjD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CA4BpF"}
|
|
@@ -43,6 +43,11 @@ export function composeClientContractCases(cases) {
|
|
|
43
43
|
const dimensions = Object.fromEntries(Array.from({ length: 256 }, (_, i) => ['field' + i, null]));
|
|
44
44
|
value = { ...base(values, 'build'), endpoints: Array.from({ length: generator.count }, () => ({ dimensions })) };
|
|
45
45
|
}
|
|
46
|
+
else if (generator.type === 'annotation-fields') {
|
|
47
|
+
const fields = Object.fromEntries(Array.from({ length: generator.count }, (_, i) => ['field' + i, { label: 'x' }]));
|
|
48
|
+
const build = base(values, 'build'), endpoints = build.endpoints;
|
|
49
|
+
value = { ...build, endpoints: [{ ...endpoints[0], annotations: { fields } }, ...endpoints.slice(1)] };
|
|
50
|
+
}
|
|
46
51
|
else if (generator.type === 'members')
|
|
47
52
|
value = Array.from({ length: generator.count }, () => null);
|
|
48
53
|
else if (generator.type === 'bytes')
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
Normative vectors for [RFC 0018](../../rfc/0018-semantic-client-contract.md).
|
|
4
4
|
The family is required by the TypeScript/Python conformance gates.
|
|
5
5
|
|
|
6
|
-
- success.json pins build, metric-only, empty and
|
|
6
|
+
- success.json pins build, metric-only, empty, narrowed and annotated signed contracts.
|
|
7
|
+
annotated is build plus endpoint annotations: same schemaHashes, new contentHash.
|
|
7
8
|
- identities.json pins canonical complete documents and both identity domains.
|
|
8
9
|
- rejections.json pins malformed descriptors, identity failures, safe messages
|
|
9
10
|
and JSON Pointer paths, plus exact size/depth/count boundaries and text decoding.
|
|
@@ -19,7 +20,8 @@ implementations receive complete inputs and need no fixture-file access. A set
|
|
|
19
20
|
array adds/replaces fields in a deep-copied base using RFC 6901 JSON Pointers;
|
|
20
21
|
- appends an array element. Parents must exist. It never recomputes identities:
|
|
21
22
|
malformed shape validation must precede identity validation. The runner's boundary
|
|
22
|
-
generators expand only synthetic byte, depth, endpoint, descriptor
|
|
23
|
+
generators expand only synthetic byte, depth, endpoint, descriptor, annotation-field
|
|
24
|
+
and array-member counts.
|
|
23
25
|
Identity cases reuse the matching success value, as other fixture families do.
|
|
24
26
|
|
|
25
27
|
The query compiler preserves fixed MCP tool names; empty target sets have required
|
|
@@ -27,3 +29,8 @@ never-valued routing fields. JSON Schema pins structural types; call-time semant
|
|
|
27
29
|
validation additionally enforces selected fields, uniqueness, portable timezones
|
|
28
30
|
and combined predicate budgets. No artifact identity authenticates a principal or
|
|
29
31
|
certifies an endpoint's execution implementation.
|
|
32
|
+
|
|
33
|
+
RFC 0023 added the `null-checks` contract, whose filters advertise isNull and
|
|
34
|
+
isNotNull on every logical type, with value-free accepted queries and rejections
|
|
35
|
+
for a null check carrying a value (null included), one the filter does not
|
|
36
|
+
advertise, and a value operator without a value.
|
|
@@ -32,5 +32,23 @@
|
|
|
32
32
|
"ordersRevenue": "e282fb74777e65328d87cfe5caa0349104630cd88137b1842289e0c83676a98d"
|
|
33
33
|
},
|
|
34
34
|
"sha256": "c350b9b6e0351acbbac7509bf5d889afa343b9fb5048d826265d8e9f5ef895d8"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "annotated",
|
|
38
|
+
"canonical": "{\"contentHash\":\"1cc64833994d5da761e9dae3b62992f66b6a270f01228ab97d91ebb74e54ae85\",\"endpoints\":[{\"annotations\":{\"description\":\"Reference list of supported countries.\",\"label\":\"Countries\"},\"dataset\":\"countries\",\"defaultMeasures\":[],\"dimensions\":{\"country\":{\"groupable\":true,\"nullable\":false,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"}},\"filters\":{},\"id\":\"countries\",\"kind\":\"dataset\",\"limits\":{\"defaultLimit\":100,\"maxDimensions\":50,\"maxFilterValues\":1000,\"maxLimit\":1000,\"maxMeasures\":0,\"maxOffset\":10000,\"maxOrderBy\":50,\"maxPredicates\":0},\"measures\":{},\"metadata\":false,\"path\":\"/api/v1/datasets/countries/query\",\"schemaHash\":\"9a5f50cd7564f283d2f0ee8f3f1cdc27731683c939e176bd25919a83d28d94ca\",\"time\":null},{\"annotations\":{\"description\":\"One row per customer order.\",\"fields\":{\"country\":{\"label\":\"Country\"},\"customer.tier\":{\"description\":\"Tier of the ordering customer.\"},\"revenue\":{\"description\":\"Gross order value in €, before refunds.\",\"label\":\"Revenue\"}},\"label\":\"Orders\"},\"dataset\":\"orders\",\"defaultMeasures\":[\"revenue\",\"orderCount\",\"latestLabel\"],\"dimensions\":{\"amount\":{\"groupable\":true,\"nullable\":\"unknown\",\"orderable\":true,\"type\":\"number\",\"wireType\":\"number-or-string\"},\"country\":{\"groupable\":true,\"nullable\":false,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"},\"customer.active\":{\"groupable\":false,\"nullable\":true,\"orderable\":false,\"type\":\"boolean\",\"wireType\":\"boolean\"},\"customer.tier\":{\"groupable\":true,\"nullable\":true,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"}},\"filters\":{\"amount\":{\"operators\":[\"between\",\"eq\",\"gt\",\"gte\",\"in\",\"lt\",\"lte\",\"neq\",\"notIn\"],\"type\":\"number\"},\"country\":{\"operators\":[\"eq\",\"in\",\"like\",\"neq\",\"notIn\"],\"type\":\"string\"},\"customer.active\":{\"operators\":[\"eq\",\"neq\"],\"type\":\"boolean\"},\"customer.tier\":{\"operators\":[\"eq\",\"in\"],\"type\":\"string\"},\"paidStatus\":{\"operators\":[\"eq\"],\"type\":\"string\"}},\"id\":\"orders\",\"kind\":\"dataset\",\"limits\":{\"defaultLimit\":100,\"maxDimensions\":50,\"maxFilterValues\":1000,\"maxLimit\":1000,\"maxMeasures\":50,\"maxOffset\":10000,\"maxOrderBy\":50,\"maxPredicates\":100},\"measures\":{\"averageRevenue\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"},\"customer.unique\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"},\"latestLabel\":{\"having\":false,\"nullable\":true,\"wireType\":\"string\"},\"orderCount\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"},\"revenue\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"}},\"metadata\":true,\"path\":\"/api/v1/datasets/orders/query\",\"schemaHash\":\"88802c0d4798fd0758b7e7697f582b034afada967bfe0fdcb1cafd957144b1f3\",\"time\":{\"defaultTimezone\":\"UTC\",\"grains\":[\"day\",\"hour\",\"month\",\"week\"],\"periodFormat\":\"calendar-date-or-local-datetime-v1\",\"timezone\":true}},{\"annotations\":{\"description\":\"One row per customer order.\",\"fields\":{\"revenue\":{\"description\":\"Gross order value in €, before refunds.\",\"label\":\"Revenue\"}},\"label\":\"Orders\"},\"dataset\":\"orders\",\"dimensions\":{\"country\":{\"groupable\":true,\"nullable\":false,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"},\"customer.active\":{\"groupable\":false,\"nullable\":true,\"orderable\":false,\"type\":\"boolean\",\"wireType\":\"boolean\"},\"customer.tier\":{\"groupable\":true,\"nullable\":true,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"}},\"filters\":{\"amount\":{\"operators\":[\"between\",\"eq\",\"gt\",\"gte\",\"in\",\"lt\",\"lte\",\"neq\",\"notIn\"],\"type\":\"number\"},\"country\":{\"operators\":[\"eq\",\"in\",\"like\",\"neq\",\"notIn\"],\"type\":\"string\"},\"customer.active\":{\"operators\":[\"eq\",\"neq\"],\"type\":\"boolean\"},\"customer.tier\":{\"operators\":[\"eq\",\"in\"],\"type\":\"string\"},\"paidStatus\":{\"operators\":[\"eq\"],\"type\":\"string\"}},\"id\":\"ordersRevenue\",\"kind\":\"metric\",\"limits\":{\"defaultLimit\":20,\"maxDimensions\":50,\"maxFilterValues\":1000,\"maxLimit\":20,\"maxMeasures\":1,\"maxOffset\":10000,\"maxOrderBy\":50,\"maxPredicates\":100},\"measures\":{\"revenue\":{\"having\":false,\"nullable\":true,\"wireType\":\"string\"}},\"metadata\":true,\"path\":\"/api/v1/metrics/revenue\",\"schemaHash\":\"e282fb74777e65328d87cfe5caa0349104630cd88137b1842289e0c83676a98d\",\"time\":{\"defaultTimezone\":\"UTC\",\"grains\":[\"day\",\"hour\",\"month\",\"week\"],\"periodFormat\":\"calendar-date-or-local-datetime-v1\",\"timezone\":true}}],\"kind\":\"hypequery-client-contract\",\"version\":1,\"view\":\"build\"}",
|
|
39
|
+
"endpointHashes": {
|
|
40
|
+
"countries": "9a5f50cd7564f283d2f0ee8f3f1cdc27731683c939e176bd25919a83d28d94ca",
|
|
41
|
+
"orders": "88802c0d4798fd0758b7e7697f582b034afada967bfe0fdcb1cafd957144b1f3",
|
|
42
|
+
"ordersRevenue": "e282fb74777e65328d87cfe5caa0349104630cd88137b1842289e0c83676a98d"
|
|
43
|
+
},
|
|
44
|
+
"sha256": "1cc64833994d5da761e9dae3b62992f66b6a270f01228ab97d91ebb74e54ae85"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": "null-checks",
|
|
48
|
+
"canonical": "{\"contentHash\":\"08e3b75129b0f8c528d7dc25ba19ecf7472b5ef2a152655d3181c21e41f2e5c1\",\"endpoints\":[{\"dataset\":\"customers\",\"defaultMeasures\":[\"customerCount\"],\"dimensions\":{\"plan\":{\"groupable\":true,\"nullable\":true,\"orderable\":true,\"type\":\"string\",\"wireType\":\"string\"}},\"filters\":{\"churnedAt\":{\"operators\":[\"gte\",\"isNotNull\",\"isNull\"],\"type\":\"timestamp\"},\"plan\":{\"operators\":[\"eq\",\"isNull\"],\"type\":\"string\"},\"seats\":{\"operators\":[\"isNotNull\"],\"type\":\"number\"},\"trial\":{\"operators\":[\"eq\",\"isNotNull\",\"isNull\"],\"type\":\"boolean\"}},\"id\":\"customers\",\"kind\":\"dataset\",\"limits\":{\"defaultLimit\":100,\"maxDimensions\":50,\"maxFilterValues\":1000,\"maxLimit\":1000,\"maxMeasures\":50,\"maxOffset\":10000,\"maxOrderBy\":50,\"maxPredicates\":100},\"measures\":{\"customerCount\":{\"having\":true,\"nullable\":true,\"wireType\":\"string\"}},\"metadata\":false,\"path\":\"/api/v1/datasets/customers/query\",\"schemaHash\":\"67821b626e7688afa43c6598893a736854b658924e4564361b1db8bcd1f3192d\",\"time\":null}],\"kind\":\"hypequery-client-contract\",\"version\":1,\"view\":\"build\"}",
|
|
49
|
+
"endpointHashes": {
|
|
50
|
+
"customers": "67821b626e7688afa43c6598893a736854b658924e4564361b1db8bcd1f3192d"
|
|
51
|
+
},
|
|
52
|
+
"sha256": "08e3b75129b0f8c528d7dc25ba19ecf7472b5ef2a152655d3181c21e41f2e5c1"
|
|
35
53
|
}
|
|
36
54
|
]
|
|
@@ -28,6 +28,35 @@
|
|
|
28
28
|
"effectiveLimit": 100
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
|
+
{
|
|
32
|
+
"id": "annotated-contract-query",
|
|
33
|
+
"contract": "annotated",
|
|
34
|
+
"endpoint": "orders",
|
|
35
|
+
"input": {},
|
|
36
|
+
"mode": "query",
|
|
37
|
+
"expected": {
|
|
38
|
+
"body": {
|
|
39
|
+
"dimensions": [],
|
|
40
|
+
"filters": [],
|
|
41
|
+
"orderBy": [],
|
|
42
|
+
"limit": 100,
|
|
43
|
+
"offset": 0,
|
|
44
|
+
"includeMeta": false,
|
|
45
|
+
"measures": [
|
|
46
|
+
"revenue",
|
|
47
|
+
"orderCount",
|
|
48
|
+
"latestLabel"
|
|
49
|
+
],
|
|
50
|
+
"having": []
|
|
51
|
+
},
|
|
52
|
+
"selectedMeasures": [
|
|
53
|
+
"revenue",
|
|
54
|
+
"orderCount",
|
|
55
|
+
"latestLabel"
|
|
56
|
+
],
|
|
57
|
+
"effectiveLimit": 100
|
|
58
|
+
}
|
|
59
|
+
},
|
|
31
60
|
{
|
|
32
61
|
"id": "explicit-derived-and-related",
|
|
33
62
|
"contract": "build",
|
|
@@ -480,5 +509,113 @@
|
|
|
480
509
|
],
|
|
481
510
|
"effectiveLimit": 1000
|
|
482
511
|
}
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"id": "null-check-filters-without-value",
|
|
515
|
+
"contract": "null-checks",
|
|
516
|
+
"endpoint": "customers",
|
|
517
|
+
"input": {
|
|
518
|
+
"filters": [
|
|
519
|
+
{
|
|
520
|
+
"field": "churnedAt",
|
|
521
|
+
"operator": "isNotNull"
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"field": "plan",
|
|
525
|
+
"operator": "isNull"
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
"field": "seats",
|
|
529
|
+
"operator": "isNotNull"
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
"field": "trial",
|
|
533
|
+
"operator": "isNull"
|
|
534
|
+
}
|
|
535
|
+
]
|
|
536
|
+
},
|
|
537
|
+
"mode": "query",
|
|
538
|
+
"expected": {
|
|
539
|
+
"body": {
|
|
540
|
+
"dimensions": [],
|
|
541
|
+
"filters": [
|
|
542
|
+
{
|
|
543
|
+
"field": "churnedAt",
|
|
544
|
+
"operator": "isNotNull"
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"field": "plan",
|
|
548
|
+
"operator": "isNull"
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
"field": "seats",
|
|
552
|
+
"operator": "isNotNull"
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
"field": "trial",
|
|
556
|
+
"operator": "isNull"
|
|
557
|
+
}
|
|
558
|
+
],
|
|
559
|
+
"orderBy": [],
|
|
560
|
+
"limit": 100,
|
|
561
|
+
"offset": 0,
|
|
562
|
+
"includeMeta": false,
|
|
563
|
+
"measures": [
|
|
564
|
+
"customerCount"
|
|
565
|
+
],
|
|
566
|
+
"having": []
|
|
567
|
+
},
|
|
568
|
+
"selectedMeasures": [
|
|
569
|
+
"customerCount"
|
|
570
|
+
],
|
|
571
|
+
"effectiveLimit": 100
|
|
572
|
+
}
|
|
573
|
+
},
|
|
574
|
+
{
|
|
575
|
+
"id": "null-check-beside-value-filter",
|
|
576
|
+
"contract": "null-checks",
|
|
577
|
+
"endpoint": "customers",
|
|
578
|
+
"input": {
|
|
579
|
+
"filters": [
|
|
580
|
+
{
|
|
581
|
+
"field": "churnedAt",
|
|
582
|
+
"operator": "isNotNull"
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
"field": "churnedAt",
|
|
586
|
+
"operator": "gte",
|
|
587
|
+
"value": "2026-01-01"
|
|
588
|
+
}
|
|
589
|
+
]
|
|
590
|
+
},
|
|
591
|
+
"mode": "query",
|
|
592
|
+
"expected": {
|
|
593
|
+
"body": {
|
|
594
|
+
"dimensions": [],
|
|
595
|
+
"filters": [
|
|
596
|
+
{
|
|
597
|
+
"field": "churnedAt",
|
|
598
|
+
"operator": "isNotNull"
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
"field": "churnedAt",
|
|
602
|
+
"operator": "gte",
|
|
603
|
+
"value": "2026-01-01"
|
|
604
|
+
}
|
|
605
|
+
],
|
|
606
|
+
"orderBy": [],
|
|
607
|
+
"limit": 100,
|
|
608
|
+
"offset": 0,
|
|
609
|
+
"includeMeta": false,
|
|
610
|
+
"measures": [
|
|
611
|
+
"customerCount"
|
|
612
|
+
],
|
|
613
|
+
"having": []
|
|
614
|
+
},
|
|
615
|
+
"selectedMeasures": [
|
|
616
|
+
"customerCount"
|
|
617
|
+
],
|
|
618
|
+
"effectiveLimit": 100
|
|
619
|
+
}
|
|
483
620
|
}
|
|
484
621
|
]
|
|
@@ -2110,5 +2110,110 @@
|
|
|
2110
2110
|
"mode": "query",
|
|
2111
2111
|
"path": "/limit",
|
|
2112
2112
|
"message": "Invalid client query."
|
|
2113
|
+
},
|
|
2114
|
+
{
|
|
2115
|
+
"id": "null-check-with-value-rejected",
|
|
2116
|
+
"contract": "null-checks",
|
|
2117
|
+
"endpoint": "customers",
|
|
2118
|
+
"input": {
|
|
2119
|
+
"filters": [
|
|
2120
|
+
{
|
|
2121
|
+
"field": "churnedAt",
|
|
2122
|
+
"operator": "isNotNull",
|
|
2123
|
+
"value": "2026-01-01"
|
|
2124
|
+
}
|
|
2125
|
+
]
|
|
2126
|
+
},
|
|
2127
|
+
"error": "HQ_CLIENT_QUERY",
|
|
2128
|
+
"mode": "query",
|
|
2129
|
+
"path": "",
|
|
2130
|
+
"message": "Invalid client query."
|
|
2131
|
+
},
|
|
2132
|
+
{
|
|
2133
|
+
"id": "null-check-with-null-value-rejected",
|
|
2134
|
+
"contract": "null-checks",
|
|
2135
|
+
"endpoint": "customers",
|
|
2136
|
+
"input": {
|
|
2137
|
+
"filters": [
|
|
2138
|
+
{
|
|
2139
|
+
"field": "plan",
|
|
2140
|
+
"operator": "isNull",
|
|
2141
|
+
"value": null
|
|
2142
|
+
}
|
|
2143
|
+
]
|
|
2144
|
+
},
|
|
2145
|
+
"error": "HQ_CLIENT_QUERY",
|
|
2146
|
+
"mode": "query",
|
|
2147
|
+
"path": "",
|
|
2148
|
+
"message": "Invalid client query."
|
|
2149
|
+
},
|
|
2150
|
+
{
|
|
2151
|
+
"id": "null-check-with-boolean-value-rejected",
|
|
2152
|
+
"contract": "null-checks",
|
|
2153
|
+
"endpoint": "customers",
|
|
2154
|
+
"input": {
|
|
2155
|
+
"filters": [
|
|
2156
|
+
{
|
|
2157
|
+
"field": "trial",
|
|
2158
|
+
"operator": "isNull",
|
|
2159
|
+
"value": true
|
|
2160
|
+
}
|
|
2161
|
+
]
|
|
2162
|
+
},
|
|
2163
|
+
"error": "HQ_CLIENT_QUERY",
|
|
2164
|
+
"mode": "query",
|
|
2165
|
+
"path": "",
|
|
2166
|
+
"message": "Invalid client query."
|
|
2167
|
+
},
|
|
2168
|
+
{
|
|
2169
|
+
"id": "null-check-not-advertised",
|
|
2170
|
+
"contract": "null-checks",
|
|
2171
|
+
"endpoint": "customers",
|
|
2172
|
+
"input": {
|
|
2173
|
+
"filters": [
|
|
2174
|
+
{
|
|
2175
|
+
"field": "plan",
|
|
2176
|
+
"operator": "isNotNull"
|
|
2177
|
+
}
|
|
2178
|
+
]
|
|
2179
|
+
},
|
|
2180
|
+
"error": "HQ_CLIENT_QUERY",
|
|
2181
|
+
"mode": "query",
|
|
2182
|
+
"path": "",
|
|
2183
|
+
"message": "Invalid client query."
|
|
2184
|
+
},
|
|
2185
|
+
{
|
|
2186
|
+
"id": "null-check-not-advertised-by-build",
|
|
2187
|
+
"contract": "build",
|
|
2188
|
+
"endpoint": "orders",
|
|
2189
|
+
"input": {
|
|
2190
|
+
"filters": [
|
|
2191
|
+
{
|
|
2192
|
+
"field": "country",
|
|
2193
|
+
"operator": "isNull"
|
|
2194
|
+
}
|
|
2195
|
+
]
|
|
2196
|
+
},
|
|
2197
|
+
"error": "HQ_CLIENT_QUERY",
|
|
2198
|
+
"mode": "query",
|
|
2199
|
+
"path": "",
|
|
2200
|
+
"message": "Invalid client query."
|
|
2201
|
+
},
|
|
2202
|
+
{
|
|
2203
|
+
"id": "value-operator-without-value-rejected",
|
|
2204
|
+
"contract": "null-checks",
|
|
2205
|
+
"endpoint": "customers",
|
|
2206
|
+
"input": {
|
|
2207
|
+
"filters": [
|
|
2208
|
+
{
|
|
2209
|
+
"field": "churnedAt",
|
|
2210
|
+
"operator": "gte"
|
|
2211
|
+
}
|
|
2212
|
+
]
|
|
2213
|
+
},
|
|
2214
|
+
"error": "HQ_CLIENT_QUERY",
|
|
2215
|
+
"mode": "query",
|
|
2216
|
+
"path": "",
|
|
2217
|
+
"message": "Invalid client query."
|
|
2113
2218
|
}
|
|
2114
2219
|
]
|
|
@@ -449,6 +449,265 @@
|
|
|
449
449
|
"path": "/contentHash",
|
|
450
450
|
"message": "Client contract identity does not match."
|
|
451
451
|
},
|
|
452
|
+
{
|
|
453
|
+
"id": "annotation-not-object",
|
|
454
|
+
"base": "build",
|
|
455
|
+
"set": [
|
|
456
|
+
{
|
|
457
|
+
"path": "/endpoints/0/annotations",
|
|
458
|
+
"value": "Countries"
|
|
459
|
+
}
|
|
460
|
+
],
|
|
461
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
462
|
+
"path": "/endpoints/0/annotations",
|
|
463
|
+
"message": "Invalid client contract shape."
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
"id": "annotation-empty-object",
|
|
467
|
+
"base": "build",
|
|
468
|
+
"set": [
|
|
469
|
+
{
|
|
470
|
+
"path": "/endpoints/0/annotations",
|
|
471
|
+
"value": {}
|
|
472
|
+
}
|
|
473
|
+
],
|
|
474
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
475
|
+
"path": "/endpoints/0/annotations",
|
|
476
|
+
"message": "Invalid client contract shape."
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
"id": "annotation-unknown-field",
|
|
480
|
+
"base": "annotated",
|
|
481
|
+
"set": [
|
|
482
|
+
{
|
|
483
|
+
"path": "/endpoints/1/annotations/owner",
|
|
484
|
+
"value": "analytics"
|
|
485
|
+
}
|
|
486
|
+
],
|
|
487
|
+
"error": "HQ_CLIENT_UNKNOWN_FIELD",
|
|
488
|
+
"path": "/endpoints/1/annotations",
|
|
489
|
+
"message": "Unknown client contract field."
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"id": "annotation-empty-fields",
|
|
493
|
+
"base": "annotated",
|
|
494
|
+
"set": [
|
|
495
|
+
{
|
|
496
|
+
"path": "/endpoints/0/annotations/fields",
|
|
497
|
+
"value": {}
|
|
498
|
+
}
|
|
499
|
+
],
|
|
500
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
501
|
+
"path": "/endpoints/0/annotations/fields",
|
|
502
|
+
"message": "Invalid client contract shape."
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
"id": "annotation-empty-field-entry",
|
|
506
|
+
"base": "annotated",
|
|
507
|
+
"set": [
|
|
508
|
+
{
|
|
509
|
+
"path": "/endpoints/1/annotations/fields/country",
|
|
510
|
+
"value": {}
|
|
511
|
+
}
|
|
512
|
+
],
|
|
513
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
514
|
+
"path": "/endpoints/1/annotations/fields/country",
|
|
515
|
+
"message": "Invalid client contract shape."
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
"id": "annotation-unknown-field-entry-member",
|
|
519
|
+
"base": "annotated",
|
|
520
|
+
"set": [
|
|
521
|
+
{
|
|
522
|
+
"path": "/endpoints/1/annotations/fields/country/unit",
|
|
523
|
+
"value": "USD"
|
|
524
|
+
}
|
|
525
|
+
],
|
|
526
|
+
"error": "HQ_CLIENT_UNKNOWN_FIELD",
|
|
527
|
+
"path": "/endpoints/1/annotations/fields/country",
|
|
528
|
+
"message": "Unknown client contract field."
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"id": "annotation-non-string-label",
|
|
532
|
+
"base": "annotated",
|
|
533
|
+
"set": [
|
|
534
|
+
{
|
|
535
|
+
"path": "/endpoints/1/annotations/label",
|
|
536
|
+
"value": 7
|
|
537
|
+
}
|
|
538
|
+
],
|
|
539
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
540
|
+
"path": "/endpoints/1/annotations/label",
|
|
541
|
+
"message": "Invalid client contract shape."
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
"id": "annotation-blank-description",
|
|
545
|
+
"base": "annotated",
|
|
546
|
+
"set": [
|
|
547
|
+
{
|
|
548
|
+
"path": "/endpoints/1/annotations/description",
|
|
549
|
+
"value": " \u3000 "
|
|
550
|
+
}
|
|
551
|
+
],
|
|
552
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
553
|
+
"path": "/endpoints/1/annotations/description",
|
|
554
|
+
"message": "Invalid client contract shape."
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
"id": "annotation-byte-order-mark-only",
|
|
558
|
+
"base": "annotated",
|
|
559
|
+
"set": [
|
|
560
|
+
{
|
|
561
|
+
"path": "/endpoints/1/annotations/label",
|
|
562
|
+
"value": "\ufeff"
|
|
563
|
+
}
|
|
564
|
+
],
|
|
565
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
566
|
+
"path": "/endpoints/1/annotations/label",
|
|
567
|
+
"message": "Invalid client contract shape."
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
"id": "annotation-line-break",
|
|
571
|
+
"base": "annotated",
|
|
572
|
+
"set": [
|
|
573
|
+
{
|
|
574
|
+
"path": "/endpoints/1/annotations/description",
|
|
575
|
+
"value": "One row per\norder."
|
|
576
|
+
}
|
|
577
|
+
],
|
|
578
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
579
|
+
"path": "/endpoints/1/annotations/description",
|
|
580
|
+
"message": "Invalid client contract shape."
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
"id": "annotation-tab",
|
|
584
|
+
"base": "annotated",
|
|
585
|
+
"set": [
|
|
586
|
+
{
|
|
587
|
+
"path": "/endpoints/1/annotations/fields/revenue/label",
|
|
588
|
+
"value": "Gross\trevenue"
|
|
589
|
+
}
|
|
590
|
+
],
|
|
591
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
592
|
+
"path": "/endpoints/1/annotations/fields/revenue/label",
|
|
593
|
+
"message": "Invalid client contract shape."
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"id": "annotation-c1-control",
|
|
597
|
+
"base": "annotated",
|
|
598
|
+
"set": [
|
|
599
|
+
{
|
|
600
|
+
"path": "/endpoints/1/annotations/label",
|
|
601
|
+
"value": "Orders\u0085"
|
|
602
|
+
}
|
|
603
|
+
],
|
|
604
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
605
|
+
"path": "/endpoints/1/annotations/label",
|
|
606
|
+
"message": "Invalid client contract shape."
|
|
607
|
+
},
|
|
608
|
+
{
|
|
609
|
+
"id": "annotation-text-4096-bytes",
|
|
610
|
+
"base": "annotated",
|
|
611
|
+
"set": [
|
|
612
|
+
{
|
|
613
|
+
"path": "/endpoints/1/annotations/description",
|
|
614
|
+
"value": "éééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé"
|
|
615
|
+
}
|
|
616
|
+
],
|
|
617
|
+
"error": "HQ_CLIENT_IDENTITY",
|
|
618
|
+
"path": "/contentHash",
|
|
619
|
+
"message": "Client contract identity does not match."
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
"id": "annotation-text-4097-bytes",
|
|
623
|
+
"base": "annotated",
|
|
624
|
+
"set": [
|
|
625
|
+
{
|
|
626
|
+
"path": "/endpoints/1/annotations/description",
|
|
627
|
+
"value": "ééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééa"
|
|
628
|
+
}
|
|
629
|
+
],
|
|
630
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
631
|
+
"path": "/endpoints/1/annotations/description",
|
|
632
|
+
"message": "Invalid client contract shape."
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
"id": "annotation-invalid-field-name",
|
|
636
|
+
"base": "annotated",
|
|
637
|
+
"set": [
|
|
638
|
+
{
|
|
639
|
+
"path": "/endpoints/1/annotations/fields/customer.next.tier",
|
|
640
|
+
"value": {
|
|
641
|
+
"label": "Tier"
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
],
|
|
645
|
+
"error": "HQ_CLIENT_IDENTIFIER",
|
|
646
|
+
"path": "/endpoints/1/annotations/fields",
|
|
647
|
+
"message": "Invalid client contract identifier."
|
|
648
|
+
},
|
|
649
|
+
{
|
|
650
|
+
"id": "annotation-unknown-field-reference",
|
|
651
|
+
"base": "annotated",
|
|
652
|
+
"set": [
|
|
653
|
+
{
|
|
654
|
+
"path": "/endpoints/1/annotations/fields/missing",
|
|
655
|
+
"value": {
|
|
656
|
+
"label": "Missing"
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
],
|
|
660
|
+
"error": "HQ_CLIENT_REFERENCE",
|
|
661
|
+
"path": "/endpoints/1",
|
|
662
|
+
"message": "Inconsistent client contract reference."
|
|
663
|
+
},
|
|
664
|
+
{
|
|
665
|
+
"id": "annotation-filter-alias-reference",
|
|
666
|
+
"base": "annotated",
|
|
667
|
+
"set": [
|
|
668
|
+
{
|
|
669
|
+
"path": "/endpoints/1/annotations/fields/paidStatus",
|
|
670
|
+
"value": {
|
|
671
|
+
"label": "Paid status"
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
],
|
|
675
|
+
"error": "HQ_CLIENT_REFERENCE",
|
|
676
|
+
"path": "/endpoints/1",
|
|
677
|
+
"message": "Inconsistent client contract reference."
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
"id": "annotation-shape-precedes-reference",
|
|
681
|
+
"base": "annotated",
|
|
682
|
+
"set": [
|
|
683
|
+
{
|
|
684
|
+
"path": "/endpoints/1/defaultMeasures",
|
|
685
|
+
"value": [
|
|
686
|
+
"missing"
|
|
687
|
+
]
|
|
688
|
+
},
|
|
689
|
+
{
|
|
690
|
+
"path": "/endpoints/1/annotations/description",
|
|
691
|
+
"value": ""
|
|
692
|
+
}
|
|
693
|
+
],
|
|
694
|
+
"error": "HQ_CLIENT_SHAPE",
|
|
695
|
+
"path": "/endpoints/1/annotations/description",
|
|
696
|
+
"message": "Invalid client contract shape."
|
|
697
|
+
},
|
|
698
|
+
{
|
|
699
|
+
"id": "annotation-does-not-sign-schema",
|
|
700
|
+
"base": "annotated",
|
|
701
|
+
"set": [
|
|
702
|
+
{
|
|
703
|
+
"path": "/endpoints/1/annotations/description",
|
|
704
|
+
"value": "Reworded without a new schemaHash."
|
|
705
|
+
}
|
|
706
|
+
],
|
|
707
|
+
"error": "HQ_CLIENT_IDENTITY",
|
|
708
|
+
"path": "/contentHash",
|
|
709
|
+
"message": "Client contract identity does not match."
|
|
710
|
+
},
|
|
452
711
|
{
|
|
453
712
|
"id": "endpoints-256",
|
|
454
713
|
"mode": "boundary",
|
|
@@ -590,5 +849,27 @@
|
|
|
590
849
|
"error": "HQ_CLIENT_LIMIT",
|
|
591
850
|
"path": "",
|
|
592
851
|
"message": "Client contract exceeds validation limits."
|
|
852
|
+
},
|
|
853
|
+
{
|
|
854
|
+
"id": "annotation-fields-512",
|
|
855
|
+
"mode": "boundary",
|
|
856
|
+
"generator": {
|
|
857
|
+
"type": "annotation-fields",
|
|
858
|
+
"count": 512
|
|
859
|
+
},
|
|
860
|
+
"error": "HQ_CLIENT_REFERENCE",
|
|
861
|
+
"path": "/endpoints/0",
|
|
862
|
+
"message": "Inconsistent client contract reference."
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
"id": "annotation-fields-513",
|
|
866
|
+
"mode": "boundary",
|
|
867
|
+
"generator": {
|
|
868
|
+
"type": "annotation-fields",
|
|
869
|
+
"count": 513
|
|
870
|
+
},
|
|
871
|
+
"error": "HQ_CLIENT_LIMIT",
|
|
872
|
+
"path": "/endpoints/0/annotations/fields",
|
|
873
|
+
"message": "Client contract exceeds validation limits."
|
|
593
874
|
}
|
|
594
875
|
]
|