ts-procedures 10.1.2 → 10.2.1

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 (272) hide show
  1. package/CHANGELOG.md +33 -86
  2. package/README.md +11 -6
  3. package/agent_config/bin/postinstall.mjs +20 -89
  4. package/agent_config/bin/setup.mjs +51 -264
  5. package/agent_config/lib/install-skills.mjs +108 -0
  6. package/agent_config/{claude-code/skills → skills}/ts-procedures/anti-patterns.md +8 -0
  7. package/agent_config/{claude-code/skills → skills}/ts-procedures/api-reference.md +25 -22
  8. package/agent_config/{claude-code/skills → skills}/ts-procedures/patterns.md +24 -13
  9. package/build/adapters/hono/envelope-parity.test.js +6 -17
  10. package/build/adapters/hono/envelope-parity.test.js.map +1 -1
  11. package/build/adapters/hono/handlers/http-stream.d.ts +2 -1
  12. package/build/adapters/hono/handlers/http-stream.js +9 -2
  13. package/build/adapters/hono/handlers/http-stream.js.map +1 -1
  14. package/build/adapters/hono/handlers/http.d.ts +2 -1
  15. package/build/adapters/hono/handlers/http.js +9 -2
  16. package/build/adapters/hono/handlers/http.js.map +1 -1
  17. package/build/adapters/hono/handlers/rpc.d.ts +2 -1
  18. package/build/adapters/hono/handlers/rpc.js +9 -2
  19. package/build/adapters/hono/handlers/rpc.js.map +1 -1
  20. package/build/adapters/hono/handlers/stream.d.ts +2 -1
  21. package/build/adapters/hono/handlers/stream.js +9 -2
  22. package/build/adapters/hono/handlers/stream.js.map +1 -1
  23. package/build/adapters/hono/index.d.ts +14 -7
  24. package/build/adapters/hono/index.js +45 -5
  25. package/build/adapters/hono/index.js.map +1 -1
  26. package/build/adapters/hono/index.test.js +55 -0
  27. package/build/adapters/hono/index.test.js.map +1 -1
  28. package/build/adapters/hono/request.d.ts +7 -0
  29. package/build/adapters/hono/request.js +15 -0
  30. package/build/adapters/hono/request.js.map +1 -1
  31. package/build/adapters/hono/types.d.ts +31 -0
  32. package/build/adapters/hono/types.js.map +1 -1
  33. package/build/codegen/bin/cli.js +1 -1
  34. package/build/codegen/bin/cli.js.map +1 -1
  35. package/build/codegen/constants.js +2 -2
  36. package/build/codegen/constants.js.map +1 -1
  37. package/build/codegen/emit/api-route.js +1 -1
  38. package/build/codegen/emit/api-route.js.map +1 -1
  39. package/build/codegen/emit/scope-file.js +1 -1
  40. package/build/codegen/emit/scope-file.js.map +1 -1
  41. package/build/codegen/emit-errors.integration.test.js +2 -2
  42. package/build/codegen/emit-errors.integration.test.js.map +1 -1
  43. package/build/codegen/resolve-envelope.js +1 -1
  44. package/build/codegen/resolve-envelope.js.map +1 -1
  45. package/build/codegen/test-helpers/run-tsc.js +1 -1
  46. package/build/codegen/test-helpers/run-tsc.js.map +1 -1
  47. package/build/core/create-http-stream.d.ts +3 -14
  48. package/build/core/create-http-stream.js +4 -2
  49. package/build/core/create-http-stream.js.map +1 -1
  50. package/build/core/create-http.d.ts +2 -9
  51. package/build/core/create-http.js +3 -2
  52. package/build/core/create-http.js.map +1 -1
  53. package/build/core/create-http.test-d.js +104 -0
  54. package/build/core/create-http.test-d.js.map +1 -0
  55. package/build/core/create-stream.js +6 -2
  56. package/build/core/create-stream.js.map +1 -1
  57. package/build/core/create.js +5 -4
  58. package/build/core/create.js.map +1 -1
  59. package/build/core/create.test.js +63 -0
  60. package/build/core/create.test.js.map +1 -1
  61. package/build/core/internal.d.ts +16 -0
  62. package/build/core/internal.js +22 -0
  63. package/build/core/internal.js.map +1 -1
  64. package/build/core/procedures.d.ts +9 -16
  65. package/build/core/procedures.js +4 -0
  66. package/build/core/procedures.js.map +1 -1
  67. package/build/core/types.d.ts +85 -4
  68. package/build/errors.d.ts +33 -0
  69. package/build/errors.js +91 -0
  70. package/build/errors.js.map +1 -0
  71. package/build/errors.test.d.ts +1 -0
  72. package/build/errors.test.js +122 -0
  73. package/build/errors.test.js.map +1 -0
  74. package/build/exports.d.ts +1 -2
  75. package/build/exports.js +0 -4
  76. package/build/exports.js.map +1 -1
  77. package/build/implementations/http/doc-registry.d.ts +28 -0
  78. package/build/implementations/http/doc-registry.js +96 -0
  79. package/build/implementations/http/doc-registry.js.map +1 -0
  80. package/build/implementations/http/doc-registry.test.d.ts +1 -0
  81. package/build/implementations/http/doc-registry.test.js +516 -0
  82. package/build/implementations/http/doc-registry.test.js.map +1 -0
  83. package/build/implementations/http/error-taxonomy.d.ts +249 -0
  84. package/build/implementations/http/error-taxonomy.js +252 -0
  85. package/build/implementations/http/error-taxonomy.js.map +1 -0
  86. package/build/implementations/http/error-taxonomy.test.d.ts +1 -0
  87. package/build/implementations/http/error-taxonomy.test.js +399 -0
  88. package/build/implementations/http/error-taxonomy.test.js.map +1 -0
  89. package/build/implementations/http/express-rpc/error-taxonomy.test.d.ts +1 -0
  90. package/build/implementations/http/express-rpc/error-taxonomy.test.js +83 -0
  91. package/build/implementations/http/express-rpc/error-taxonomy.test.js.map +1 -0
  92. package/build/implementations/http/express-rpc/index.d.ts +125 -0
  93. package/build/implementations/http/express-rpc/index.js +216 -0
  94. package/build/implementations/http/express-rpc/index.js.map +1 -0
  95. package/build/implementations/http/express-rpc/index.test.d.ts +1 -0
  96. package/build/implementations/http/express-rpc/index.test.js +684 -0
  97. package/build/implementations/http/express-rpc/index.test.js.map +1 -0
  98. package/build/implementations/http/express-rpc/types.d.ts +11 -0
  99. package/build/implementations/http/express-rpc/types.js +2 -0
  100. package/build/implementations/http/express-rpc/types.js.map +1 -0
  101. package/build/implementations/http/hono-api/error-taxonomy.test.d.ts +1 -0
  102. package/build/implementations/http/hono-api/error-taxonomy.test.js +137 -0
  103. package/build/implementations/http/hono-api/error-taxonomy.test.js.map +1 -0
  104. package/build/implementations/http/hono-api/index.d.ts +151 -0
  105. package/build/implementations/http/hono-api/index.js +344 -0
  106. package/build/implementations/http/hono-api/index.js.map +1 -0
  107. package/build/implementations/http/hono-api/index.test.d.ts +1 -0
  108. package/build/implementations/http/hono-api/index.test.js +992 -0
  109. package/build/implementations/http/hono-api/index.test.js.map +1 -0
  110. package/build/implementations/http/hono-api/types.d.ts +13 -0
  111. package/build/implementations/http/hono-api/types.js +2 -0
  112. package/build/implementations/http/hono-api/types.js.map +1 -0
  113. package/build/implementations/http/hono-rpc/error-taxonomy.test.d.ts +1 -0
  114. package/build/implementations/http/hono-rpc/error-taxonomy.test.js +64 -0
  115. package/build/implementations/http/hono-rpc/error-taxonomy.test.js.map +1 -0
  116. package/build/implementations/http/hono-rpc/index.d.ts +130 -0
  117. package/build/implementations/http/hono-rpc/index.js +209 -0
  118. package/build/implementations/http/hono-rpc/index.js.map +1 -0
  119. package/build/implementations/http/hono-rpc/index.test.d.ts +1 -0
  120. package/build/implementations/http/hono-rpc/index.test.js +828 -0
  121. package/build/implementations/http/hono-rpc/index.test.js.map +1 -0
  122. package/build/implementations/http/hono-rpc/types.d.ts +11 -0
  123. package/build/implementations/http/hono-rpc/types.js +2 -0
  124. package/build/implementations/http/hono-rpc/types.js.map +1 -0
  125. package/build/implementations/http/hono-stream/error-taxonomy.test.d.ts +1 -0
  126. package/build/implementations/http/hono-stream/error-taxonomy.test.js +159 -0
  127. package/build/implementations/http/hono-stream/error-taxonomy.test.js.map +1 -0
  128. package/build/implementations/http/hono-stream/index.d.ts +171 -0
  129. package/build/implementations/http/hono-stream/index.js +415 -0
  130. package/build/implementations/http/hono-stream/index.js.map +1 -0
  131. package/build/implementations/http/hono-stream/index.test.d.ts +1 -0
  132. package/build/implementations/http/hono-stream/index.test.js +1383 -0
  133. package/build/implementations/http/hono-stream/index.test.js.map +1 -0
  134. package/build/implementations/http/hono-stream/types.d.ts +15 -0
  135. package/build/implementations/http/hono-stream/types.js +2 -0
  136. package/build/implementations/http/hono-stream/types.js.map +1 -0
  137. package/build/implementations/http/on-request-error.test.d.ts +1 -0
  138. package/build/implementations/http/on-request-error.test.js +173 -0
  139. package/build/implementations/http/on-request-error.test.js.map +1 -0
  140. package/build/implementations/http/route-errors.test.d.ts +1 -0
  141. package/build/implementations/http/route-errors.test.js +139 -0
  142. package/build/implementations/http/route-errors.test.js.map +1 -0
  143. package/build/implementations/types.d.ts +192 -0
  144. package/build/implementations/types.js +2 -0
  145. package/build/implementations/types.js.map +1 -0
  146. package/build/index.d.ts +165 -0
  147. package/build/index.js +258 -0
  148. package/build/index.js.map +1 -0
  149. package/build/index.test.d.ts +1 -0
  150. package/build/index.test.js +920 -0
  151. package/build/index.test.js.map +1 -0
  152. package/build/schema/compute-schema.js +1 -5
  153. package/build/schema/compute-schema.js.map +1 -1
  154. package/build/schema/compute-schema.test.js +0 -13
  155. package/build/schema/compute-schema.test.js.map +1 -1
  156. package/build/schema/extract-json-schema.d.ts +2 -0
  157. package/build/schema/extract-json-schema.js +12 -0
  158. package/build/schema/extract-json-schema.js.map +1 -0
  159. package/build/schema/extract-json-schema.test.d.ts +1 -0
  160. package/build/schema/extract-json-schema.test.js +23 -0
  161. package/build/schema/extract-json-schema.test.js.map +1 -0
  162. package/build/schema/parser.d.ts +28 -0
  163. package/build/schema/parser.js +170 -0
  164. package/build/schema/parser.js.map +1 -0
  165. package/build/schema/parser.test.d.ts +1 -0
  166. package/build/schema/parser.test.js +120 -0
  167. package/build/schema/parser.test.js.map +1 -0
  168. package/build/schema/resolve-schema-lib.d.ts +12 -0
  169. package/build/schema/resolve-schema-lib.js +11 -0
  170. package/build/schema/resolve-schema-lib.js.map +1 -0
  171. package/build/schema/resolve-schema-lib.test.d.ts +1 -0
  172. package/build/schema/resolve-schema-lib.test.js +17 -0
  173. package/build/schema/resolve-schema-lib.test.js.map +1 -0
  174. package/build/schema/typebox.d.ts +1 -1
  175. package/build/schema/typebox.js +2 -20
  176. package/build/schema/typebox.js.map +1 -1
  177. package/build/schema/typebox.test.js +0 -10
  178. package/build/schema/typebox.test.js.map +1 -1
  179. package/build/schema/types.d.ts +8 -0
  180. package/build/schema/types.js +2 -0
  181. package/build/schema/types.js.map +1 -0
  182. package/build/server/context.d.ts +12 -2
  183. package/build/server/context.js +49 -4
  184. package/build/server/context.js.map +1 -1
  185. package/build/server/context.test.js +32 -1
  186. package/build/server/context.test.js.map +1 -1
  187. package/build/server/doc-registry.js +0 -3
  188. package/build/server/doc-registry.js.map +1 -1
  189. package/build/server/doc-registry.test.js +0 -31
  190. package/build/server/doc-registry.test.js.map +1 -1
  191. package/build/server/index.d.ts +0 -1
  192. package/build/server/index.js +0 -1
  193. package/build/server/index.js.map +1 -1
  194. package/build/server/types.d.ts +6 -27
  195. package/build/stack-utils.d.ts +25 -0
  196. package/build/stack-utils.js +95 -0
  197. package/build/stack-utils.js.map +1 -0
  198. package/build/stack-utils.test.d.ts +1 -0
  199. package/build/stack-utils.test.js +80 -0
  200. package/build/stack-utils.test.js.map +1 -0
  201. package/docs/ai-agent-setup.md +19 -27
  202. package/docs/client-error-handling.md +1 -1
  203. package/docs/core.md +8 -0
  204. package/docs/http-integrations.md +42 -28
  205. package/package.json +8 -8
  206. package/src/adapters/astro/README.md +2 -0
  207. package/src/adapters/hono/envelope-parity.test.ts +6 -18
  208. package/src/adapters/hono/handlers/http-stream.ts +12 -3
  209. package/src/adapters/hono/handlers/http.ts +12 -3
  210. package/src/adapters/hono/handlers/rpc.ts +12 -3
  211. package/src/adapters/hono/handlers/stream.ts +12 -3
  212. package/src/adapters/hono/index.test.ts +70 -0
  213. package/src/adapters/hono/index.ts +53 -11
  214. package/src/adapters/hono/request.ts +18 -0
  215. package/src/adapters/hono/types.ts +37 -0
  216. package/src/codegen/bin/cli.ts +1 -1
  217. package/src/codegen/constants.ts +2 -2
  218. package/src/codegen/emit/api-route.ts +1 -1
  219. package/src/codegen/emit/scope-file.ts +1 -2
  220. package/src/codegen/emit-errors.integration.test.ts +2 -2
  221. package/src/codegen/resolve-envelope.ts +1 -1
  222. package/src/codegen/test-helpers/run-tsc.ts +0 -1
  223. package/src/core/create-http-stream.ts +20 -13
  224. package/src/core/create-http.test-d.ts +154 -0
  225. package/src/core/create-http.ts +19 -8
  226. package/src/core/create-stream.ts +12 -4
  227. package/src/core/create.test.ts +74 -0
  228. package/src/core/create.ts +10 -5
  229. package/src/core/internal.ts +35 -0
  230. package/src/core/procedures.ts +4 -0
  231. package/src/core/types.ts +99 -4
  232. package/src/exports.ts +6 -4
  233. package/src/schema/compute-schema.test.ts +0 -16
  234. package/src/schema/compute-schema.ts +1 -5
  235. package/src/schema/typebox.test.ts +0 -12
  236. package/src/schema/typebox.ts +2 -21
  237. package/src/server/context.test.ts +39 -1
  238. package/src/server/context.ts +54 -4
  239. package/src/server/doc-registry.test.ts +0 -34
  240. package/src/server/doc-registry.ts +0 -3
  241. package/src/server/index.ts +0 -1
  242. package/src/server/types.ts +8 -27
  243. package/agent_config/claude-code/.claude-plugin/plugin.json +0 -5
  244. package/agent_config/claude-code/agents/ts-procedures-architect.md +0 -138
  245. package/agent_config/copilot/copilot-instructions.md +0 -521
  246. package/agent_config/cursor/cursorrules +0 -521
  247. package/agent_config/lib/install-claude.mjs +0 -57
  248. package/build/schema/strip-internal-keywords.d.ts +0 -18
  249. package/build/schema/strip-internal-keywords.js +0 -33
  250. package/build/schema/strip-internal-keywords.js.map +0 -1
  251. package/build/schema/strip-internal-keywords.test.js +0 -38
  252. package/build/schema/strip-internal-keywords.test.js.map +0 -1
  253. package/build/server/spec-version.d.ts +0 -24
  254. package/build/server/spec-version.js +0 -26
  255. package/build/server/spec-version.js.map +0 -1
  256. package/build/version.d.ts +0 -9
  257. package/build/version.js +0 -11
  258. package/build/version.js.map +0 -1
  259. package/docs/doc-envelope-spec-v1.md +0 -296
  260. package/docs/doc-envelope-v1.schema.json +0 -253
  261. package/src/schema/strip-internal-keywords.test.ts +0 -43
  262. package/src/schema/strip-internal-keywords.ts +0 -36
  263. package/src/server/spec-version.ts +0 -27
  264. package/src/version.ts +0 -11
  265. /package/agent_config/{claude-code/skills → skills}/ts-procedures/SKILL.md +0 -0
  266. /package/agent_config/{claude-code/skills → skills}/ts-procedures/checklist.md +0 -0
  267. /package/agent_config/{claude-code/skills → skills}/ts-procedures/templates/astro-catchall.md +0 -0
  268. /package/agent_config/{claude-code/skills → skills}/ts-procedures/templates/client.md +0 -0
  269. /package/agent_config/{claude-code/skills → skills}/ts-procedures/templates/hono.md +0 -0
  270. /package/agent_config/{claude-code/skills → skills}/ts-procedures/templates/procedure.md +0 -0
  271. /package/agent_config/{claude-code/skills → skills}/ts-procedures/templates/stream-procedure.md +0 -0
  272. /package/build/{schema/strip-internal-keywords.test.d.ts → core/create-http.test-d.d.ts} +0 -0
@@ -0,0 +1,108 @@
1
+ import { cpSync, mkdirSync, readdirSync, readFileSync, existsSync, statSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+
4
+ // ─────────────────────────────────────────────────────────────────────────────
5
+ // Generic, project-agnostic skill installer.
6
+ //
7
+ // This file is intentionally free of any ts-procedures specifics so it can be
8
+ // dropped verbatim into any library that ships Agent Skills. The only
9
+ // per-project surface is the config object the caller passes in (see
10
+ // bin/setup.mjs / bin/postinstall.mjs).
11
+ //
12
+ // A "skill" is a spec-compliant directory containing a SKILL.md (name +
13
+ // description frontmatter) plus optional references/templates. The same
14
+ // directory is read by 30+ agent tools from `.agents/skills/<name>/` and by
15
+ // Claude Code from `.claude/skills/<name>/`, so we fan the one source out to
16
+ // every configured target root.
17
+ // ─────────────────────────────────────────────────────────────────────────────
18
+
19
+ /** Recursively list file paths under `dir`, relative to `dir`. */
20
+ export function listFilesRecursive(dir) {
21
+ const out = [];
22
+ for (const entry of readdirSync(dir)) {
23
+ const full = join(dir, entry);
24
+ if (statSync(full).isDirectory()) {
25
+ for (const nested of listFilesRecursive(full)) out.push(join(entry, nested));
26
+ } else {
27
+ out.push(entry);
28
+ }
29
+ }
30
+ return out;
31
+ }
32
+
33
+ /**
34
+ * Enumerate the install plan without touching the filesystem.
35
+ *
36
+ * @param {object} cfg
37
+ * @param {string} cfg.projectRoot — consuming project root (absolute)
38
+ * @param {string} cfg.sourceDir — dir containing the source skill folders (absolute)
39
+ * @param {string[]} cfg.skills — skill folder names under sourceDir
40
+ * @param {string[]} cfg.targetRoots — install roots relative to projectRoot
41
+ * (e.g. ['.agents/skills', '.claude/skills'])
42
+ * @returns {Array<{ skill: string, root: string, rel: string, src: string, dest: string }>}
43
+ */
44
+ export function planSkills({ projectRoot, sourceDir, skills, targetRoots }) {
45
+ const plan = [];
46
+ for (const skill of skills) {
47
+ const skillSrc = join(sourceDir, skill);
48
+ for (const rel of listFilesRecursive(skillSrc)) {
49
+ for (const root of targetRoots) {
50
+ plan.push({
51
+ skill,
52
+ root,
53
+ rel: join(root, skill, rel),
54
+ src: join(skillSrc, rel),
55
+ dest: join(projectRoot, root, skill, rel),
56
+ });
57
+ }
58
+ }
59
+ }
60
+ return plan;
61
+ }
62
+
63
+ /**
64
+ * Copy each source skill into every target root (force-overwrite).
65
+ *
66
+ * @param {object} cfg — same shape as planSkills
67
+ * @returns {{ files: string[] }} — installed paths relative to projectRoot
68
+ */
69
+ export function installSkills({ projectRoot, sourceDir, skills, targetRoots }) {
70
+ const files = [];
71
+ for (const root of targetRoots) {
72
+ const rootDest = join(projectRoot, root);
73
+ mkdirSync(rootDest, { recursive: true });
74
+ for (const skill of skills) {
75
+ cpSync(join(sourceDir, skill), join(rootDest, skill), { recursive: true, force: true });
76
+ }
77
+ }
78
+ for (const { rel } of planSkills({ projectRoot, sourceDir, skills, targetRoots })) {
79
+ files.push(rel);
80
+ }
81
+ return { files };
82
+ }
83
+
84
+ /**
85
+ * Report which planned files are missing or differ from source (for --check).
86
+ *
87
+ * @param {object} cfg — same shape as planSkills
88
+ * @returns {string[]} — relative paths that are outdated (empty == up to date)
89
+ */
90
+ export function outdatedSkillFiles(cfg) {
91
+ const outdated = [];
92
+ for (const { rel, src, dest } of planSkills(cfg)) {
93
+ if (!existsSync(dest) || readFileSync(dest, 'utf-8') !== readFileSync(src, 'utf-8')) {
94
+ outdated.push(rel);
95
+ }
96
+ }
97
+ return outdated;
98
+ }
99
+
100
+ /** True if any skill was previously installed into any target root. */
101
+ export function isInstalled({ projectRoot, skills, targetRoots }) {
102
+ for (const root of targetRoots) {
103
+ for (const skill of skills) {
104
+ if (existsSync(join(projectRoot, root, skill))) return true;
105
+ }
106
+ }
107
+ return false;
108
+ }
@@ -725,6 +725,14 @@ const { CreateUser } = CreateHttp('CreateUser', {
725
725
 
726
726
  **Fix:** Leave validation on for any factory whose handlers can be reached from untrusted callers. Only opt out when the factory is purely internal (e.g., a back-of-house procedure registry called from another already-validated procedure or a fully type-checked compile step).
727
727
 
728
+ ---
729
+
730
+ ## Raw `app.use` + stashing for auth/tenant (instead of builder middleware)
731
+
732
+ **Problem:** Manually doing `app.use('/api/*', authenticate(...))` before `HonoAppBuilder` + having ctx factories read "stashed" values leads to ordering issues, duplicated path logic, and hard-to-follow public vs protected surfaces.
733
+
734
+ **Fix:** Declare auth/tenant as `middleware` on the builder (config, `.use(mw)`, or per-`register({ middleware })`). Use `register(..., { context: extraLayer })` for augmentation. The old separate-factory + raw use style still works but is no longer the recommended default for this concern.
735
+
728
736
  ```typescript
729
737
  // GOOD — public factory keeps runtime validation
730
738
  const { Create: CreatePublic } = Procedures()
@@ -183,26 +183,15 @@ Registers a unary HTTP procedure (v8+). First-class surface for REST-style route
183
183
  ```typescript
184
184
  function CreateHttp<
185
185
  TName extends string,
186
- TReq extends { pathParams?: unknown; query?: unknown; body?: unknown; headers?: unknown } = {},
187
- TRes extends { body?: unknown; headers?: unknown } = {},
186
+ TReq extends THttpReqInput | undefined = undefined,
187
+ TRes extends THttpResInput | undefined = undefined,
188
188
  TErrorKey extends string = string
189
189
  >(
190
190
  name: TName,
191
- config: {
192
- path: string
193
- method: HttpMethod
194
- successStatus?: number
195
- scope?: string
196
- errors?: TErrorKey[]
197
- description?: string
198
- schema: {
199
- req?: TReq
200
- res?: TRes
201
- }
202
- },
191
+ config: TCreateHttpConfig<TReq, TRes, TErrorKey>,
203
192
  handler: (
204
193
  ctx: TContext & TLocalContext,
205
- req: { [K in keyof TReq]: Infer<TReq[K]> }
194
+ req: HttpReq<TReq>
206
195
  ) => Promise<HttpReturn<TRes>>
207
196
  ): {
208
197
  [K in TName]: typeof handler
@@ -215,7 +204,7 @@ function CreateHttp<
215
204
 
216
205
  - `config.path` — Route path. Supports Hono-style path params (`:id`).
217
206
  - `config.method` — HTTP method.
218
- - `config.schema.req` — Per-channel input schemas. Channels: `pathParams`, `query`, `body`, `headers`. Each channel independently validated.
207
+ - `config.schema.req` — Per-channel input schemas. The keys `pathParams`, `query`, `body`, `headers` are surfaced by `THttpReqInput` (and `APIInput`) for autocomplete and `satisfies` checks. Each channel independently validated.
219
208
  - `config.schema.res.body` — Response body schema (documentation; not runtime-validated).
220
209
  - `config.schema.res.headers` — When declared, handler **must** return `{ body, headers }` instead of the body bare. The builder reads `headers` and forwards them to the HTTP response.
221
210
  - `config.errors` — Taxonomy keys this route may emit (populates DocEnvelope for codegen).
@@ -1010,26 +999,40 @@ interface StreamHttpRouteDoc extends RPCConfig {
1010
999
  }
1011
1000
  ```
1012
1001
 
1013
- ### TCreateHttpConfig (v8)
1002
+ ### TCreateHttpConfig
1014
1003
 
1015
1004
  Config type for `CreateHttp`. HTTP fields are first-class — no `APIConfig` type parameter needed on the factory.
1016
1005
 
1006
+ The `schema.req` and `schema.res` use special input shapes (`THttpReqInput`, `THttpResInput`) so that object literals get autocomplete for the channel keys (`pathParams`, `query`, `body`, `headers`). `TReq` / `TRes` carry the user's concrete schema types for inference.
1007
+
1017
1008
  ```typescript
1018
- type TCreateHttpConfig<TReq, TRes, TErrorKey extends string = string> = {
1009
+ type TCreateHttpConfig<
1010
+ TReq extends THttpReqInput | undefined = undefined,
1011
+ TRes extends THttpResInput | undefined = undefined,
1012
+ TErrorKey extends string = string,
1013
+ > = {
1019
1014
  path: string
1020
1015
  method: HttpMethod
1021
1016
  successStatus?: number
1022
1017
  scope?: string
1023
1018
  errors?: TErrorKey[]
1024
1019
  description?: string
1025
- schema: {
1026
- req?: TReq // per-channel input: { pathParams?, query?, body?, headers? }
1027
- res?: TRes // structured response: { body?, headers? }
1020
+ schema?: {
1021
+ req?: HttpSchemaInput<THttpReqInput, TReq>
1022
+ res?: HttpSchemaInput<THttpResInput, TRes>
1028
1023
  }
1029
1024
  }
1030
1025
  ```
1031
1026
 
1032
- ### APIHttpRouteDoc (v8)
1027
+ `APIInput` (re-exported from `ts-procedures/http`) is an alias for `THttpReqInput` and is the recommended type for `satisfies` checks on `req`:
1028
+
1029
+ ```ts
1030
+ req: { pathParams: ..., query: ... } satisfies APIInput
1031
+ ```
1032
+
1033
+ See also `THttpReqInput`, `THttpResInput`, `HttpSchemaInput`, and `APIInput`.
1034
+
1035
+ ### APIHttpRouteDoc
1033
1036
 
1034
1037
  ```typescript
1035
1038
  interface APIHttpRouteDoc {
@@ -796,28 +796,39 @@ const docs = getProcedures().map(proc => ({
796
796
 
797
797
  ---
798
798
 
799
- ## Multiple Factories for Access Control
799
+ ## Access Control with Middleware + Layered Context (preferred)
800
+
801
+ Use builder middleware (`.use()`, config `middleware`, or per-register) + context composition for cross-cutting concerns like auth/tenant. This keeps surfaces on fewer factories/builders and makes ordering explicit.
800
802
 
801
803
  ```typescript
802
- type PublicContext = { requestId: string }
803
- type AuthContext = { userId: string; requestId: string }
804
+ import { HonoAppBuilder, type HonoRequestMiddleware } from 'ts-procedures/hono'
804
805
 
805
- const PublicRPC = Procedures<PublicContext, RPCConfig>()
806
- const AuthRPC = Procedures<AuthContext, RPCConfig>()
806
+ type Base = { requestId: string }
807
+ type Authed = Base & { userId: string; tenant: string }
807
808
 
808
- PublicRPC.Create('HealthCheck', { scope: 'health', version: 1 }, async () => ({ status: 'ok' }))
809
- AuthRPC.Create('GetProfile', { scope: 'users', version: 1 }, async (ctx) => fetchProfile(ctx.userId))
809
+ const RPC = Procedures<Authed | Base, RPCConfig>()
810
810
 
811
- // Register with different context resolvers
812
- const app = new HonoAppBuilder({ pathPrefix: '/api' })
813
- .register(PublicRPC, (c) => ({ requestId: c.req.header('x-request-id') }))
814
- .register(AuthRPC, async (c) => ({
815
- userId: await authenticate(c),
816
- requestId: c.req.header('x-request-id'),
811
+ RPC.Create('HealthCheck', { scope: 'health', version: 1 }, async () => ({ status: 'ok' }))
812
+ RPC.Create('GetProfile', { scope: 'users', version: 1 }, async (ctx) => fetchProfile(ctx.userId))
813
+
814
+ const authenticate: HonoRequestMiddleware = async (c, next) => {
815
+ const token = c.req.header('authorization')
816
+ if (!token) throw new Error('unauthorized')
817
+ ;(c as any).set?.('tenant', 'acme')
818
+ await next()
819
+ }
820
+
821
+ const app = new HonoAppBuilder({ pathPrefix: '/api', middleware: [authenticate] })
822
+ .register(RPC, (c) => ({
823
+ requestId: c.req.header('x-request-id') || 'req',
824
+ tenant: (c as any).get?.('tenant') ?? 'public',
825
+ userId: 'u-123',
817
826
  }))
818
827
  .build()
819
828
  ```
820
829
 
830
+ Separate factories remain valid for truly disjoint context shapes.
831
+
821
832
  ---
822
833
 
823
834
  ## Documentation Generation with extendProcedureDoc
@@ -3,10 +3,8 @@ import { dirname, resolve } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { describe, expect, it } from 'vitest';
5
5
  import { Type } from 'typebox';
6
- import pkg from '../../../package.json' with { type: 'json' };
7
6
  import { Procedures } from '../../core/procedures.js';
8
7
  import { HonoAppBuilder, defineErrorTaxonomy } from './index.js';
9
- import { DOC_ENVELOPE_SPEC_VERSION } from '../../server/spec-version.js';
10
8
  /**
11
9
  * THE envelope contract test: the v9 builder must emit a DocEnvelope
12
10
  * deep-equal to what v8.6.0 emitted for the same procedure set. The fixture
@@ -16,15 +14,12 @@ import { DOC_ENVELOPE_SPEC_VERSION } from '../../server/spec-version.js';
16
14
  * The envelope is codegen's input; if this test fails, generated client output
17
15
  * WILL drift.
18
16
  *
19
- * TWO documented deviations from the raw v8 capture:
20
- * 1. v8's CreateHttpStream dropped the `yield` schema (and `res.headers`) from
21
- * http-stream route docs — the registration stored `yieldType` while the
22
- * doc builder read `yield`. v9 fixes that, so the fixture's TailUser route
23
- * was patched to include the `yield` schema the builder now emits.
24
- * 2. v9 adds envelope-level `specVersion`/`generatorVersion` metadata that v8
25
- * never emitted. These are asserted explicitly below, then stripped before
26
- * the deep-equal so the rest stays byte-for-byte with the v8 capture.
27
- * Everything else is the untouched v8 capture.
17
+ * ONE documented deviation from the raw v8 capture: v8's CreateHttpStream
18
+ * dropped the `yield` schema (and `res.headers`) from http-stream route docs —
19
+ * the registration stored `yieldType` while the doc builder read `yield`. v9
20
+ * fixes that, so the fixture's TailUser route was patched to include the
21
+ * `yield` schema the builder now (correctly) emits. Everything else is the
22
+ * untouched v8 capture.
28
23
  */
29
24
  class TeapotError extends Error {
30
25
  }
@@ -97,12 +92,6 @@ describe('DocEnvelope parity with v8.6.0', () => {
97
92
  const fixturePath = resolve(dirname(fileURLToPath(import.meta.url)), '__fixtures__/parity-envelope.json');
98
93
  const expected = JSON.parse(await readFile(fixturePath, 'utf-8'));
99
94
  const actual = JSON.parse(JSON.stringify(builder.toDocEnvelope()));
100
- // Deviation #2: assert the new v9 envelope metadata, then strip it so the
101
- // remaining shape matches the untouched v8 capture.
102
- expect(actual.specVersion).toBe(DOC_ENVELOPE_SPEC_VERSION);
103
- expect(actual.generatorVersion).toBe(pkg.version);
104
- delete actual.specVersion;
105
- delete actual.generatorVersion;
106
95
  expect(actual).toEqual(expected);
107
96
  });
108
97
  });
@@ -1 +1 @@
1
- {"version":3,"file":"envelope-parity.test.js","sourceRoot":"","sources":["../../../src/adapters/hono/envelope-parity.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"envelope-parity.test.js","sourceRoot":"","sources":["../../../src/adapters/hono/envelope-parity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAGhE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAY,SAAQ,KAAK;CAAG;AAElC,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,OAAO,GAAG,UAAU,EAAsB,CAAA;QAChD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAA;QAEtE,MAAM,CACJ,SAAS,EACT;YACE,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC,QAAQ,CAAC;YAClB,WAAW,EAAE,gBAAgB;YAC7B,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;aACpE;SACF,EACD,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CACvD,CAAA;QAED,YAAY,CACV,WAAW,EACX;YACE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;YACxB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1C,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;aAClD;SACF,EACD,KAAK,SAAS,CAAC;YACb,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAA;YACf,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;QACrB,CAAC,CACF,CAAA;QAED,UAAU,CACR,YAAY,EACZ;YACE,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,KAAK;YACb,aAAa,EAAE,GAAG;YAClB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,CAAC,QAAQ,CAAC;YAClB,MAAM,EAAE;gBACN,GAAG,EAAE;oBACH,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC9C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC7D,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;iBAC3C;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC7D,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;iBACjD;aACF;SACF,EACD,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACpB,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YACpD,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;SAC1B,CAAC,CACH,CAAA;QAED,gBAAgB,CACd,UAAU,EACV;YACE,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,OAAO;YACd,MAAM,EAAE;gBACN,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBACvD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC3C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;aAClD;SACF,EACD,KAAK,SAAS,CAAC;YACb,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;YACnB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;QACrB,CAAC,CACF,CAAA;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC;YACnC,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,EAAE;SACjF,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC5E,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAC7B,OAAO,CAAC,KAAK,EAAE,CAAA;QAEf,MAAM,WAAW,GAAG,OAAO,CACzB,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACvC,mCAAmC,CACpC,CAAA;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;QAElE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,10 +1,11 @@
1
1
  import type { Hono } from 'hono';
2
2
  import type { THttpStreamProcedureRegistration } from '../../../core/types.js';
3
- import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem } from '../types.js';
3
+ import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem, HonoRequestMiddleware } from '../types.js';
4
4
  export declare function installHttpStreamRoute(params: {
5
5
  app: Hono;
6
6
  procedure: THttpStreamProcedureRegistration<any>;
7
7
  factoryItem: HonoFactoryItem;
8
8
  cfg: HonoAppBuilderConfig;
9
9
  docs: DocAccumulator;
10
+ builderMiddleware?: HonoRequestMiddleware[];
10
11
  }): void;
@@ -5,16 +5,23 @@ import { resolveFactoryContext } from '../../../server/context.js';
5
5
  import { extractReqChannels } from '../../../server/request/params.js';
6
6
  import { parseQueryNative } from '../../../server/request/query.js';
7
7
  import { SseEventSequencer } from '../../../server/sse.js';
8
- import { honoRequestSource, respondToDispatch } from '../request.js';
8
+ import { honoRequestSource, respondToDispatch, runMiddlewareList } from '../request.js';
9
9
  import { midStreamErrorConfig, preStreamErrorConfig } from '../types.js';
10
10
  export function installHttpStreamRoute(params) {
11
- const { app, procedure, factoryItem, cfg, docs } = params;
11
+ const { app, procedure, factoryItem, cfg, docs, builderMiddleware } = params;
12
12
  const queryParser = cfg.api?.queryParser ?? parseQueryNative;
13
13
  const route = buildHttpStreamRouteDoc(procedure, cfg.pathPrefix, factoryItem.extendProcedureDoc);
14
14
  docs.push(route);
15
15
  const reqSchema = procedure.config.schema?.req;
16
+ const combinedMw = [
17
+ ...(builderMiddleware ?? []),
18
+ ...(factoryItem.middleware ?? []),
19
+ ];
16
20
  app.on(procedure.config.method.toUpperCase(), route.fullPath, async (c) => {
17
21
  try {
22
+ const early = await runMiddlewareList(c, combinedMw);
23
+ if (early)
24
+ return early;
18
25
  const context = await resolveFactoryContext(factoryItem.factoryContext, c);
19
26
  const reqParams = reqSchema
20
27
  ? await extractReqChannels(honoRequestSource(c), procedure.config.method, reqSchema, queryParser)
@@ -1 +1 @@
1
- {"version":3,"file":"http-stream.js","sourceRoot":"","sources":["../../../../src/adapters/hono/handlers/http-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-stream.js","sourceRoot":"","sources":["../../../../src/adapters/hono/handlers/http-stream.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import type { Hono } from 'hono';
2
2
  import type { THttpProcedureRegistration } from '../../../core/types.js';
3
- import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem } from '../types.js';
3
+ import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem, HonoRequestMiddleware } from '../types.js';
4
4
  export declare function installHttpRoute(params: {
5
5
  app: Hono;
6
6
  procedure: THttpProcedureRegistration<any>;
7
7
  factoryItem: HonoFactoryItem;
8
8
  cfg: HonoAppBuilderConfig;
9
9
  docs: DocAccumulator;
10
+ builderMiddleware?: HonoRequestMiddleware[];
10
11
  }): void;
@@ -3,17 +3,24 @@ import { buildHttpRouteDoc } from '../../../server/docs/http-doc.js';
3
3
  import { resolveFactoryContext } from '../../../server/context.js';
4
4
  import { defaultSuccessStatus, extractReqChannels } from '../../../server/request/params.js';
5
5
  import { parseQueryNative } from '../../../server/request/query.js';
6
- import { honoRequestSource, respondToDispatch } from '../request.js';
6
+ import { honoRequestSource, respondToDispatch, runMiddlewareList } from '../request.js';
7
7
  import { preStreamErrorConfig } from '../types.js';
8
8
  export function installHttpRoute(params) {
9
- const { app, procedure, factoryItem, cfg, docs } = params;
9
+ const { app, procedure, factoryItem, cfg, docs, builderMiddleware } = params;
10
10
  const queryParser = cfg.api?.queryParser ?? parseQueryNative;
11
11
  const route = buildHttpRouteDoc(procedure, cfg.pathPrefix, factoryItem.extendProcedureDoc);
12
12
  docs.push(route);
13
13
  const successStatus = procedure.config.successStatus ?? defaultSuccessStatus(procedure.config.method);
14
14
  const reqSchema = procedure.config.schema?.req;
15
+ const combinedMw = [
16
+ ...(builderMiddleware ?? []),
17
+ ...(factoryItem.middleware ?? []),
18
+ ];
15
19
  app.on(procedure.config.method.toUpperCase(), route.fullPath, async (c) => {
16
20
  try {
21
+ const early = await runMiddlewareList(c, combinedMw);
22
+ if (early)
23
+ return early;
17
24
  const context = await resolveFactoryContext(factoryItem.factoryContext, c);
18
25
  const reqParams = reqSchema
19
26
  ? await extractReqChannels(honoRequestSource(c), procedure.config.method, reqSchema, queryParser)
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../src/adapters/hono/handlers/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../src/adapters/hono/handlers/http.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import type { Hono } from 'hono';
2
2
  import type { TProcedureRegistration } from '../../../core/types.js';
3
3
  import type { RPCConfig } from '../../../server/types.js';
4
- import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem } from '../types.js';
4
+ import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem, HonoRequestMiddleware } from '../types.js';
5
5
  export declare function installRpcRoute(params: {
6
6
  app: Hono;
7
7
  procedure: TProcedureRegistration<any, RPCConfig>;
8
8
  factoryItem: HonoFactoryItem;
9
9
  cfg: HonoAppBuilderConfig;
10
10
  docs: DocAccumulator;
11
+ builderMiddleware?: HonoRequestMiddleware[];
11
12
  }): void;
@@ -1,14 +1,21 @@
1
1
  import { dispatchPreStreamError } from '../../../server/errors/dispatch.js';
2
2
  import { buildRpcRouteDoc } from '../../../server/docs/rpc-doc.js';
3
3
  import { resolveFactoryContext } from '../../../server/context.js';
4
- import { respondToDispatch } from '../request.js';
4
+ import { respondToDispatch, runMiddlewareList } from '../request.js';
5
5
  import { preStreamErrorConfig } from '../types.js';
6
6
  export function installRpcRoute(params) {
7
- const { app, procedure, factoryItem, cfg, docs } = params;
7
+ const { app, procedure, factoryItem, cfg, docs, builderMiddleware } = params;
8
8
  const route = buildRpcRouteDoc(procedure, cfg.pathPrefix, factoryItem.extendProcedureDoc);
9
9
  docs.push(route);
10
+ const combinedMw = [
11
+ ...(builderMiddleware ?? []),
12
+ ...(factoryItem.middleware ?? []),
13
+ ];
10
14
  app.post(route.path, async (c) => {
11
15
  try {
16
+ const early = await runMiddlewareList(c, combinedMw);
17
+ if (early)
18
+ return early;
12
19
  const context = await resolveFactoryContext(factoryItem.factoryContext, c);
13
20
  const body = await c.req.json().catch(() => ({}));
14
21
  const result = await procedure.handler({ ...context, signal: c.req.raw.signal }, body);
@@ -1 +1 @@
1
- {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../../../src/adapters/hono/handlers/rpc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGlD,MAAM,UAAU,eAAe,CAAC,MAM/B;IACC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IAEzD,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,kBAAyB,CAAC,CAAA;IAChG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEhB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;YAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACjD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;YAEtF,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAElC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,iBAAiB,CACtB,CAAC,EACD,MAAM,sBAAsB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAChG,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../../../src/adapters/hono/handlers/rpc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGlD,MAAM,UAAU,eAAe,CAAC,MAO/B;IACC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAA;IAE5E,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,kBAAyB,CAAC,CAAA;IAChG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEhB,MAAM,UAAU,GAAG;QACjB,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QAC5B,GAAG,CAAC,WAAW,CAAC,UAAU,IAAI,EAAE,CAAC;KAClC,CAAA;IAED,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;YACpD,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAA;YAEvB,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;YAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACjD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;YAEtF,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAElC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,iBAAiB,CACtB,CAAC,EACD,MAAM,sBAAsB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAChG,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { Hono } from 'hono';
2
2
  import type { TStreamProcedureRegistration } from '../../../core/types.js';
3
3
  import type { RPCConfig, StreamMode } from '../../../server/types.js';
4
- import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem } from '../types.js';
4
+ import type { DocAccumulator, HonoAppBuilderConfig, HonoFactoryItem, HonoRequestMiddleware } from '../types.js';
5
5
  export declare function installRpcStreamRoute(params: {
6
6
  app: Hono;
7
7
  procedure: TStreamProcedureRegistration<any, RPCConfig>;
@@ -9,4 +9,5 @@ export declare function installRpcStreamRoute(params: {
9
9
  cfg: HonoAppBuilderConfig;
10
10
  docs: DocAccumulator;
11
11
  streamMode: StreamMode;
12
+ builderMiddleware?: HonoRequestMiddleware[];
12
13
  }): void;
@@ -4,14 +4,21 @@ import { dispatchMidStreamError, dispatchPreStreamError } from '../../../server/
4
4
  import { buildStreamRouteDoc } from '../../../server/docs/stream-doc.js';
5
5
  import { resolveFactoryContext } from '../../../server/context.js';
6
6
  import { SseEventSequencer } from '../../../server/sse.js';
7
- import { respondToDispatch } from '../request.js';
7
+ import { respondToDispatch, runMiddlewareList } from '../request.js';
8
8
  import { midStreamErrorConfig, preStreamErrorConfig } from '../types.js';
9
9
  export function installRpcStreamRoute(params) {
10
- const { app, procedure, factoryItem, cfg, docs, streamMode } = params;
10
+ const { app, procedure, factoryItem, cfg, docs, streamMode, builderMiddleware } = params;
11
11
  const route = buildStreamRouteDoc(procedure, streamMode, cfg.pathPrefix, factoryItem.extendProcedureDoc);
12
12
  docs.push(route);
13
+ const combinedMw = [
14
+ ...(builderMiddleware ?? []),
15
+ ...(factoryItem.middleware ?? []),
16
+ ];
13
17
  const handler = async (c) => {
14
18
  try {
19
+ const early = await runMiddlewareList(c, combinedMw);
20
+ if (early)
21
+ return early;
15
22
  const context = await resolveFactoryContext(factoryItem.factoryContext, c);
16
23
  const reqParams = c.req.method === 'GET'
17
24
  ? Object.fromEntries(new URL(c.req.url).searchParams)
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../src/adapters/hono/handlers/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../src/adapters/hono/handlers/stream.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { Hono } from 'hono';
2
- import type { AnyHttpRouteDoc, ProceduresFactory, ExtractContext, StreamMode, DocEnvelope, ErrorDoc, HeaderDoc } from '../../server/types.js';
2
+ import type { AnyHttpRouteDoc, ProceduresFactory, ExtractContext, DocEnvelope, ErrorDoc, HeaderDoc } from '../../server/types.js';
3
3
  import type { ErrorTaxonomy } from '../../server/errors/taxonomy.js';
4
4
  import type { FactoryContextInit } from '../../server/context.js';
5
5
  import { makeRoutePath as _makeRoutePath } from '../../server/paths.js';
6
6
  import type { Context } from 'hono';
7
- import type { HonoAppBuilderConfig, ExtendProcedureDoc } from './types.js';
8
- export type { HonoAppBuilderConfig, ExtendProcedureDoc, QueryParser } from './types.js';
7
+ import type { HonoAppBuilderConfig, HonoRequestMiddleware, RegisterOptions } from './types.js';
8
+ export type { HonoAppBuilderConfig, ExtendProcedureDoc, QueryParser, HonoRequestMiddleware, RegisterOptions } from './types.js';
9
9
  export type { OnRequestErrorContext } from './types.js';
10
10
  export { sse } from '../../server/sse.js';
11
11
  export type { SSEOptions } from '../../server/sse.js';
@@ -27,10 +27,20 @@ export declare class HonoAppBuilder<TStreamErrorData = unknown> {
27
27
  readonly config?: HonoAppBuilderConfig<TStreamErrorData> | undefined;
28
28
  private readonly _app;
29
29
  private readonly factories;
30
+ private readonly builderMiddleware;
30
31
  private _docs;
31
32
  private _skipped;
32
33
  private _built;
33
34
  constructor(config?: HonoAppBuilderConfig<TStreamErrorData> | undefined);
35
+ /**
36
+ * Register Hono middleware to run for routes on this builder.
37
+ * If no pattern is provided, uses the builder's pathPrefix (or '*').
38
+ *
39
+ * The middleware is installed on the underlying Hono app immediately
40
+ * (classic Hono behavior) and is also available for per-procedure
41
+ * sequencing inside handlers.
42
+ */
43
+ use(patternOrMw?: string | HonoRequestMiddleware, maybeMw?: HonoRequestMiddleware): this;
34
44
  static makeRoutePath: typeof _makeRoutePath;
35
45
  get app(): Hono;
36
46
  /**
@@ -42,10 +52,7 @@ export declare class HonoAppBuilder<TStreamErrorData = unknown> {
42
52
  name: string;
43
53
  reason: string;
44
54
  }[];
45
- register<TFactory extends ProceduresFactory>(factory: TFactory, factoryContext: FactoryContextInit<ExtractContext<TFactory>, Context>, options?: {
46
- streamMode?: StreamMode;
47
- extendProcedureDoc?: ExtendProcedureDoc;
48
- }): this;
55
+ register<TFactory extends ProceduresFactory>(factory: TFactory, factoryContext: FactoryContextInit<ExtractContext<TFactory>, Context>, options?: RegisterOptions<TFactory>): this;
49
56
  private computeDocs;
50
57
  /**
51
58
  * Mounts every registered procedure on the Hono app and returns it.