@jimhoyd/urlcode 0.3.0 → 0.4.0-alpha.2

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 (380) hide show
  1. package/.claude/skills/urlcode-authoring/SKILL.md +122 -0
  2. package/.claude/skills/urlcode-operations/SKILL.md +108 -0
  3. package/.claude-plugin/marketplace.json +18 -0
  4. package/CONTRIBUTING.md +30 -2
  5. package/README.md +195 -255
  6. package/ROADMAP.md +143 -15
  7. package/SECURITY.md +31 -9
  8. package/dist/BUILD-MANIFEST.json +72 -47
  9. package/dist/adapters.js +4 -23
  10. package/dist/agent-lists.js +1 -1
  11. package/dist/agents-guide.js +113 -0
  12. package/dist/authoring-files.js +60 -0
  13. package/dist/authoring.js +11 -1
  14. package/dist/aws.js +4 -3
  15. package/dist/build-cloudflare.js +11 -24
  16. package/dist/build-static.js +134 -0
  17. package/dist/bulk.js +37 -0
  18. package/dist/capabilities.js +262 -0
  19. package/dist/capability-query.js +71 -0
  20. package/dist/catalog.js +105 -0
  21. package/dist/cli.js +165 -34
  22. package/dist/client-address.js +1 -1
  23. package/dist/compliance-rules/baseline.js +9 -17
  24. package/dist/compliance-rules/privacy.js +7 -18
  25. package/dist/compliance-rules/shared.js +0 -2
  26. package/dist/compliance-rules/strict.js +5 -5
  27. package/dist/compliance.js +6 -8
  28. package/dist/conditions.js +88 -0
  29. package/dist/config.js +69 -6
  30. package/dist/context.js +155 -0
  31. package/dist/ecosystem-cli.js +88 -0
  32. package/dist/egress.js +98 -0
  33. package/dist/examples.js +92 -0
  34. package/dist/explain-cli.js +64 -0
  35. package/dist/explain.js +131 -0
  36. package/dist/extensions.js +231 -0
  37. package/dist/function-sources.js +49 -5
  38. package/dist/function-worker.js +3 -1
  39. package/dist/functions.js +84 -13
  40. package/dist/guest-api.js +29 -3
  41. package/dist/index.js +40 -6
  42. package/dist/init-with.js +165 -0
  43. package/dist/interchange-cli.js +42 -0
  44. package/dist/interchange.js +189 -0
  45. package/dist/manifest.js +109 -0
  46. package/dist/match.js +2 -2
  47. package/dist/mcp-authoring.js +147 -0
  48. package/dist/mcp.js +97 -0
  49. package/dist/observability.js +7 -21
  50. package/dist/operator-host.js +29 -0
  51. package/dist/plugins.js +12 -0
  52. package/dist/policies/agents.js +2 -2
  53. package/dist/policies/cache.js +8 -3
  54. package/dist/policies/compression.js +2 -1
  55. package/dist/policies/security.js +0 -0
  56. package/dist/policies.js +1 -1
  57. package/dist/policy.js +56 -15
  58. package/dist/prerender.js +100 -41
  59. package/dist/project-tests.js +3 -3
  60. package/dist/provider-verification.js +92 -0
  61. package/dist/proxy.js +44 -0
  62. package/dist/readiness.js +34 -11
  63. package/dist/recipes.js +41 -0
  64. package/dist/route-diff.js +106 -0
  65. package/dist/router.js +45 -7
  66. package/dist/runtime.js +164 -64
  67. package/dist/sandbox.js +48 -0
  68. package/dist/scaffold.js +0 -0
  69. package/dist/schema-query.js +62 -0
  70. package/dist/scripts/operational-drills.js +12 -54
  71. package/dist/server.js +3 -29
  72. package/dist/signals.js +24 -0
  73. package/dist/site.js +0 -0
  74. package/dist/tooling.js +96 -0
  75. package/dist/trusted-functions.js +210 -0
  76. package/dist/types/adapters.d.ts +7 -4
  77. package/dist/types/agent-lists.d.ts +0 -1
  78. package/dist/types/agents-guide.d.ts +17 -0
  79. package/dist/types/authoring-files.d.ts +10 -0
  80. package/dist/types/aws.d.ts +3 -1
  81. package/dist/types/build-cloudflare.d.ts +1 -0
  82. package/dist/types/build-static.d.ts +43 -0
  83. package/dist/types/bulk.d.ts +27 -0
  84. package/dist/types/capabilities.d.ts +64 -0
  85. package/dist/types/capability-query.d.ts +24 -0
  86. package/dist/types/catalog.d.ts +65 -0
  87. package/dist/types/client-address.d.ts +0 -1
  88. package/dist/types/compliance-rules/baseline.d.ts +1 -9
  89. package/dist/types/compliance-rules/privacy.d.ts +1 -4
  90. package/dist/types/compliance-rules/shared.d.ts +0 -2
  91. package/dist/types/compliance-rules/strict.d.ts +0 -5
  92. package/dist/types/compliance.d.ts +0 -3
  93. package/dist/types/conditions.d.ts +19 -0
  94. package/dist/types/config.d.ts +21 -2
  95. package/dist/types/context.d.ts +66 -0
  96. package/dist/types/ecosystem-cli.d.ts +17 -0
  97. package/dist/types/egress.d.ts +46 -0
  98. package/dist/types/examples.d.ts +50 -0
  99. package/dist/types/explain-cli.d.ts +11 -0
  100. package/dist/types/explain.d.ts +95 -0
  101. package/dist/types/extensions.d.ts +177 -0
  102. package/dist/types/function-sources.d.ts +9 -0
  103. package/dist/types/functions.d.ts +48 -5
  104. package/dist/types/guest-api.d.ts +1 -0
  105. package/dist/types/index.d.ts +36 -6
  106. package/dist/types/init-with.d.ts +30 -0
  107. package/dist/types/interchange-cli.d.ts +16 -0
  108. package/dist/types/interchange.d.ts +42 -0
  109. package/dist/types/manifest.d.ts +79 -0
  110. package/dist/types/match.d.ts +1 -0
  111. package/dist/types/mcp-authoring.d.ts +92 -0
  112. package/dist/types/mcp.d.ts +12 -0
  113. package/dist/types/observability.d.ts +3 -14
  114. package/dist/types/operator-host.d.ts +8 -0
  115. package/dist/types/plugins.d.ts +2 -0
  116. package/dist/types/policies/agents.d.ts +0 -2
  117. package/dist/types/policies/compression.d.ts +2 -0
  118. package/dist/types/policies/security.d.ts +0 -1
  119. package/dist/types/policy.d.ts +15 -4
  120. package/dist/types/project-tests.d.ts +3 -2
  121. package/dist/types/provider-verification.d.ts +53 -0
  122. package/dist/types/proxy.d.ts +21 -0
  123. package/dist/types/readiness.d.ts +10 -3
  124. package/dist/types/recipes.d.ts +30 -0
  125. package/dist/types/route-diff.d.ts +27 -0
  126. package/dist/types/router.d.ts +2 -1
  127. package/dist/types/runtime.d.ts +11 -27
  128. package/dist/types/sandbox.d.ts +12 -0
  129. package/dist/types/scaffold.d.ts +0 -2
  130. package/dist/types/schema-query.d.ts +12 -0
  131. package/dist/types/server.d.ts +1 -4
  132. package/dist/types/signals.d.ts +25 -0
  133. package/dist/types/site.d.ts +0 -1
  134. package/dist/types/tooling.d.ts +115 -0
  135. package/dist/types/trusted-functions.d.ts +29 -0
  136. package/dist/types/types.d.ts +71 -7
  137. package/dist/types/typescript-authoring.d.ts +12 -0
  138. package/dist/types/vercel.d.ts +3 -1
  139. package/dist/types/verify-deployment.d.ts +47 -0
  140. package/dist/types.js +37 -5
  141. package/dist/typescript-authoring.js +142 -0
  142. package/dist/vercel.js +4 -3
  143. package/dist/verify-deployment.js +270 -0
  144. package/docs/AI-AUTHORING.md +232 -15
  145. package/docs/AWS.md +4 -4
  146. package/docs/BEST-PRACTICES.md +3 -2
  147. package/docs/BULK.md +79 -0
  148. package/docs/CAPABILITIES.md +192 -0
  149. package/docs/CAPACITY.md +129 -32
  150. package/docs/CI.md +142 -0
  151. package/docs/CLOUDFLARE.md +1 -2
  152. package/docs/COMPLIANCE.md +6 -9
  153. package/docs/CONDITIONS.md +74 -0
  154. package/docs/DEPLOYMENT-CHECKS.md +108 -0
  155. package/docs/EGRESS.md +125 -0
  156. package/docs/EXTENSIONS.md +398 -0
  157. package/docs/FRAMEWORK.md +198 -0
  158. package/docs/FUNCTION-SECURITY.md +129 -32
  159. package/docs/INSTALL.md +45 -12
  160. package/docs/INTERCHANGE.md +134 -0
  161. package/docs/LOAD-TESTING.md +4 -4
  162. package/docs/MIDDLEWARE-EXAMPLES.md +75 -0
  163. package/docs/MIDDLEWARE.md +29 -16
  164. package/docs/MONITORING.md +2 -19
  165. package/docs/NEXT-PHASE-PLAN.md +98 -0
  166. package/docs/NEXT-STEPS.md +634 -0
  167. package/docs/OBSERVABILITY.md +11 -18
  168. package/docs/OPEN-DECISIONS.md +212 -0
  169. package/docs/OPERATIONAL-PROOF.md +30 -31
  170. package/docs/OPERATIONS.md +29 -35
  171. package/docs/PLUGINS.md +37 -0
  172. package/docs/POLICIES.md +23 -309
  173. package/docs/PRERENDER.md +41 -1
  174. package/docs/PROJECT-DIRECTION.md +75 -8
  175. package/docs/PROVIDER-VERIFICATION.md +84 -0
  176. package/docs/READINESS.md +21 -1
  177. package/docs/README.md +87 -34
  178. package/docs/RECIPES.md +99 -0
  179. package/docs/RELEASE-READINESS.md +57 -35
  180. package/docs/RELEASE-SECURITY.md +116 -7
  181. package/docs/RESILIENCE.md +16 -15
  182. package/docs/ROUTING.md +8 -10
  183. package/docs/SANDBOX-REVIEW.md +19 -6
  184. package/docs/SCAFFOLDING.md +0 -2
  185. package/docs/SECURITY-AUDIT.md +41 -1
  186. package/docs/SPECIFICATION.md +150 -29
  187. package/docs/SPIKE-AI-FRAMEWORK-BENCHMARK.md +287 -0
  188. package/docs/SPIKE-BUSINESS-SUITE.md +1021 -0
  189. package/docs/SPIKE-CORE-LAYERING.md +337 -0
  190. package/docs/SPIKE-DEFAULT-TRUST-MODEL.md +209 -0
  191. package/docs/SPIKE-EXTENSION-MODEL.md +419 -0
  192. package/docs/SPIKE-EXTENSIONS.md +6 -0
  193. package/docs/SPIKE-LAMBDA-COMPILE.md +201 -0
  194. package/docs/SPIKE-MONOREPO.md +322 -0
  195. package/docs/STANDARDS.md +150 -142
  196. package/docs/STARTERS.md +21 -1
  197. package/docs/STATIC.md +94 -0
  198. package/docs/TOOLING.md +295 -0
  199. package/docs/TUNNELS.md +0 -3
  200. package/docs/TYPESCRIPT-AUTHORING.md +82 -0
  201. package/docs/TYPESCRIPT.md +25 -4
  202. package/docs/USABILITY-REVIEW.md +129 -0
  203. package/docs/VERCEL.md +4 -5
  204. package/docs/VERSION-ALIGNMENT.md +205 -0
  205. package/docs/YAML-GUIDE.md +15 -479
  206. package/docs/YAML-REFERENCE.md +143 -22
  207. package/docs/policies/agents.md +1 -1
  208. package/docs/policies/cache.md +13 -0
  209. package/docs/policies/contract.md +52 -0
  210. package/docs/policies/hardened.md +56 -0
  211. package/docs/policies/interoperability.md +169 -0
  212. package/docs/policies/operations.md +45 -0
  213. package/docs/yaml/assets.md +36 -0
  214. package/docs/yaml/conditions.md +20 -0
  215. package/docs/yaml/functions.md +160 -0
  216. package/docs/yaml/middleware.md +29 -0
  217. package/docs/yaml/organization.md +74 -0
  218. package/docs/yaml/policies.md +37 -0
  219. package/docs/yaml/redirects.md +64 -0
  220. package/docs/yaml/responses.md +57 -0
  221. package/docs/yaml/site.md +24 -0
  222. package/examples/assets/example.yaml +17 -0
  223. package/examples/aws/example.yaml +20 -0
  224. package/examples/cloudflare/example.yaml +19 -0
  225. package/examples/compliance/example.yaml +11 -0
  226. package/examples/conditions/README.md +12 -0
  227. package/examples/conditions/example.yaml +19 -0
  228. package/examples/conditions/tests/requests.json +13 -0
  229. package/examples/conditions/urlcode.yaml +24 -0
  230. package/examples/cookbook/README.md +8 -4
  231. package/examples/cookbook/example.yaml +17 -0
  232. package/examples/cookbook/functions/catalog.mjs +3 -0
  233. package/examples/cookbook/functions/fail.mjs +4 -0
  234. package/examples/cookbook/functions/items.mjs +3 -0
  235. package/examples/cookbook/functions/profile.mjs +3 -0
  236. package/examples/cookbook/functions/resource.mjs +3 -0
  237. package/examples/cookbook/functions/status.mjs +3 -0
  238. package/examples/cookbook/middleware/auth.mjs +48 -0
  239. package/examples/cookbook/middleware/body.mjs +15 -0
  240. package/examples/cookbook/middleware/bucket.mjs +29 -0
  241. package/examples/cookbook/middleware/cors.mjs +21 -0
  242. package/examples/cookbook/middleware/debug.mjs +13 -0
  243. package/examples/cookbook/middleware/envelope.mjs +11 -0
  244. package/examples/cookbook/middleware/errors.mjs +11 -0
  245. package/examples/cookbook/middleware/etag.mjs +18 -0
  246. package/examples/cookbook/middleware/locale.mjs +20 -0
  247. package/examples/cookbook/middleware/maintenance.mjs +10 -0
  248. package/examples/cookbook/middleware/methods.mjs +15 -0
  249. package/examples/cookbook/middleware/negotiate.mjs +20 -0
  250. package/examples/cookbook/middleware/referer.mjs +12 -0
  251. package/examples/cookbook/middleware/request-id.mjs +16 -0
  252. package/examples/cookbook/route-index.json +676 -0
  253. package/examples/cookbook/routes/middleware.yaml +126 -0
  254. package/examples/cookbook/tests/requests.json +526 -0
  255. package/examples/cookbook/urlcode.yaml +1 -0
  256. package/examples/egress/README.md +22 -0
  257. package/examples/egress/example.yaml +19 -0
  258. package/examples/egress/urlcode.yaml +19 -0
  259. package/examples/extensions/README.md +7 -0
  260. package/examples/extensions/example.yaml +21 -0
  261. package/examples/extensions/urlcode.yaml +25 -0
  262. package/examples/monitoring/example.yaml +8 -0
  263. package/examples/prerender/README.md +2 -2
  264. package/examples/prerender/example.yaml +16 -0
  265. package/examples/provider-conformance/README.md +12 -0
  266. package/examples/provider-conformance/example.yaml +14 -0
  267. package/examples/provider-conformance/urlcode.yaml +34 -0
  268. package/examples/tunnel/example.yaml +8 -0
  269. package/examples/vercel/example.yaml +19 -0
  270. package/llms-full.txt +3084 -0
  271. package/llms.txt +61 -21
  272. package/package.json +36 -7
  273. package/packaging/claude-plugin/.claude-plugin/plugin.json +19 -0
  274. package/packaging/claude-plugin/skills/urlcode-authoring/SKILL.md +122 -0
  275. package/packaging/claude-plugin/skills/urlcode-operations/SKILL.md +108 -0
  276. package/recipes/authenticated-json-api/README.md +51 -0
  277. package/recipes/authenticated-json-api/functions/profile.mjs +5 -0
  278. package/recipes/authenticated-json-api/recipe.yaml +34 -0
  279. package/recipes/authenticated-json-api/tests/requests.json +39 -0
  280. package/recipes/authenticated-json-api/urlcode.yaml +12 -0
  281. package/recipes/contact-form/README.md +25 -0
  282. package/recipes/contact-form/functions/contact.mjs +17 -0
  283. package/recipes/contact-form/recipe.yaml +33 -0
  284. package/recipes/contact-form/tests/requests.json +47 -0
  285. package/recipes/contact-form/urlcode.yaml +18 -0
  286. package/recipes/cors-api/README.md +16 -0
  287. package/recipes/cors-api/functions/items.mjs +3 -0
  288. package/recipes/cors-api/middleware/cors.mjs +21 -0
  289. package/recipes/cors-api/recipe.yaml +26 -0
  290. package/recipes/cors-api/tests/requests.json +65 -0
  291. package/recipes/cors-api/urlcode.yaml +12 -0
  292. package/recipes/health-page/README.md +13 -0
  293. package/recipes/health-page/recipe.yaml +23 -0
  294. package/recipes/health-page/tests/requests.json +36 -0
  295. package/recipes/health-page/urlcode.yaml +19 -0
  296. package/recipes/json-api/README.md +6 -0
  297. package/recipes/json-api/functions/echo.mjs +3 -0
  298. package/recipes/json-api/recipe.yaml +25 -0
  299. package/recipes/json-api/tests/requests.json +34 -0
  300. package/recipes/json-api/urlcode.yaml +12 -0
  301. package/recipes/middleware/README.md +34 -0
  302. package/recipes/middleware/functions/catalog.mjs +3 -0
  303. package/recipes/middleware/functions/fail.mjs +4 -0
  304. package/recipes/middleware/functions/items.mjs +3 -0
  305. package/recipes/middleware/functions/profile.mjs +3 -0
  306. package/recipes/middleware/functions/resource.mjs +3 -0
  307. package/recipes/middleware/functions/status.mjs +3 -0
  308. package/recipes/middleware/middleware/auth.mjs +48 -0
  309. package/recipes/middleware/middleware/body.mjs +15 -0
  310. package/recipes/middleware/middleware/bucket.mjs +29 -0
  311. package/recipes/middleware/middleware/cors.mjs +21 -0
  312. package/recipes/middleware/middleware/debug.mjs +13 -0
  313. package/recipes/middleware/middleware/envelope.mjs +11 -0
  314. package/recipes/middleware/middleware/errors.mjs +11 -0
  315. package/recipes/middleware/middleware/etag.mjs +18 -0
  316. package/recipes/middleware/middleware/locale.mjs +20 -0
  317. package/recipes/middleware/middleware/maintenance.mjs +10 -0
  318. package/recipes/middleware/middleware/methods.mjs +15 -0
  319. package/recipes/middleware/middleware/negotiate.mjs +20 -0
  320. package/recipes/middleware/middleware/referer.mjs +12 -0
  321. package/recipes/middleware/middleware/request-id.mjs +16 -0
  322. package/recipes/middleware/public/guide.txt +1 -0
  323. package/recipes/middleware/recipe.yaml +50 -0
  324. package/recipes/middleware/tests/requests.json +528 -0
  325. package/recipes/middleware/urlcode.yaml +127 -0
  326. package/recipes/protected-download/README.md +22 -0
  327. package/recipes/protected-download/files/report.txt +1 -0
  328. package/recipes/protected-download/recipe.yaml +31 -0
  329. package/recipes/protected-download/tests/requests.json +32 -0
  330. package/recipes/protected-download/urlcode.yaml +15 -0
  331. package/recipes/redirect/README.md +7 -0
  332. package/recipes/redirect/recipe.yaml +25 -0
  333. package/recipes/redirect/tests/requests.json +19 -0
  334. package/recipes/redirect/urlcode.yaml +9 -0
  335. package/recipes/static-plus-api/README.md +15 -0
  336. package/recipes/static-plus-api/functions/info.mjs +3 -0
  337. package/recipes/static-plus-api/public/assets/index.html +3 -0
  338. package/recipes/static-plus-api/public/assets/site.css +1 -0
  339. package/recipes/static-plus-api/public/index.html +8 -0
  340. package/recipes/static-plus-api/recipe.yaml +29 -0
  341. package/recipes/static-plus-api/tests/requests.json +56 -0
  342. package/recipes/static-plus-api/urlcode.yaml +23 -0
  343. package/recipes/typescript/README.md +8 -0
  344. package/recipes/typescript/functions/hello.ts +5 -0
  345. package/recipes/typescript/recipe.yaml +23 -0
  346. package/recipes/typescript/tests/requests.json +18 -0
  347. package/recipes/typescript/urlcode.yaml +5 -0
  348. package/recipes/webhook-receiver/README.md +20 -0
  349. package/recipes/webhook-receiver/functions/receive.mjs +16 -0
  350. package/recipes/webhook-receiver/recipe.yaml +27 -0
  351. package/recipes/webhook-receiver/tests/requests.json +59 -0
  352. package/recipes/webhook-receiver/urlcode.yaml +23 -0
  353. package/schemas/recipe.schema.json +139 -0
  354. package/schemas/urlcode.schema.json +659 -110
  355. package/skills/urlcode/SKILL.md +119 -0
  356. package/starters/default/.github/workflows/urlcode.yml +23 -0
  357. package/starters/default/.mcp.json +12 -0
  358. package/starters/default/AGENTS.md +79 -0
  359. package/starters/default/urlcode.yaml +0 -1
  360. package/dist/link-api.js +0 -136
  361. package/dist/link-cli.js +0 -141
  362. package/dist/link-events.js +0 -76
  363. package/dist/link-records.js +0 -31
  364. package/dist/link-store-worker.js +0 -150
  365. package/dist/link-store.js +0 -250
  366. package/dist/management-policy.js +0 -41
  367. package/dist/sqlite-version.js +0 -6
  368. package/dist/types/link-api.d.ts +0 -30
  369. package/dist/types/link-cli.d.ts +0 -36
  370. package/dist/types/link-events.d.ts +0 -27
  371. package/dist/types/link-records.d.ts +0 -11
  372. package/dist/types/link-store-worker.d.ts +0 -1
  373. package/dist/types/link-store.d.ts +0 -130
  374. package/dist/types/management-policy.d.ts +0 -9
  375. package/dist/types/sqlite-version.d.ts +0 -1
  376. package/docs/DYNAMIC-LINKS.md +0 -561
  377. package/docs/MANAGEMENT-SECURITY.md +0 -82
  378. package/examples/live-links/README.md +0 -11
  379. package/examples/live-links/tests/requests.json +0 -6
  380. package/examples/live-links/urlcode.yaml +0 -16
@@ -0,0 +1,676 @@
1
+ {
2
+ "format": 1,
3
+ "project": "examples/cookbook",
4
+ "routes": 40,
5
+ "entries": [
6
+ {
7
+ "path": "/hello/{name}",
8
+ "file": "routes/code.yaml",
9
+ "handler": "function",
10
+ "methods": [
11
+ "GET",
12
+ "HEAD"
13
+ ],
14
+ "tags": [
15
+ "function",
16
+ "get",
17
+ "head",
18
+ "middleware",
19
+ "parameters",
20
+ "response.headers",
21
+ "bindings",
22
+ "headers"
23
+ ],
24
+ "description": "Validated input, named export, arguments, literal environment and middleware"
25
+ },
26
+ {
27
+ "path": "/echo",
28
+ "file": "routes/code.yaml",
29
+ "handler": "function",
30
+ "methods": [
31
+ "POST"
32
+ ],
33
+ "tags": [
34
+ "function",
35
+ "post",
36
+ "request.body"
37
+ ],
38
+ "description": ""
39
+ },
40
+ {
41
+ "path": "/text",
42
+ "file": "routes/code.yaml",
43
+ "handler": "function",
44
+ "methods": [
45
+ "POST"
46
+ ],
47
+ "tags": [
48
+ "function",
49
+ "post",
50
+ "request.body"
51
+ ],
52
+ "description": ""
53
+ },
54
+ {
55
+ "path": "/choice",
56
+ "file": "routes/code.yaml",
57
+ "handler": "function",
58
+ "methods": [
59
+ "GET",
60
+ "HEAD"
61
+ ],
62
+ "tags": [
63
+ "function",
64
+ "get",
65
+ "head",
66
+ "parameters"
67
+ ],
68
+ "description": ""
69
+ },
70
+ {
71
+ "path": "/go",
72
+ "file": "routes/redirects.yaml",
73
+ "handler": "redirect",
74
+ "methods": [
75
+ "GET",
76
+ "HEAD"
77
+ ],
78
+ "tags": [
79
+ "redirect",
80
+ "get",
81
+ "head"
82
+ ],
83
+ "description": ""
84
+ },
85
+ {
86
+ "path": "/moved",
87
+ "file": "routes/redirects.yaml",
88
+ "handler": "redirect",
89
+ "methods": [
90
+ "GET",
91
+ "HEAD"
92
+ ],
93
+ "tags": [
94
+ "redirect",
95
+ "get",
96
+ "head",
97
+ "response.headers"
98
+ ],
99
+ "description": ""
100
+ },
101
+ {
102
+ "path": "/product/{id}",
103
+ "file": "routes/redirects.yaml",
104
+ "handler": "redirect",
105
+ "methods": [
106
+ "GET",
107
+ "HEAD"
108
+ ],
109
+ "tags": [
110
+ "redirect",
111
+ "get",
112
+ "head",
113
+ "parameters"
114
+ ],
115
+ "description": ""
116
+ },
117
+ {
118
+ "path": "/paused",
119
+ "file": "routes/redirects.yaml",
120
+ "handler": "redirect",
121
+ "methods": [
122
+ "GET",
123
+ "HEAD"
124
+ ],
125
+ "tags": [
126
+ "redirect",
127
+ "get",
128
+ "head",
129
+ "disabled"
130
+ ],
131
+ "description": ""
132
+ },
133
+ {
134
+ "path": "/expired",
135
+ "file": "routes/redirects.yaml",
136
+ "handler": "redirect",
137
+ "methods": [
138
+ "GET",
139
+ "HEAD"
140
+ ],
141
+ "tags": [
142
+ "redirect",
143
+ "get",
144
+ "head",
145
+ "expires",
146
+ "expiring"
147
+ ],
148
+ "description": ""
149
+ },
150
+ {
151
+ "path": "/status",
152
+ "file": "routes/responses.yaml",
153
+ "handler": "respond",
154
+ "methods": [
155
+ "GET",
156
+ "HEAD"
157
+ ],
158
+ "tags": [
159
+ "respond",
160
+ "get",
161
+ "head"
162
+ ],
163
+ "description": ""
164
+ },
165
+ {
166
+ "path": "/notice",
167
+ "file": "routes/responses.yaml",
168
+ "handler": "respond",
169
+ "methods": [
170
+ "GET",
171
+ "HEAD"
172
+ ],
173
+ "tags": [
174
+ "respond",
175
+ "get",
176
+ "head",
177
+ "response.headers"
178
+ ],
179
+ "description": ""
180
+ },
181
+ {
182
+ "path": "/empty",
183
+ "file": "routes/responses.yaml",
184
+ "handler": "respond",
185
+ "methods": [
186
+ "GET",
187
+ "HEAD"
188
+ ],
189
+ "tags": [
190
+ "respond",
191
+ "get",
192
+ "head"
193
+ ],
194
+ "description": ""
195
+ },
196
+ {
197
+ "path": "/cookie-demo",
198
+ "file": "routes/responses.yaml",
199
+ "handler": "respond",
200
+ "methods": [
201
+ "GET",
202
+ "HEAD"
203
+ ],
204
+ "tags": [
205
+ "respond",
206
+ "get",
207
+ "head",
208
+ "response.headers"
209
+ ],
210
+ "description": ""
211
+ },
212
+ {
213
+ "path": "/preflight",
214
+ "file": "routes/responses.yaml",
215
+ "handler": "respond",
216
+ "methods": [
217
+ "OPTIONS"
218
+ ],
219
+ "tags": [
220
+ "respond",
221
+ "options",
222
+ "response.headers"
223
+ ],
224
+ "description": ""
225
+ },
226
+ {
227
+ "path": "/about",
228
+ "file": "routes/files.yaml",
229
+ "handler": "page",
230
+ "methods": [
231
+ "GET",
232
+ "HEAD"
233
+ ],
234
+ "tags": [
235
+ "page",
236
+ "get",
237
+ "head"
238
+ ],
239
+ "description": ""
240
+ },
241
+ {
242
+ "path": "/assets/*",
243
+ "file": "routes/files.yaml",
244
+ "handler": "static",
245
+ "methods": [
246
+ "GET",
247
+ "HEAD"
248
+ ],
249
+ "tags": [
250
+ "static",
251
+ "get",
252
+ "head"
253
+ ],
254
+ "description": ""
255
+ },
256
+ {
257
+ "path": "/download",
258
+ "file": "routes/files.yaml",
259
+ "handler": "download",
260
+ "methods": [
261
+ "GET",
262
+ "HEAD"
263
+ ],
264
+ "tags": [
265
+ "download",
266
+ "get",
267
+ "head"
268
+ ],
269
+ "description": ""
270
+ },
271
+ {
272
+ "path": "/secure",
273
+ "file": "routes/policies.yaml",
274
+ "handler": "respond",
275
+ "methods": [
276
+ "GET",
277
+ "HEAD"
278
+ ],
279
+ "tags": [
280
+ "respond",
281
+ "get",
282
+ "head",
283
+ "response.headers",
284
+ "policies.security"
285
+ ],
286
+ "description": "OWASP Secure Headers profile on a declared response; explicit headers still win"
287
+ },
288
+ {
289
+ "path": "/no-bots",
290
+ "file": "routes/policies.yaml",
291
+ "handler": "redirect",
292
+ "methods": [
293
+ "GET",
294
+ "HEAD"
295
+ ],
296
+ "tags": [
297
+ "redirect",
298
+ "get",
299
+ "head",
300
+ "policies.agents"
301
+ ],
302
+ "description": "Deny the bundled AI-crawler list and any curl; allow one named crawler"
303
+ },
304
+ {
305
+ "path": "/cached",
306
+ "file": "routes/policies.yaml",
307
+ "handler": "respond",
308
+ "methods": [
309
+ "GET",
310
+ "HEAD"
311
+ ],
312
+ "tags": [
313
+ "respond",
314
+ "get",
315
+ "head",
316
+ "policies.cache"
317
+ ],
318
+ "description": "Public caching with a named strategy; the origin does not cache"
319
+ },
320
+ {
321
+ "path": "/budget",
322
+ "file": "routes/policies.yaml",
323
+ "handler": "respond",
324
+ "methods": [
325
+ "GET",
326
+ "HEAD"
327
+ ],
328
+ "tags": [
329
+ "respond",
330
+ "get",
331
+ "head",
332
+ "policies.throttle"
333
+ ],
334
+ "description": "Per-route request budget with standard RateLimit headers"
335
+ },
336
+ {
337
+ "path": "/api/private",
338
+ "file": "routes/middleware.yaml",
339
+ "handler": "respond",
340
+ "methods": [
341
+ "GET",
342
+ "HEAD"
343
+ ],
344
+ "tags": [
345
+ "respond",
346
+ "get",
347
+ "head",
348
+ "middleware",
349
+ "bindings",
350
+ "auth"
351
+ ],
352
+ "description": "Bearer token gate with a constant-time comparison"
353
+ },
354
+ {
355
+ "path": "/admin/panel",
356
+ "file": "routes/middleware.yaml",
357
+ "handler": "respond",
358
+ "methods": [
359
+ "GET",
360
+ "HEAD"
361
+ ],
362
+ "tags": [
363
+ "respond",
364
+ "get",
365
+ "head",
366
+ "middleware",
367
+ "bindings",
368
+ "auth"
369
+ ],
370
+ "description": "HTTP Basic authentication decoded inside the guest"
371
+ },
372
+ {
373
+ "path": "/cors/data",
374
+ "file": "routes/middleware.yaml",
375
+ "handler": "respond",
376
+ "methods": [
377
+ "GET",
378
+ "HEAD",
379
+ "OPTIONS"
380
+ ],
381
+ "tags": [
382
+ "respond",
383
+ "get",
384
+ "head",
385
+ "options",
386
+ "middleware",
387
+ "bindings",
388
+ "cors"
389
+ ],
390
+ "description": "CORS allowlist with preflight handled before the handler"
391
+ },
392
+ {
393
+ "path": "/traced",
394
+ "file": "routes/middleware.yaml",
395
+ "handler": "respond",
396
+ "methods": [
397
+ "GET",
398
+ "HEAD"
399
+ ],
400
+ "tags": [
401
+ "respond",
402
+ "get",
403
+ "head",
404
+ "middleware",
405
+ "request-id"
406
+ ],
407
+ "description": "Caller correlation id and Server-Timing on every response"
408
+ },
409
+ {
410
+ "path": "/maintenance",
411
+ "file": "routes/middleware.yaml",
412
+ "handler": "respond",
413
+ "methods": [
414
+ "GET",
415
+ "HEAD"
416
+ ],
417
+ "tags": [
418
+ "respond",
419
+ "get",
420
+ "head",
421
+ "middleware",
422
+ "bindings",
423
+ "maintenance"
424
+ ],
425
+ "description": "Kill switch returning 503 unless a bypass header is presented"
426
+ },
427
+ {
428
+ "path": "/fragile",
429
+ "file": "routes/middleware.yaml",
430
+ "handler": "function",
431
+ "methods": [
432
+ "GET",
433
+ "HEAD"
434
+ ],
435
+ "tags": [
436
+ "function",
437
+ "get",
438
+ "head",
439
+ "middleware",
440
+ "parameters",
441
+ "request-id",
442
+ "errors"
443
+ ],
444
+ "description": "Error boundary turning a thrown exception into a JSON 500"
445
+ },
446
+ {
447
+ "path": "/api/items",
448
+ "file": "routes/middleware.yaml",
449
+ "handler": "function",
450
+ "methods": [
451
+ "GET",
452
+ "HEAD"
453
+ ],
454
+ "tags": [
455
+ "function",
456
+ "get",
457
+ "head",
458
+ "middleware",
459
+ "envelope"
460
+ ],
461
+ "description": "JSON envelope around a function response, in the short form (a module path expands to source)"
462
+ },
463
+ {
464
+ "path": "/negotiated",
465
+ "file": "routes/middleware.yaml",
466
+ "handler": "function",
467
+ "methods": [
468
+ "GET",
469
+ "HEAD"
470
+ ],
471
+ "tags": [
472
+ "function",
473
+ "get",
474
+ "head",
475
+ "middleware",
476
+ "negotiate"
477
+ ],
478
+ "description": "Accept-driven JSON or plain-text representation, 406 otherwise"
479
+ },
480
+ {
481
+ "path": "/resource",
482
+ "file": "routes/middleware.yaml",
483
+ "handler": "function",
484
+ "methods": [
485
+ "GET",
486
+ "HEAD",
487
+ "POST",
488
+ "PUT",
489
+ "PATCH",
490
+ "DELETE"
491
+ ],
492
+ "tags": [
493
+ "function",
494
+ "get",
495
+ "head",
496
+ "post",
497
+ "put",
498
+ "patch",
499
+ "delete",
500
+ "middleware",
501
+ "methods"
502
+ ],
503
+ "description": "Method override tunneling PUT, PATCH or DELETE through POST"
504
+ },
505
+ {
506
+ "path": "/versioned",
507
+ "file": "routes/middleware.yaml",
508
+ "handler": "function",
509
+ "methods": [
510
+ "GET",
511
+ "HEAD"
512
+ ],
513
+ "tags": [
514
+ "function",
515
+ "get",
516
+ "head",
517
+ "middleware",
518
+ "etag"
519
+ ],
520
+ "description": "Weak ETag and 304 for function output"
521
+ },
522
+ {
523
+ "path": "/experiment",
524
+ "file": "routes/middleware.yaml",
525
+ "handler": "redirect",
526
+ "methods": [
527
+ "GET",
528
+ "HEAD"
529
+ ],
530
+ "tags": [
531
+ "redirect",
532
+ "get",
533
+ "head",
534
+ "middleware",
535
+ "bindings",
536
+ "bucket"
537
+ ],
538
+ "description": "Sticky A/B bucket cookie choosing between two destinations"
539
+ },
540
+ {
541
+ "path": "/welcome",
542
+ "file": "routes/middleware.yaml",
543
+ "handler": "redirect",
544
+ "methods": [
545
+ "GET",
546
+ "HEAD"
547
+ ],
548
+ "tags": [
549
+ "redirect",
550
+ "get",
551
+ "head",
552
+ "middleware",
553
+ "bindings",
554
+ "locale"
555
+ ],
556
+ "description": "Accept-Language redirect to a localized destination"
557
+ },
558
+ {
559
+ "path": "/downloads/report",
560
+ "file": "routes/middleware.yaml",
561
+ "handler": "download",
562
+ "methods": [
563
+ "GET",
564
+ "HEAD"
565
+ ],
566
+ "tags": [
567
+ "download",
568
+ "get",
569
+ "head",
570
+ "middleware",
571
+ "bindings",
572
+ "referer"
573
+ ],
574
+ "description": "Referer allowlist in front of a native download"
575
+ },
576
+ {
577
+ "path": "/profile",
578
+ "file": "routes/middleware.yaml",
579
+ "handler": "function",
580
+ "methods": [
581
+ "POST"
582
+ ],
583
+ "tags": [
584
+ "function",
585
+ "post",
586
+ "middleware",
587
+ "request.body",
588
+ "body"
589
+ ],
590
+ "description": "Body validated once in middleware, parsed object passed through state"
591
+ },
592
+ {
593
+ "path": "/inspect",
594
+ "file": "routes/middleware.yaml",
595
+ "handler": "respond",
596
+ "methods": [
597
+ "GET",
598
+ "HEAD"
599
+ ],
600
+ "tags": [
601
+ "respond",
602
+ "get",
603
+ "head",
604
+ "middleware",
605
+ "parameters",
606
+ "bindings",
607
+ "debug"
608
+ ],
609
+ "description": "Authoring aid echoing inputs, args and redacted headers on demand"
610
+ },
611
+ {
612
+ "path": "/robots.txt",
613
+ "file": "site",
614
+ "handler": "respond",
615
+ "methods": [
616
+ "GET",
617
+ "HEAD"
618
+ ],
619
+ "tags": [
620
+ "respond",
621
+ "site",
622
+ "get",
623
+ "head"
624
+ ],
625
+ "description": "generated by site.robots"
626
+ },
627
+ {
628
+ "path": "/favicon.ico",
629
+ "file": "site",
630
+ "handler": "page",
631
+ "methods": [
632
+ "GET",
633
+ "HEAD"
634
+ ],
635
+ "tags": [
636
+ "page",
637
+ "site",
638
+ "get",
639
+ "head"
640
+ ],
641
+ "description": "generated by site.favicon"
642
+ },
643
+ {
644
+ "path": "/.well-known/security.txt",
645
+ "file": "site",
646
+ "handler": "respond",
647
+ "methods": [
648
+ "GET",
649
+ "HEAD"
650
+ ],
651
+ "tags": [
652
+ "respond",
653
+ "site",
654
+ "get",
655
+ "head"
656
+ ],
657
+ "description": "generated by site.securityTxt"
658
+ },
659
+ {
660
+ "path": "/llms.txt",
661
+ "file": "site",
662
+ "handler": "page",
663
+ "methods": [
664
+ "GET",
665
+ "HEAD"
666
+ ],
667
+ "tags": [
668
+ "page",
669
+ "site",
670
+ "get",
671
+ "head"
672
+ ],
673
+ "description": "generated by site.llms"
674
+ }
675
+ ]
676
+ }