@jimhoyd/urlcode 0.5.0 → 0.5.6
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/.claude/skills/urlcode-authoring/SKILL.md +1 -1
- package/.claude/skills/urlcode-operations/SKILL.md +1 -1
- package/README.md +13 -16
- package/dist/BUILD-MANIFEST.json +21 -18
- package/dist/agents-guide.js +1 -1
- package/dist/authoring.js +50 -9
- package/dist/capabilities.js +1 -1
- package/dist/cli.js +20 -7
- package/dist/ecosystem-cli.js +6 -0
- package/dist/explain-cli.js +1 -1
- package/dist/explain.js +2 -2
- package/dist/extension-artifacts.js +10 -23
- package/dist/extension-bundles.js +8 -16
- package/dist/extension-transport.js +41 -0
- package/dist/feature-plan.js +99 -0
- package/dist/index.js +2 -2
- package/dist/mcp.js +6 -2
- package/dist/policies/agents.js +1 -1
- package/dist/policies/security.js +1 -1
- package/dist/policies.js +1 -1
- package/dist/review.js +206 -0
- package/dist/router.js +15 -2
- package/dist/scripts/operational-drills.js +1 -1
- package/dist/tooling.js +4 -0
- package/dist/types/authoring.d.ts +2 -0
- package/dist/types/explain.d.ts +3 -0
- package/dist/types/extension-artifacts.d.ts +2 -4
- package/dist/types/extension-transport.d.ts +31 -0
- package/dist/types/feature-plan.d.ts +67 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/review.d.ts +30 -0
- package/dist/types/tooling.d.ts +4 -0
- package/dist/types/types.d.ts +9 -1
- package/dist/types.js +10 -3
- package/docs/AI-AUTHORING.md +466 -0
- package/docs/FUNCTION-SECURITY.md +251 -0
- package/docs/README.md +96 -0
- package/docs/TOOLING.md +422 -0
- package/docs/YAML-REFERENCE.md +473 -0
- package/examples/assets/example.yaml +3 -3
- package/examples/aws/example.yaml +3 -3
- package/examples/cloudflare/example.yaml +3 -3
- package/examples/compliance/README.md +1 -1
- package/examples/compliance/example.yaml +1 -1
- package/examples/conditions/example.yaml +3 -3
- package/examples/cookbook/README.md +4 -4
- package/examples/cookbook/example.yaml +3 -3
- package/examples/coverage-waiver/example.yaml +3 -3
- package/examples/egress/example.yaml +2 -2
- package/examples/extensions/example.yaml +1 -1
- package/examples/lifecycle/example.yaml +2 -2
- package/examples/not-found/README.md +2 -2
- package/examples/not-found/example.yaml +3 -3
- package/examples/prerender/README.md +4 -4
- package/examples/prerender/example.yaml +2 -2
- package/examples/provider-conformance/example.yaml +2 -2
- package/examples/shared-blocks/example.yaml +3 -3
- package/examples/vercel/example.yaml +3 -3
- package/llms-full.txt +119 -84
- package/llms.txt +28 -19
- package/package.json +19 -13
- package/recipes/store-crud/README.md +9 -10
- package/recipes/store-crud/recipe.yaml +1 -1
- package/schemas/urlcode.schema.json +3 -0
- package/skills/urlcode/SKILL.md +1 -1
- package/starters/default/AGENTS.md +1 -1
- package/starters/default/README.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 |
|
|
@@ -9,9 +9,9 @@ files: [urlcode.yaml, functions/hello.mjs, public/about.html, public/guide.txt,
|
|
|
9
9
|
tests:
|
|
10
10
|
fixtures: tests/requests.json
|
|
11
11
|
commands:
|
|
12
|
-
- node src/cli.ts validate --local --project examples/assets
|
|
13
|
-
- node src/cli.ts test --project examples/assets
|
|
14
|
-
- node src/cli.ts audit --project examples/assets --expect-routes 5
|
|
12
|
+
- node packages/core/src/cli.ts validate --local --project examples/assets
|
|
13
|
+
- node packages/core/src/cli.ts test --project examples/assets
|
|
14
|
+
- node packages/core/src/cli.ts audit --project examples/assets --expect-routes 5
|
|
15
15
|
behavior:
|
|
16
16
|
- native page, static and download routes serve snapshotted files with explicit caching
|
|
17
17
|
- one trusted function shows the two kinds of route side by side
|
|
@@ -12,9 +12,9 @@ files: [urlcode.yaml, handler.mjs, template.yaml, public/index.html, public/note
|
|
|
12
12
|
tests:
|
|
13
13
|
fixtures: tests/requests.json
|
|
14
14
|
commands:
|
|
15
|
-
- node src/cli.ts validate --local --project examples/aws
|
|
16
|
-
- node src/cli.ts test --project examples/aws
|
|
17
|
-
- node src/cli.ts audit --project examples/aws --expect-routes 5
|
|
15
|
+
- node packages/core/src/cli.ts validate --local --project examples/aws
|
|
16
|
+
- node packages/core/src/cli.ts test --project examples/aws
|
|
17
|
+
- node packages/core/src/cli.ts audit --project examples/aws --expect-routes 5
|
|
18
18
|
behavior:
|
|
19
19
|
- every route is native, so the project activates on Lambda without the sandbox
|
|
20
20
|
- handler.mjs wraps the project with createLambdaHandler; deployment itself is unverified evidence
|
|
@@ -12,8 +12,8 @@ files: [urlcode.yaml, wrangler.toml, tests/requests.json, README.md]
|
|
|
12
12
|
tests:
|
|
13
13
|
fixtures: tests/requests.json
|
|
14
14
|
commands:
|
|
15
|
-
- node src/cli.ts validate --local --project examples/cloudflare
|
|
16
|
-
- node src/cli.ts test --project examples/cloudflare
|
|
17
|
-
- node src/cli.ts audit --project examples/cloudflare --expect-routes 4
|
|
15
|
+
- node packages/core/src/cli.ts validate --local --project examples/cloudflare
|
|
16
|
+
- node packages/core/src/cli.ts test --project examples/cloudflare
|
|
17
|
+
- node packages/core/src/cli.ts audit --project examples/cloudflare --expect-routes 4
|
|
18
18
|
behavior:
|
|
19
19
|
- only capabilities the Worker lowering supports appear, so the build succeeds on every target
|
|
@@ -10,7 +10,7 @@ Run it against the cookbook from the runtime checkout. The module must be an
|
|
|
10
10
|
absolute path outside the audited project:
|
|
11
11
|
|
|
12
12
|
```sh
|
|
13
|
-
node src/cli.ts audit --project examples/cookbook \
|
|
13
|
+
node packages/core/src/cli.ts audit --project examples/cookbook \
|
|
14
14
|
--compliance baseline --compliance-rules "$PWD/examples/compliance/rules.mjs" --compliance-warn
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -6,6 +6,6 @@ runnable: false
|
|
|
6
6
|
files: [rules.mjs, README.md]
|
|
7
7
|
tests:
|
|
8
8
|
commands:
|
|
9
|
-
- node src/cli.ts audit --project examples/cookbook --compliance baseline --compliance-rules "$PWD/examples/compliance/rules.mjs" --compliance-warn
|
|
9
|
+
- node packages/core/src/cli.ts audit --project examples/cookbook --compliance baseline --compliance-rules "$PWD/examples/compliance/rules.mjs" --compliance-warn
|
|
10
10
|
behavior:
|
|
11
11
|
- three custom rules run alongside the built-in profile; one built-in notice is disabled and one severity raised
|
|
@@ -12,8 +12,8 @@ files: [urlcode.yaml, tests/requests.json, README.md]
|
|
|
12
12
|
tests:
|
|
13
13
|
fixtures: tests/requests.json
|
|
14
14
|
commands:
|
|
15
|
-
- node src/cli.ts validate --local --project examples/conditions --origin https://conditions.example.test
|
|
16
|
-
- node src/cli.ts test --project examples/conditions --origin https://conditions.example.test
|
|
17
|
-
- node src/cli.ts audit --project examples/conditions --expect-routes 4 --origin https://conditions.example.test
|
|
15
|
+
- node packages/core/src/cli.ts validate --local --project examples/conditions --origin https://conditions.example.test
|
|
16
|
+
- node packages/core/src/cli.ts test --project examples/conditions --origin https://conditions.example.test
|
|
17
|
+
- node packages/core/src/cli.ts audit --project examples/conditions --expect-routes 4 --origin https://conditions.example.test
|
|
18
18
|
behavior:
|
|
19
19
|
- cases are provably disjoint and every branch stays no-store; no branch is authentication
|
|
@@ -11,10 +11,10 @@ external services are required. Redirects target example.com; tests never follow
|
|
|
11
11
|
From the runtime checkout:
|
|
12
12
|
|
|
13
13
|
```sh
|
|
14
|
-
node src/cli.ts validate --project examples/cookbook
|
|
15
|
-
node src/cli.ts test --project examples/cookbook
|
|
16
|
-
node src/cli.ts audit --project examples/cookbook --expect-routes 40
|
|
17
|
-
node src/cli.ts dev --project examples/cookbook
|
|
14
|
+
node packages/core/src/cli.ts validate --project examples/cookbook
|
|
15
|
+
node packages/core/src/cli.ts test --project examples/cookbook
|
|
16
|
+
node packages/core/src/cli.ts audit --project examples/cookbook --expect-routes 40
|
|
17
|
+
node packages/core/src/cli.ts dev --project examples/cookbook
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
The [YAML guide](../../docs/YAML-GUIDE.md) explains the recipes and binding policy.
|
|
@@ -9,9 +9,9 @@ files: [urlcode.yaml, routes/code.yaml, routes/redirects.yaml, routes/responses.
|
|
|
9
9
|
tests:
|
|
10
10
|
fixtures: tests/requests.json
|
|
11
11
|
commands:
|
|
12
|
-
- node src/cli.ts validate --local --project examples/cookbook
|
|
13
|
-
- node src/cli.ts test --project examples/cookbook
|
|
14
|
-
- node src/cli.ts audit --project examples/cookbook --expect-routes 40
|
|
12
|
+
- node packages/core/src/cli.ts validate --local --project examples/cookbook
|
|
13
|
+
- node packages/core/src/cli.ts test --project examples/cookbook
|
|
14
|
+
- node packages/core/src/cli.ts audit --project examples/cookbook --expect-routes 40
|
|
15
15
|
behavior:
|
|
16
16
|
- urlcode examples search finds single routes here through the generated route-index.json
|
|
17
17
|
- fifteen routes exercise the fourteen middleware modules that the middleware recipe copies
|
|
@@ -9,8 +9,8 @@ files: [urlcode.yaml, functions/notes.mjs, tests/requests.json, README.md]
|
|
|
9
9
|
tests:
|
|
10
10
|
fixtures: tests/requests.json
|
|
11
11
|
commands:
|
|
12
|
-
- node src/cli.ts validate --local --project examples/coverage-waiver
|
|
13
|
-
- node src/cli.ts test --project examples/coverage-waiver
|
|
14
|
-
- node src/cli.ts audit --project examples/coverage-waiver --expect-routes 1
|
|
12
|
+
- node packages/core/src/cli.ts validate --local --project examples/coverage-waiver
|
|
13
|
+
- node packages/core/src/cli.ts test --project examples/coverage-waiver
|
|
14
|
+
- node packages/core/src/cli.ts audit --project examples/coverage-waiver --expect-routes 1
|
|
15
15
|
behavior:
|
|
16
16
|
- POST /notes is waived from coverage with a reason; GET is asserted by a fixture; the waiver is listed by audit, not hidden
|
|
@@ -13,7 +13,7 @@ grants:
|
|
|
13
13
|
files: [urlcode.yaml, README.md]
|
|
14
14
|
tests:
|
|
15
15
|
commands:
|
|
16
|
-
- node src/cli.ts permissions --project examples/egress
|
|
17
|
-
- node src/cli.ts validate --local --project examples/egress --policy /operator/egress-policy.json
|
|
16
|
+
- node packages/core/src/cli.ts permissions --project examples/egress
|
|
17
|
+
- node packages/core/src/cli.ts validate --local --project examples/egress --policy /operator/egress-policy.json
|
|
18
18
|
behavior:
|
|
19
19
|
- without the policy the project refuses to activate; nothing here reaches the network during authoring inspection
|
|
@@ -16,6 +16,6 @@ grants:
|
|
|
16
16
|
files: [urlcode.yaml, README.md]
|
|
17
17
|
tests:
|
|
18
18
|
commands:
|
|
19
|
-
- node src/cli.ts validate --local --project examples/extensions --host-file /operator/host.mjs --origin https://extensions.example.test
|
|
19
|
+
- node packages/core/src/cli.ts validate --local --project examples/extensions --host-file /operator/host.mjs --origin https://extensions.example.test
|
|
20
20
|
behavior:
|
|
21
21
|
- "/account uses auth: {role: member}; routes and audit show the expanded policies.extensions.auth form"
|
|
@@ -12,8 +12,8 @@ files: [urlcode.yaml, functions/notes.mjs, tests/requests.json, README.md]
|
|
|
12
12
|
tests:
|
|
13
13
|
fixtures: tests/requests.json
|
|
14
14
|
commands:
|
|
15
|
-
- node src/cli.ts test --project examples/lifecycle
|
|
16
|
-
- node src/cli.ts audit --project examples/lifecycle --expect-routes 2
|
|
15
|
+
- node packages/core/src/cli.ts test --project examples/lifecycle
|
|
16
|
+
- node packages/core/src/cli.ts audit --project examples/lifecycle --expect-routes 2
|
|
17
17
|
behavior:
|
|
18
18
|
- a note created by POST /notes is readable, replaceable and still present after the runtime restarts on the same data directory
|
|
19
19
|
- the id and Location the create response returns are captured and substituted into later steps as {{id}} and {{where}}
|