@jimhoyd/urlcode 0.4.8 → 0.5.5

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 (58) hide show
  1. package/README.md +18 -18
  2. package/dist/BUILD-MANIFEST.json +27 -23
  3. package/dist/agents-guide.js +8 -4
  4. package/dist/authoring.js +81 -7
  5. package/dist/build-cloudflare.js +1 -0
  6. package/dist/build-static.js +1 -0
  7. package/dist/cli.js +39 -14
  8. package/dist/config.js +7 -1
  9. package/dist/context.js +32 -4
  10. package/dist/ecosystem-cli.js +6 -0
  11. package/dist/explain-cli.js +1 -1
  12. package/dist/explain.js +2 -2
  13. package/dist/extension-artifacts.js +28 -34
  14. package/dist/extension-bundles.js +62 -0
  15. package/dist/extension-transport.js +41 -0
  16. package/dist/extensions.js +4 -0
  17. package/dist/feature-plan.js +99 -0
  18. package/dist/functions.js +2 -1
  19. package/dist/index.js +4 -2
  20. package/dist/init-with.js +55 -23
  21. package/dist/interchange.js +1 -1
  22. package/dist/match.js +23 -5
  23. package/dist/mcp.js +6 -2
  24. package/dist/readiness.js +2 -2
  25. package/dist/review.js +206 -0
  26. package/dist/router.js +35 -10
  27. package/dist/runtime.js +1 -0
  28. package/dist/tooling.js +4 -0
  29. package/dist/types/agents-guide.d.ts +6 -1
  30. package/dist/types/authoring.d.ts +3 -1
  31. package/dist/types/context.d.ts +12 -0
  32. package/dist/types/explain.d.ts +3 -0
  33. package/dist/types/extension-artifacts.d.ts +15 -4
  34. package/dist/types/extension-bundles.d.ts +49 -0
  35. package/dist/types/extension-transport.d.ts +31 -0
  36. package/dist/types/extensions.d.ts +4 -0
  37. package/dist/types/feature-plan.d.ts +67 -0
  38. package/dist/types/functions.d.ts +4 -0
  39. package/dist/types/index.d.ts +4 -2
  40. package/dist/types/init-with.d.ts +6 -1
  41. package/dist/types/match.d.ts +1 -0
  42. package/dist/types/review.d.ts +30 -0
  43. package/dist/types/tooling.d.ts +4 -0
  44. package/dist/types/types.d.ts +10 -1
  45. package/dist/types.js +10 -3
  46. package/docs/AI-AUTHORING.md +466 -0
  47. package/docs/FUNCTION-SECURITY.md +251 -0
  48. package/docs/README.md +96 -0
  49. package/docs/TOOLING.md +422 -0
  50. package/docs/YAML-REFERENCE.md +473 -0
  51. package/llms-full.txt +190 -83
  52. package/llms.txt +73 -128
  53. package/package.json +15 -4
  54. package/recipes/redirect/README.md +2 -2
  55. package/recipes/store-crud/README.md +9 -10
  56. package/recipes/store-crud/recipe.yaml +1 -1
  57. package/schemas/urlcode.schema.json +3 -0
  58. package/starters/default/AGENTS.md +2 -2
@@ -0,0 +1,473 @@
1
+ # YAML field reference
2
+
3
+ Generated from the bundled JSON Schema by `npm run docs:reference`. Required
4
+ means required within its containing object, not that the object itself must be
5
+ present. `routes.*` means a route path; other `*` markers mean user-selected
6
+ keys. `[]` means an array item. Option rows describe union alternatives.
7
+
8
+ Read the [YAML guide](YAML-GUIDE.md) for examples and [specification](SPECIFICATION.md)
9
+ for semantic validation beyond JSON Schema. Exactly one handler is required per
10
+ route; respond.text/respond.json are mutually exclusive. Runtime defaults include
11
+ GET/HEAD, redirect 302, respond 200, default module export, and asset no-cache.
12
+ Only Set-Cookie accepts response header arrays. This table does not imply all
13
+ schema-valid combinations activate successfully.
14
+
15
+ | Field | Type | Required | Schema constraints |
16
+ |---|---|---|---|
17
+ | `version` | constant | yes | const: "1" |
18
+ | `routes` | object | yes | maxProperties: 100000 |
19
+ | `routes.*` | object | no | unknown keys rejected |
20
+ | `routes.*.methods` | array | no | default: ["GET","HEAD"]; minItems: 1; uniqueItems: true |
21
+ | `routes.*.methods[]` | string | no | enum: ["GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS"] |
22
+ | `routes.*.enabled` | boolean | no | — |
23
+ | `routes.*.sandbox` | boolean | no | default: false |
24
+ | `routes.*.sandboxReason` | string | no | maxLength: 500 |
25
+ | `routes.*.coveredElsewhere` | object | no | minProperties: 1 |
26
+ | `routes.*.coveredElsewhere.*` | string | no | minLength: 1; maxLength: 500 |
27
+ | `routes.*.expires` | string | no | — |
28
+ | `routes.*.description` | string | no | maxLength: 1024 |
29
+ | `routes.*.parameters` | array | no | maxItems: 64 |
30
+ | `routes.*.parameters[]` | object | no | unknown keys rejected |
31
+ | `routes.*.parameters[].name` | string | yes | pattern: "^[A-Za-z_][A-Za-z0-9_-]*$" |
32
+ | `routes.*.parameters[].in` | string | yes | enum: ["path","query","header"] |
33
+ | `routes.*.parameters[].required` | boolean | no | — |
34
+ | `routes.*.parameters[].schema` | object | yes | unknown keys rejected |
35
+ | `routes.*.parameters[].schema.type` | string | yes | enum: ["string","integer","number","boolean","array"] |
36
+ | `routes.*.parameters[].schema.enum` | array | no | minItems: 1; uniqueItems: true |
37
+ | `routes.*.parameters[].schema.enum[]` | string / number / boolean | no | — |
38
+ | `routes.*.parameters[].schema.default` | string / number / boolean / array | no | — |
39
+ | `routes.*.parameters[].schema.default[]` | string / number / boolean | no | — |
40
+ | `routes.*.parameters[].schema.minLength` | integer | no | minimum: 0; maximum: 8192 |
41
+ | `routes.*.parameters[].schema.maxLength` | integer | no | minimum: 0; maximum: 8192 |
42
+ | `routes.*.parameters[].schema.minimum` | number | no | — |
43
+ | `routes.*.parameters[].schema.maximum` | number | no | — |
44
+ | `routes.*.parameters[].schema.pattern` | string | no | minLength: 1; maxLength: 128 |
45
+ | `routes.*.parameters[].schema.format` | string | no | enum: ["uuid"] |
46
+ | `routes.*.parameters[].schema.items` | object | no | unknown keys rejected |
47
+ | `routes.*.parameters[].schema.items.type` | string | yes | enum: ["string","integer","number","boolean"] |
48
+ | `routes.*.parameters[].schema.maxItems` | integer | no | minimum: 0; maximum: 100 |
49
+ | `routes.*.redirect` | object | no | unknown keys rejected |
50
+ | `routes.*.redirect.url` | string | yes | maxLength: 8192 |
51
+ | `routes.*.redirect.status` | number | no | enum: [301,302,303,307,308] |
52
+ | `routes.*.redirect.query` | object | no | unknown keys rejected |
53
+ | `routes.*.redirect.query.pass` | one of the shapes below | no | — |
54
+ | `routes.*.redirect.query.pass (option 1)` | constant | no | const: false |
55
+ | `routes.*.redirect.query.pass (option 2)` | array | no | uniqueItems: true |
56
+ | `routes.*.redirect.query.pass (option 2)[]` | string | no | — |
57
+ | `routes.*.redirect.query.map` | object | no | — |
58
+ | `routes.*.redirect.query.map.*` | object | no | unknown keys rejected |
59
+ | `routes.*.redirect.query.map.*.from` | string | yes | enum: ["path","query","header"] |
60
+ | `routes.*.redirect.query.map.*.name` | string | yes | — |
61
+ | `routes.*.function` | one of the shapes below | no | — |
62
+ | `routes.*.function (option 1)` | string | no | minLength: 1; maxLength: 1024 |
63
+ | `routes.*.function (option 2)` | object | no | unknown keys rejected |
64
+ | `routes.*.function (option 2).source` | string | yes | maxLength: 1024 |
65
+ | `routes.*.function (option 2).export` | string | no | pattern: "^[A-Za-z_][A-Za-z0-9_]*$" |
66
+ | `routes.*.function (option 2).args` | object | no | — |
67
+ | `routes.*.function (option 2).args.*` | one of the shapes below | no | — |
68
+ | `routes.*.function (option 2).args.* (option 1)` | string / number / boolean | no | — |
69
+ | `routes.*.function (option 2).args.* (option 2)` | object | no | unknown keys rejected |
70
+ | `routes.*.function (option 2).args.* (option 2).from` | string | yes | enum: ["path","query","header"] |
71
+ | `routes.*.function (option 2).args.* (option 2).name` | string | yes | — |
72
+ | `routes.*.function (option 2).args.* (option 3)` | object | no | unknown keys rejected |
73
+ | `routes.*.function (option 2).args.* (option 3).env` | string | yes | pattern: "^[A-Za-z_][A-Za-z0-9_]*$" |
74
+ | `routes.*.function (option 2).args.* (option 4)` | object | no | unknown keys rejected |
75
+ | `routes.*.function (option 2).args.* (option 4).secret` | string | yes | pattern: "^[A-Za-z_][A-Za-z0-9_]*$" |
76
+ | `routes.*.env` | object | no | — |
77
+ | `routes.*.env.*` | one of the shapes below | no | — |
78
+ | `routes.*.env.* (option 1)` | object | no | unknown keys rejected |
79
+ | `routes.*.env.* (option 1).value` | string | yes | — |
80
+ | `routes.*.env.* (option 2)` | object | no | unknown keys rejected |
81
+ | `routes.*.env.* (option 2).env` | string | yes | pattern: "^[A-Za-z_][A-Za-z0-9_]*$" |
82
+ | `routes.*.env.* (option 2).default` | string | no | — |
83
+ | `routes.*.secrets` | object | no | — |
84
+ | `routes.*.secrets.*` | object | no | unknown keys rejected |
85
+ | `routes.*.secrets.*.secret` | string | yes | pattern: "^[A-Za-z_][A-Za-z0-9_]*$" |
86
+ | `routes.*.page` | object | no | unknown keys rejected |
87
+ | `routes.*.page.file` | string | yes | minLength: 1; maxLength: 1024 |
88
+ | `routes.*.page.contentType` | string | no | maxLength: 128; pattern: "^[A-Za-z0-9!#$&^_.+-]+/[A-Za-z0-9!#$&^_.+-]+$" |
89
+ | `routes.*.page.cacheControl` | string | no | enum: ["no-cache","no-store","public, max-age=3600","public, max-age=31536000, immutable"] |
90
+ | `routes.*.download` | object | no | unknown keys rejected |
91
+ | `routes.*.download.file` | string | yes | minLength: 1; maxLength: 1024 |
92
+ | `routes.*.download.contentType` | string | no | maxLength: 128; pattern: "^[A-Za-z0-9!#$&^_.+-]+/[A-Za-z0-9!#$&^_.+-]+$" |
93
+ | `routes.*.download.cacheControl` | string | no | enum: ["no-cache","no-store","public, max-age=3600","public, max-age=31536000, immutable"] |
94
+ | `routes.*.download.filename` | string | no | minLength: 1; maxLength: 255 |
95
+ | `routes.*.static` | object | no | unknown keys rejected |
96
+ | `routes.*.static.directory` | string | yes | minLength: 1; maxLength: 1024 |
97
+ | `routes.*.static.contentType` | string | no | maxLength: 128; pattern: "^[A-Za-z0-9!#$&^_.+-]+/[A-Za-z0-9!#$&^_.+-]+$" |
98
+ | `routes.*.static.cacheControl` | string | no | enum: ["no-cache","no-store","public, max-age=3600","public, max-age=31536000, immutable"] |
99
+ | `routes.*.static.index` | string | no | pattern: "^[A-Za-z0-9_-]+\\.html$" |
100
+ | `routes.*.request` | object | no | unknown keys rejected |
101
+ | `routes.*.request.body` | object | no | unknown keys rejected |
102
+ | `routes.*.request.body.required` | boolean | no | — |
103
+ | `routes.*.request.body.maxBytes` | integer | no | minimum: 0; maximum: 1048576 |
104
+ | `routes.*.request.body.contentTypes` | array | no | minItems: 1; maxItems: 16; uniqueItems: true |
105
+ | `routes.*.request.body.contentTypes[]` | string | no | pattern: "^[a-z0-9!#$&^_.+-]+/[a-z0-9!#$&^_.+-]+$" |
106
+ | `routes.*.request.body.format` | string | no | enum: ["text","json"] |
107
+ | `routes.*.request.body.schema` | object | no | — |
108
+ | `routes.*.response` | object | no | unknown keys rejected |
109
+ | `routes.*.response.headers` | object | no | maxProperties: 64 |
110
+ | `routes.*.response.headers.*` | one of the shapes below | no | — |
111
+ | `routes.*.response.headers.* (option 1)` | string | no | maxLength: 4096 |
112
+ | `routes.*.response.headers.* (option 2)` | array | no | minItems: 1; maxItems: 16 |
113
+ | `routes.*.response.headers.* (option 2)[]` | string | no | maxLength: 4096 |
114
+ | `routes.*.respond` | object | no | unknown keys rejected |
115
+ | `routes.*.respond.status` | integer | no | minimum: 200; maximum: 599 |
116
+ | `routes.*.respond.text` | string | no | maxLength: 1048576 |
117
+ | `routes.*.respond.json` | any JSON value | no | — |
118
+ | `routes.*.middleware` | array | no | maxItems: 16 |
119
+ | `routes.*.middleware[]` | one of the shapes below | no | — |
120
+ | `routes.*.middleware[] (option 1)` | string | no | minLength: 1; maxLength: 1024 |
121
+ | `routes.*.middleware[] (option 2)` | object | no | unknown keys rejected |
122
+ | `routes.*.middleware[] (option 2).source` | string | yes | maxLength: 1024 |
123
+ | `routes.*.middleware[] (option 2).export` | string | no | pattern: "^[A-Za-z_][A-Za-z0-9_]*$" |
124
+ | `routes.*.policies` | object | no | unknown keys rejected |
125
+ | `routes.*.policies.profile` | string | no | pattern: "^[a-z][a-z0-9-]{0,63}$" |
126
+ | `routes.*.policies.throttle` | one of the shapes below | no | — |
127
+ | `routes.*.policies.throttle (option 1)` | constant | no | const: false |
128
+ | `routes.*.policies.throttle (option 2)` | object | no | unknown keys rejected |
129
+ | `routes.*.policies.throttle (option 2).quota` | integer | no | minimum: 1; maximum: 1000000 |
130
+ | `routes.*.policies.throttle (option 2).window` | integer | no | minimum: 1; maximum: 86400 |
131
+ | `routes.*.policies.throttle (option 2).partition` | string | no | enum: ["client","route","client-route"]; default: "client" |
132
+ | `routes.*.policies.throttle (option 2).status` | integer | no | default: 429; minimum: 400; maximum: 599 |
133
+ | `routes.*.policies.throttle (option 2).mode` | string | no | enum: ["enforce","report"]; default: "enforce" |
134
+ | `routes.*.policies.throttle (option 2).maxKeys` | integer | no | default: 100000; minimum: 1000; maximum: 10000000 |
135
+ | `routes.*.policies.agents` | one of the shapes below | no | — |
136
+ | `routes.*.policies.agents (option 1)` | constant | no | const: false |
137
+ | `routes.*.policies.agents (option 2)` | object | no | unknown keys rejected |
138
+ | `routes.*.policies.agents (option 2).deny` | array | no | maxItems: 32; uniqueItems: true |
139
+ | `routes.*.policies.agents (option 2).deny[]` | string | no | minLength: 1; maxLength: 1024 |
140
+ | `routes.*.policies.agents (option 2).allow` | array | no | maxItems: 32; uniqueItems: true |
141
+ | `routes.*.policies.agents (option 2).allow[]` | string | no | minLength: 1; maxLength: 1024 |
142
+ | `routes.*.policies.agents (option 2).denyPatterns` | array | no | maxItems: 256; uniqueItems: true |
143
+ | `routes.*.policies.agents (option 2).denyPatterns[]` | string | no | minLength: 1; maxLength: 256 |
144
+ | `routes.*.policies.agents (option 2).allowPatterns` | array | no | maxItems: 256; uniqueItems: true |
145
+ | `routes.*.policies.agents (option 2).allowPatterns[]` | string | no | minLength: 1; maxLength: 256 |
146
+ | `routes.*.policies.agents (option 2).denyEmpty` | boolean | no | default: false |
147
+ | `routes.*.policies.agents (option 2).status` | integer | no | default: 403; minimum: 400; maximum: 599 |
148
+ | `routes.*.policies.agents (option 2).mode` | string | no | enum: ["enforce","report"]; default: "enforce" |
149
+ | `routes.*.policies.security` | one of the shapes below | no | — |
150
+ | `routes.*.policies.security (option 1)` | constant | no | const: false |
151
+ | `routes.*.policies.security (option 2)` | object | no | unknown keys rejected |
152
+ | `routes.*.policies.security (option 2).headers` | string | no | enum: ["oshp","oshp-no-csp","off"]; default: "oshp" |
153
+ | `routes.*.policies.security (option 2).set` | object | no | maxProperties: 32 |
154
+ | `routes.*.policies.security (option 2).set.*` | string | no | maxLength: 4096 |
155
+ | `routes.*.policies.security (option 2).unset` | array | no | maxItems: 32; uniqueItems: true |
156
+ | `routes.*.policies.security (option 2).unset[]` | string | no | minLength: 1; maxLength: 128 |
157
+ | `routes.*.policies.compression` | one of the shapes below | no | — |
158
+ | `routes.*.policies.compression (option 1)` | constant | no | const: false |
159
+ | `routes.*.policies.compression (option 2)` | object | no | unknown keys rejected |
160
+ | `routes.*.policies.compression (option 2).encodings` | array | no | default: ["br","gzip"]; minItems: 1; uniqueItems: true |
161
+ | `routes.*.policies.compression (option 2).encodings[]` | string | no | enum: ["br","gzip","deflate","zstd"] |
162
+ | `routes.*.policies.compression (option 2).minBytes` | integer | no | default: 1024; minimum: 0; maximum: 1048576 |
163
+ | `routes.*.policies.compression (option 2).types` | array | no | maxItems: 64; uniqueItems: true |
164
+ | `routes.*.policies.compression (option 2).types[]` | string | no | minLength: 1; maxLength: 128 |
165
+ | `routes.*.policies.compression (option 2).level` | integer | no | minimum: 1; maximum: 11 |
166
+ | `routes.*.policies.compression (option 2).allowWithSecrets` | boolean | no | default: false |
167
+ | `routes.*.policies.cache` | one of the shapes below | no | — |
168
+ | `routes.*.policies.cache (option 1)` | constant | no | const: false |
169
+ | `routes.*.policies.cache (option 2)` | object | no | unknown keys rejected |
170
+ | `routes.*.policies.cache (option 2).strategy` | string | no | enum: ["no-store","revalidate","public","immutable","swr","sie","micro","cdn-only","private"] |
171
+ | `routes.*.policies.cache (option 2).maxAge` | integer | no | minimum: 0; maximum: 31536000 |
172
+ | `routes.*.policies.cache (option 2).staleWhileRevalidate` | integer | no | minimum: 0; maximum: 31536000 |
173
+ | `routes.*.policies.cache (option 2).staleIfError` | integer | no | minimum: 0; maximum: 31536000 |
174
+ | `routes.*.policies.cache (option 2).cdnMaxAge` | integer | no | minimum: 0; maximum: 31536000 |
175
+ | `routes.*.policies.cache (option 2).originTtl` | integer | no | minimum: 0; maximum: 86400 |
176
+ | `routes.*.policies.cache (option 2).vary` | array | no | maxItems: 8; uniqueItems: true |
177
+ | `routes.*.policies.cache (option 2).vary[]` | string | no | minLength: 1; maxLength: 128 |
178
+ | `routes.*.policies.cache (option 2).statuses` | array | no | maxItems: 16; uniqueItems: true |
179
+ | `routes.*.policies.cache (option 2).statuses[]` | integer | no | minimum: 200; maximum: 599 |
180
+ | `routes.*.policies.cache (option 2).maxBytes` | integer | no | minimum: 0; maximum: 16777216 |
181
+ | `routes.*.policies.cache (option 2).maxEntries` | integer | no | minimum: 1; maximum: 1000000 |
182
+ | `routes.*.policies.cache (option 2).force` | boolean | no | default: false |
183
+ | `routes.*.policies.extensions` | one of the shapes below | no | — |
184
+ | `routes.*.policies.extensions (option 1)` | constant | no | const: false |
185
+ | `routes.*.policies.extensions (option 2)` | object | no | maxProperties: 16 |
186
+ | `routes.*.policies.extensions (option 2).*` | one of the shapes below | no | — |
187
+ | `routes.*.policies.extensions (option 2).* (option 1)` | constant | no | const: false |
188
+ | `routes.*.policies.extensions (option 2).* (option 2)` | object | no | — |
189
+ | `routes.*.match` | object | no | minProperties: 1; unknown keys rejected |
190
+ | `routes.*.match.query` | object | no | minProperties: 1; maxProperties: 16 |
191
+ | `routes.*.match.query.*` | string | no | maxLength: 1024 |
192
+ | `routes.*.match.headers` | object | no | minProperties: 1; maxProperties: 16 |
193
+ | `routes.*.match.headers.*` | string | no | maxLength: 1024 |
194
+ | `routes.*.match.cookies` | object | no | minProperties: 1; maxProperties: 16 |
195
+ | `routes.*.match.cookies.*` | string | no | maxLength: 1024 |
196
+ | `routes.*.match.host` | string | no | maxLength: 255 |
197
+ | `routes.*.match.method` | string | no | enum: ["GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS"] |
198
+ | `routes.*.conditional` | object | no | unknown keys rejected |
199
+ | `routes.*.conditional.cases` | array | yes | minItems: 1; maxItems: 16 |
200
+ | `routes.*.conditional.cases[]` | object | no | unknown keys rejected |
201
+ | `routes.*.conditional.cases[].redirect` | object | no | unknown keys rejected |
202
+ | `routes.*.conditional.cases[].redirect.url` | string | yes | maxLength: 8192 |
203
+ | `routes.*.conditional.cases[].redirect.status` | number | no | enum: [301,302,303,307,308] |
204
+ | `routes.*.conditional.cases[].redirect.query` | object | no | unknown keys rejected |
205
+ | `routes.*.conditional.cases[].redirect.query.pass` | one of the shapes below | no | — |
206
+ | `routes.*.conditional.cases[].redirect.query.pass (option 1)` | constant | no | const: false |
207
+ | `routes.*.conditional.cases[].redirect.query.pass (option 2)` | array | no | uniqueItems: true |
208
+ | `routes.*.conditional.cases[].redirect.query.pass (option 2)[]` | string | no | — |
209
+ | `routes.*.conditional.cases[].redirect.query.map` | object | no | — |
210
+ | `routes.*.conditional.cases[].redirect.query.map.*` | object | no | unknown keys rejected |
211
+ | `routes.*.conditional.cases[].redirect.query.map.*.from` | string | yes | enum: ["path","query","header"] |
212
+ | `routes.*.conditional.cases[].redirect.query.map.*.name` | string | yes | — |
213
+ | `routes.*.conditional.cases[].respond` | object | no | unknown keys rejected |
214
+ | `routes.*.conditional.cases[].respond.status` | integer | no | minimum: 200; maximum: 599 |
215
+ | `routes.*.conditional.cases[].respond.text` | string | no | maxLength: 1048576 |
216
+ | `routes.*.conditional.cases[].respond.json` | any JSON value | no | — |
217
+ | `routes.*.conditional.cases[].match` | object | yes | minProperties: 1; unknown keys rejected |
218
+ | `routes.*.conditional.cases[].match.query` | object | no | minProperties: 1; maxProperties: 16 |
219
+ | `routes.*.conditional.cases[].match.query.*` | string | no | maxLength: 1024 |
220
+ | `routes.*.conditional.cases[].match.headers` | object | no | minProperties: 1; maxProperties: 16 |
221
+ | `routes.*.conditional.cases[].match.headers.*` | string | no | maxLength: 1024 |
222
+ | `routes.*.conditional.cases[].match.cookies` | object | no | minProperties: 1; maxProperties: 16 |
223
+ | `routes.*.conditional.cases[].match.cookies.*` | string | no | maxLength: 1024 |
224
+ | `routes.*.conditional.cases[].match.host` | string | no | maxLength: 255 |
225
+ | `routes.*.conditional.cases[].match.method` | string | no | enum: ["GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS"] |
226
+ | `routes.*.conditional.fallback` | object | no | unknown keys rejected |
227
+ | `routes.*.conditional.fallback.redirect` | object | no | unknown keys rejected |
228
+ | `routes.*.conditional.fallback.redirect.url` | string | yes | maxLength: 8192 |
229
+ | `routes.*.conditional.fallback.redirect.status` | number | no | enum: [301,302,303,307,308] |
230
+ | `routes.*.conditional.fallback.redirect.query` | object | no | unknown keys rejected |
231
+ | `routes.*.conditional.fallback.redirect.query.pass` | one of the shapes below | no | — |
232
+ | `routes.*.conditional.fallback.redirect.query.pass (option 1)` | constant | no | const: false |
233
+ | `routes.*.conditional.fallback.redirect.query.pass (option 2)` | array | no | uniqueItems: true |
234
+ | `routes.*.conditional.fallback.redirect.query.pass (option 2)[]` | string | no | — |
235
+ | `routes.*.conditional.fallback.redirect.query.map` | object | no | — |
236
+ | `routes.*.conditional.fallback.redirect.query.map.*` | object | no | unknown keys rejected |
237
+ | `routes.*.conditional.fallback.redirect.query.map.*.from` | string | yes | enum: ["path","query","header"] |
238
+ | `routes.*.conditional.fallback.redirect.query.map.*.name` | string | yes | — |
239
+ | `routes.*.conditional.fallback.respond` | object | no | unknown keys rejected |
240
+ | `routes.*.conditional.fallback.respond.status` | integer | no | minimum: 200; maximum: 599 |
241
+ | `routes.*.conditional.fallback.respond.text` | string | no | maxLength: 1048576 |
242
+ | `routes.*.conditional.fallback.respond.json` | any JSON value | no | — |
243
+ | `routes.*.proxy` | object | no | unknown keys rejected |
244
+ | `routes.*.proxy.url` | string | yes | maxLength: 8192 |
245
+ | `routes.*.proxy.headers` | object | no | maxProperties: 32 |
246
+ | `routes.*.proxy.headers.*` | one of the shapes below | no | — |
247
+ | `routes.*.proxy.headers.* (option 1)` | string | no | maxLength: 4096 |
248
+ | `routes.*.proxy.headers.* (option 2)` | object | no | unknown keys rejected |
249
+ | `routes.*.proxy.headers.* (option 2).secret` | string | yes | pattern: "^[A-Za-z_][A-Za-z0-9_]*$" |
250
+ | `routes.*.proxy.query` | array | no | maxItems: 32; uniqueItems: true |
251
+ | `routes.*.proxy.query[]` | string | no | minLength: 1; maxLength: 128 |
252
+ | `routes.*.proxy.requestHeaders` | array | no | maxItems: 32; uniqueItems: true |
253
+ | `routes.*.proxy.requestHeaders[]` | string | no | minLength: 1; maxLength: 128 |
254
+ | `routes.*.proxy.responseHeaders` | array | no | maxItems: 32; uniqueItems: true |
255
+ | `routes.*.proxy.responseHeaders[]` | string | no | minLength: 1; maxLength: 128 |
256
+ | `routes.*.signals` | array | no | minItems: 1; maxItems: 8 |
257
+ | `routes.*.signals[]` | object | no | unknown keys rejected |
258
+ | `routes.*.signals[].url` | string | yes | maxLength: 8192 |
259
+ | `routes.*.signals[].headers` | object | no | maxProperties: 32 |
260
+ | `routes.*.signals[].headers.*` | one of the shapes below | no | — |
261
+ | `routes.*.signals[].headers.* (option 1)` | string | no | maxLength: 4096 |
262
+ | `routes.*.signals[].headers.* (option 2)` | object | no | unknown keys rejected |
263
+ | `routes.*.signals[].headers.* (option 2).secret` | string | yes | pattern: "^[A-Za-z_][A-Za-z0-9_]*$" |
264
+ | `routes.*.extension` | string | no | pattern: "^[a-z][a-z0-9-]{0,63}$" |
265
+ | `routes.*.auth` | one of the shapes below | no | — |
266
+ | `routes.*.auth (option 1)` | constant | no | const: true |
267
+ | `routes.*.auth (option 2)` | object | no | unknown keys rejected |
268
+ | `routes.*.auth (option 2).required` | boolean | no | default: true |
269
+ | `routes.*.auth (option 2).role` | string | no | minLength: 1; maxLength: 64 |
270
+ | `routes.*.auth (option 2).permission` | string | no | minLength: 1; maxLength: 128 |
271
+ | `routes.*.auth (option 2).verified` | boolean | no | — |
272
+ | `routes.*.auth (option 2).freshWithinSeconds` | integer | no | minimum: 1; maximum: 3600 |
273
+ | `routes.*.auth (option 2).onDeny` | number / string | no | enum: [401,403,404,"sign-in"] |
274
+ | `routes.*.cache` | object | no | unknown keys rejected |
275
+ | `routes.*.cache.strategy` | string | no | enum: ["no-store","revalidate","public","immutable","swr","sie","micro","cdn-only","private"] |
276
+ | `routes.*.cache.maxAge` | integer | no | minimum: 0; maximum: 31536000 |
277
+ | `routes.*.cache.staleWhileRevalidate` | integer | no | minimum: 0; maximum: 31536000 |
278
+ | `routes.*.cache.staleIfError` | integer | no | minimum: 0; maximum: 31536000 |
279
+ | `routes.*.cache.cdnMaxAge` | integer | no | minimum: 0; maximum: 31536000 |
280
+ | `routes.*.cache.originTtl` | integer | no | minimum: 0; maximum: 86400 |
281
+ | `routes.*.cache.vary` | array | no | maxItems: 8; uniqueItems: true |
282
+ | `routes.*.cache.vary[]` | string | no | minLength: 1; maxLength: 128 |
283
+ | `routes.*.cache.statuses` | array | no | maxItems: 16; uniqueItems: true |
284
+ | `routes.*.cache.statuses[]` | integer | no | minimum: 200; maximum: 599 |
285
+ | `routes.*.cache.maxBytes` | integer | no | minimum: 0; maximum: 16777216 |
286
+ | `routes.*.cache.maxEntries` | integer | no | minimum: 1; maximum: 1000000 |
287
+ | `routes.*.cache.force` | boolean | no | default: false |
288
+ | `routes.*.use` | string | no | pattern: "^[a-z][a-z0-9-]{0,63}$" |
289
+ | `includes` | array | no | maxItems: 256; uniqueItems: true |
290
+ | `includes[]` | string | no | maxLength: 1024 |
291
+ | `policies` | object | no | unknown keys rejected |
292
+ | `policies.profile` | string | no | pattern: "^[a-z][a-z0-9-]{0,63}$" |
293
+ | `policies.throttle` | one of the shapes below | no | — |
294
+ | `policies.throttle (option 1)` | constant | no | const: false |
295
+ | `policies.throttle (option 2)` | object | no | unknown keys rejected |
296
+ | `policies.throttle (option 2).quota` | integer | no | minimum: 1; maximum: 1000000 |
297
+ | `policies.throttle (option 2).window` | integer | no | minimum: 1; maximum: 86400 |
298
+ | `policies.throttle (option 2).partition` | string | no | enum: ["client","route","client-route"]; default: "client" |
299
+ | `policies.throttle (option 2).status` | integer | no | default: 429; minimum: 400; maximum: 599 |
300
+ | `policies.throttle (option 2).mode` | string | no | enum: ["enforce","report"]; default: "enforce" |
301
+ | `policies.throttle (option 2).maxKeys` | integer | no | default: 100000; minimum: 1000; maximum: 10000000 |
302
+ | `policies.agents` | one of the shapes below | no | — |
303
+ | `policies.agents (option 1)` | constant | no | const: false |
304
+ | `policies.agents (option 2)` | object | no | unknown keys rejected |
305
+ | `policies.agents (option 2).deny` | array | no | maxItems: 32; uniqueItems: true |
306
+ | `policies.agents (option 2).deny[]` | string | no | minLength: 1; maxLength: 1024 |
307
+ | `policies.agents (option 2).allow` | array | no | maxItems: 32; uniqueItems: true |
308
+ | `policies.agents (option 2).allow[]` | string | no | minLength: 1; maxLength: 1024 |
309
+ | `policies.agents (option 2).denyPatterns` | array | no | maxItems: 256; uniqueItems: true |
310
+ | `policies.agents (option 2).denyPatterns[]` | string | no | minLength: 1; maxLength: 256 |
311
+ | `policies.agents (option 2).allowPatterns` | array | no | maxItems: 256; uniqueItems: true |
312
+ | `policies.agents (option 2).allowPatterns[]` | string | no | minLength: 1; maxLength: 256 |
313
+ | `policies.agents (option 2).denyEmpty` | boolean | no | default: false |
314
+ | `policies.agents (option 2).status` | integer | no | default: 403; minimum: 400; maximum: 599 |
315
+ | `policies.agents (option 2).mode` | string | no | enum: ["enforce","report"]; default: "enforce" |
316
+ | `policies.security` | one of the shapes below | no | — |
317
+ | `policies.security (option 1)` | constant | no | const: false |
318
+ | `policies.security (option 2)` | object | no | unknown keys rejected |
319
+ | `policies.security (option 2).headers` | string | no | enum: ["oshp","oshp-no-csp","off"]; default: "oshp" |
320
+ | `policies.security (option 2).set` | object | no | maxProperties: 32 |
321
+ | `policies.security (option 2).set.*` | string | no | maxLength: 4096 |
322
+ | `policies.security (option 2).unset` | array | no | maxItems: 32; uniqueItems: true |
323
+ | `policies.security (option 2).unset[]` | string | no | minLength: 1; maxLength: 128 |
324
+ | `policies.compression` | one of the shapes below | no | — |
325
+ | `policies.compression (option 1)` | constant | no | const: false |
326
+ | `policies.compression (option 2)` | object | no | unknown keys rejected |
327
+ | `policies.compression (option 2).encodings` | array | no | default: ["br","gzip"]; minItems: 1; uniqueItems: true |
328
+ | `policies.compression (option 2).encodings[]` | string | no | enum: ["br","gzip","deflate","zstd"] |
329
+ | `policies.compression (option 2).minBytes` | integer | no | default: 1024; minimum: 0; maximum: 1048576 |
330
+ | `policies.compression (option 2).types` | array | no | maxItems: 64; uniqueItems: true |
331
+ | `policies.compression (option 2).types[]` | string | no | minLength: 1; maxLength: 128 |
332
+ | `policies.compression (option 2).level` | integer | no | minimum: 1; maximum: 11 |
333
+ | `policies.compression (option 2).allowWithSecrets` | boolean | no | default: false |
334
+ | `policies.cache` | one of the shapes below | no | — |
335
+ | `policies.cache (option 1)` | constant | no | const: false |
336
+ | `policies.cache (option 2)` | object | no | unknown keys rejected |
337
+ | `policies.cache (option 2).strategy` | string | no | enum: ["no-store","revalidate","public","immutable","swr","sie","micro","cdn-only","private"] |
338
+ | `policies.cache (option 2).maxAge` | integer | no | minimum: 0; maximum: 31536000 |
339
+ | `policies.cache (option 2).staleWhileRevalidate` | integer | no | minimum: 0; maximum: 31536000 |
340
+ | `policies.cache (option 2).staleIfError` | integer | no | minimum: 0; maximum: 31536000 |
341
+ | `policies.cache (option 2).cdnMaxAge` | integer | no | minimum: 0; maximum: 31536000 |
342
+ | `policies.cache (option 2).originTtl` | integer | no | minimum: 0; maximum: 86400 |
343
+ | `policies.cache (option 2).vary` | array | no | maxItems: 8; uniqueItems: true |
344
+ | `policies.cache (option 2).vary[]` | string | no | minLength: 1; maxLength: 128 |
345
+ | `policies.cache (option 2).statuses` | array | no | maxItems: 16; uniqueItems: true |
346
+ | `policies.cache (option 2).statuses[]` | integer | no | minimum: 200; maximum: 599 |
347
+ | `policies.cache (option 2).maxBytes` | integer | no | minimum: 0; maximum: 16777216 |
348
+ | `policies.cache (option 2).maxEntries` | integer | no | minimum: 1; maximum: 1000000 |
349
+ | `policies.cache (option 2).force` | boolean | no | default: false |
350
+ | `policies.extensions` | one of the shapes below | no | — |
351
+ | `policies.extensions (option 1)` | constant | no | const: false |
352
+ | `policies.extensions (option 2)` | object | no | maxProperties: 16 |
353
+ | `policies.extensions (option 2).*` | one of the shapes below | no | — |
354
+ | `policies.extensions (option 2).* (option 1)` | constant | no | const: false |
355
+ | `policies.extensions (option 2).* (option 2)` | object | no | — |
356
+ | `profiles` | object | no | maxProperties: 32 |
357
+ | `profiles.*` | object | no | unknown keys rejected |
358
+ | `profiles.*.throttle` | one of the shapes below | no | — |
359
+ | `profiles.*.throttle (option 1)` | constant | no | const: false |
360
+ | `profiles.*.throttle (option 2)` | object | no | unknown keys rejected |
361
+ | `profiles.*.throttle (option 2).quota` | integer | no | minimum: 1; maximum: 1000000 |
362
+ | `profiles.*.throttle (option 2).window` | integer | no | minimum: 1; maximum: 86400 |
363
+ | `profiles.*.throttle (option 2).partition` | string | no | enum: ["client","route","client-route"]; default: "client" |
364
+ | `profiles.*.throttle (option 2).status` | integer | no | default: 429; minimum: 400; maximum: 599 |
365
+ | `profiles.*.throttle (option 2).mode` | string | no | enum: ["enforce","report"]; default: "enforce" |
366
+ | `profiles.*.throttle (option 2).maxKeys` | integer | no | default: 100000; minimum: 1000; maximum: 10000000 |
367
+ | `profiles.*.agents` | one of the shapes below | no | — |
368
+ | `profiles.*.agents (option 1)` | constant | no | const: false |
369
+ | `profiles.*.agents (option 2)` | object | no | unknown keys rejected |
370
+ | `profiles.*.agents (option 2).deny` | array | no | maxItems: 32; uniqueItems: true |
371
+ | `profiles.*.agents (option 2).deny[]` | string | no | minLength: 1; maxLength: 1024 |
372
+ | `profiles.*.agents (option 2).allow` | array | no | maxItems: 32; uniqueItems: true |
373
+ | `profiles.*.agents (option 2).allow[]` | string | no | minLength: 1; maxLength: 1024 |
374
+ | `profiles.*.agents (option 2).denyPatterns` | array | no | maxItems: 256; uniqueItems: true |
375
+ | `profiles.*.agents (option 2).denyPatterns[]` | string | no | minLength: 1; maxLength: 256 |
376
+ | `profiles.*.agents (option 2).allowPatterns` | array | no | maxItems: 256; uniqueItems: true |
377
+ | `profiles.*.agents (option 2).allowPatterns[]` | string | no | minLength: 1; maxLength: 256 |
378
+ | `profiles.*.agents (option 2).denyEmpty` | boolean | no | default: false |
379
+ | `profiles.*.agents (option 2).status` | integer | no | default: 403; minimum: 400; maximum: 599 |
380
+ | `profiles.*.agents (option 2).mode` | string | no | enum: ["enforce","report"]; default: "enforce" |
381
+ | `profiles.*.security` | one of the shapes below | no | — |
382
+ | `profiles.*.security (option 1)` | constant | no | const: false |
383
+ | `profiles.*.security (option 2)` | object | no | unknown keys rejected |
384
+ | `profiles.*.security (option 2).headers` | string | no | enum: ["oshp","oshp-no-csp","off"]; default: "oshp" |
385
+ | `profiles.*.security (option 2).set` | object | no | maxProperties: 32 |
386
+ | `profiles.*.security (option 2).set.*` | string | no | maxLength: 4096 |
387
+ | `profiles.*.security (option 2).unset` | array | no | maxItems: 32; uniqueItems: true |
388
+ | `profiles.*.security (option 2).unset[]` | string | no | minLength: 1; maxLength: 128 |
389
+ | `profiles.*.compression` | one of the shapes below | no | — |
390
+ | `profiles.*.compression (option 1)` | constant | no | const: false |
391
+ | `profiles.*.compression (option 2)` | object | no | unknown keys rejected |
392
+ | `profiles.*.compression (option 2).encodings` | array | no | default: ["br","gzip"]; minItems: 1; uniqueItems: true |
393
+ | `profiles.*.compression (option 2).encodings[]` | string | no | enum: ["br","gzip","deflate","zstd"] |
394
+ | `profiles.*.compression (option 2).minBytes` | integer | no | default: 1024; minimum: 0; maximum: 1048576 |
395
+ | `profiles.*.compression (option 2).types` | array | no | maxItems: 64; uniqueItems: true |
396
+ | `profiles.*.compression (option 2).types[]` | string | no | minLength: 1; maxLength: 128 |
397
+ | `profiles.*.compression (option 2).level` | integer | no | minimum: 1; maximum: 11 |
398
+ | `profiles.*.compression (option 2).allowWithSecrets` | boolean | no | default: false |
399
+ | `profiles.*.cache` | one of the shapes below | no | — |
400
+ | `profiles.*.cache (option 1)` | constant | no | const: false |
401
+ | `profiles.*.cache (option 2)` | object | no | unknown keys rejected |
402
+ | `profiles.*.cache (option 2).strategy` | string | no | enum: ["no-store","revalidate","public","immutable","swr","sie","micro","cdn-only","private"] |
403
+ | `profiles.*.cache (option 2).maxAge` | integer | no | minimum: 0; maximum: 31536000 |
404
+ | `profiles.*.cache (option 2).staleWhileRevalidate` | integer | no | minimum: 0; maximum: 31536000 |
405
+ | `profiles.*.cache (option 2).staleIfError` | integer | no | minimum: 0; maximum: 31536000 |
406
+ | `profiles.*.cache (option 2).cdnMaxAge` | integer | no | minimum: 0; maximum: 31536000 |
407
+ | `profiles.*.cache (option 2).originTtl` | integer | no | minimum: 0; maximum: 86400 |
408
+ | `profiles.*.cache (option 2).vary` | array | no | maxItems: 8; uniqueItems: true |
409
+ | `profiles.*.cache (option 2).vary[]` | string | no | minLength: 1; maxLength: 128 |
410
+ | `profiles.*.cache (option 2).statuses` | array | no | maxItems: 16; uniqueItems: true |
411
+ | `profiles.*.cache (option 2).statuses[]` | integer | no | minimum: 200; maximum: 599 |
412
+ | `profiles.*.cache (option 2).maxBytes` | integer | no | minimum: 0; maximum: 16777216 |
413
+ | `profiles.*.cache (option 2).maxEntries` | integer | no | minimum: 1; maximum: 1000000 |
414
+ | `profiles.*.cache (option 2).force` | boolean | no | default: false |
415
+ | `profiles.*.extensions` | one of the shapes below | no | — |
416
+ | `profiles.*.extensions (option 1)` | constant | no | const: false |
417
+ | `profiles.*.extensions (option 2)` | object | no | maxProperties: 16 |
418
+ | `profiles.*.extensions (option 2).*` | one of the shapes below | no | — |
419
+ | `profiles.*.extensions (option 2).* (option 1)` | constant | no | const: false |
420
+ | `profiles.*.extensions (option 2).* (option 2)` | object | no | — |
421
+ | `site` | object | no | unknown keys rejected |
422
+ | `site.robots` | object | no | unknown keys rejected |
423
+ | `site.robots.disallow` | array | no | maxItems: 1024; uniqueItems: true |
424
+ | `site.robots.disallow[]` | string | no | minLength: 1; maxLength: 2048 |
425
+ | `site.robots.allow` | array | no | maxItems: 1024; uniqueItems: true |
426
+ | `site.robots.allow[]` | string | no | minLength: 1; maxLength: 2048 |
427
+ | `site.robots.sitemap` | boolean | no | — |
428
+ | `site.robots.extra` | array | no | maxItems: 1024 |
429
+ | `site.robots.extra[]` | string | no | maxLength: 2048 |
430
+ | `site.sitemap` | one of the shapes below | no | — |
431
+ | `site.sitemap (option 1)` | constant | no | const: true |
432
+ | `site.sitemap (option 2)` | object | no | unknown keys rejected |
433
+ | `site.sitemap (option 2).exclude` | array | no | maxItems: 1024; uniqueItems: true |
434
+ | `site.sitemap (option 2).exclude[]` | string | no | minLength: 1; maxLength: 2048 |
435
+ | `site.sitemap (option 2).changefreq` | string | no | enum: ["always","hourly","daily","weekly","monthly","yearly","never"] |
436
+ | `site.sitemap (option 2).priority` | number | no | minimum: 0; maximum: 1 |
437
+ | `site.favicon` | string | no | minLength: 1; maxLength: 1024 |
438
+ | `site.securityTxt` | object | no | unknown keys rejected |
439
+ | `site.securityTxt.contact` | array | yes | minItems: 1; maxItems: 64 |
440
+ | `site.securityTxt.contact[]` | string | no | minLength: 1; maxLength: 2048 |
441
+ | `site.securityTxt.expires` | string | yes | pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?Z$" |
442
+ | `site.securityTxt.policy` | array | no | maxItems: 64 |
443
+ | `site.securityTxt.policy[]` | string | no | maxLength: 2048; pattern: "^https://" |
444
+ | `site.securityTxt.acknowledgments` | array | no | maxItems: 64 |
445
+ | `site.securityTxt.acknowledgments[]` | string | no | maxLength: 2048; pattern: "^https://" |
446
+ | `site.securityTxt.preferredLanguages` | array | no | minItems: 1; maxItems: 64 |
447
+ | `site.securityTxt.preferredLanguages[]` | string | no | minLength: 2; maxLength: 35 |
448
+ | `site.securityTxt.canonical` | array | no | maxItems: 64 |
449
+ | `site.securityTxt.canonical[]` | string | no | maxLength: 2048; pattern: "^https://" |
450
+ | `site.securityTxt.encryption` | array | no | maxItems: 64 |
451
+ | `site.securityTxt.encryption[]` | string | no | minLength: 1; maxLength: 2048 |
452
+ | `site.llms` | string | no | minLength: 1; maxLength: 1024 |
453
+ | `site.notFound` | string | no | minLength: 1; maxLength: 1024; pattern: "\\.[hH][tT][mM][lL]?$" |
454
+ | `extensions` | object | no | maxProperties: 16 |
455
+ | `extensions.*` | object | no | unknown keys rejected |
456
+ | `extensions.*.version` | constant | yes | const: "1" |
457
+ | `extensions.*.config` | object | yes | — |
458
+ | `shared` | object | no | maxProperties: 32 |
459
+ | `shared.*` | object | no | unknown keys rejected |
460
+ | `shared.*.request` | object | no | unknown keys rejected |
461
+ | `shared.*.request.body` | object | no | unknown keys rejected |
462
+ | `shared.*.request.body.required` | boolean | no | — |
463
+ | `shared.*.request.body.maxBytes` | integer | no | minimum: 0; maximum: 1048576 |
464
+ | `shared.*.request.body.contentTypes` | array | no | minItems: 1; maxItems: 16; uniqueItems: true |
465
+ | `shared.*.request.body.contentTypes[]` | string | no | pattern: "^[a-z0-9!#$&^_.+-]+/[a-z0-9!#$&^_.+-]+$" |
466
+ | `shared.*.request.body.format` | string | no | enum: ["text","json"] |
467
+ | `shared.*.request.body.schema` | object | no | — |
468
+ | `shared.*.response` | object | no | unknown keys rejected |
469
+ | `shared.*.response.headers` | object | no | maxProperties: 64 |
470
+ | `shared.*.response.headers.*` | one of the shapes below | no | — |
471
+ | `shared.*.response.headers.* (option 1)` | string | no | maxLength: 4096 |
472
+ | `shared.*.response.headers.* (option 2)` | array | no | minItems: 1; maxItems: 16 |
473
+ | `shared.*.response.headers.* (option 2)[]` | string | no | maxLength: 4096 |