@pikku/core 0.11.2 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/CHANGELOG.md +33 -2
  2. package/dist/crypto-utils.d.ts +2 -0
  3. package/dist/crypto-utils.js +78 -0
  4. package/dist/errors/errors.d.ts +8 -0
  5. package/dist/errors/errors.js +16 -0
  6. package/dist/errors/index.d.ts +0 -1
  7. package/dist/errors/index.js +0 -1
  8. package/dist/function/function-runner.d.ts +7 -1
  9. package/dist/function/function-runner.js +82 -23
  10. package/dist/function/functions.types.d.ts +31 -87
  11. package/dist/function/functions.types.js +16 -46
  12. package/dist/function/index.d.ts +2 -2
  13. package/dist/function/index.js +1 -2
  14. package/dist/handle-error.js +1 -10
  15. package/dist/index.d.ts +28 -26
  16. package/dist/index.js +18 -29
  17. package/dist/middleware/auth-apikey.d.ts +2 -2
  18. package/dist/middleware/auth-apikey.js +3 -3
  19. package/dist/middleware/auth-bearer.d.ts +2 -2
  20. package/dist/middleware/auth-bearer.js +3 -6
  21. package/dist/middleware/auth-cookie.d.ts +2 -2
  22. package/dist/middleware/auth-cookie.js +6 -8
  23. package/dist/middleware/cors.d.ts +46 -0
  24. package/dist/middleware/cors.js +73 -0
  25. package/dist/middleware/index.d.ts +5 -3
  26. package/dist/middleware/index.js +5 -3
  27. package/dist/middleware/remote-auth.d.ts +5 -0
  28. package/dist/middleware/remote-auth.js +55 -0
  29. package/dist/middleware/timeout.d.ts +2 -2
  30. package/dist/middleware-runner.js +8 -10
  31. package/dist/permissions.js +11 -15
  32. package/dist/pikku-state.d.ts +1 -0
  33. package/dist/pikku-state.js +18 -8
  34. package/dist/schema.js +12 -11
  35. package/dist/services/ai-agent-runner-service.d.ts +24 -0
  36. package/dist/services/ai-agent-runner-service.js +1 -0
  37. package/dist/services/ai-run-state-service.d.ts +13 -0
  38. package/dist/services/ai-run-state-service.js +1 -0
  39. package/dist/services/ai-storage-service.d.ts +18 -0
  40. package/dist/services/ai-storage-service.js +1 -0
  41. package/dist/services/deployment-service.d.ts +19 -0
  42. package/dist/services/deployment-service.js +1 -0
  43. package/dist/services/gopass-secrets.d.ts +47 -0
  44. package/dist/services/gopass-secrets.js +94 -0
  45. package/dist/services/in-memory-trigger-service.d.ts +23 -0
  46. package/dist/services/in-memory-trigger-service.js +50 -0
  47. package/dist/services/in-memory-workflow-service.d.ts +59 -0
  48. package/dist/services/in-memory-workflow-service.js +287 -0
  49. package/dist/services/index.d.ts +25 -11
  50. package/dist/services/index.js +10 -13
  51. package/dist/services/local-secrets.d.ts +23 -0
  52. package/dist/services/local-secrets.js +45 -0
  53. package/dist/services/local-variables.d.ts +5 -0
  54. package/dist/services/local-variables.js +18 -0
  55. package/dist/services/scheduler-service.d.ts +21 -1
  56. package/dist/services/scheduler-service.js +14 -0
  57. package/dist/services/schema-service.d.ts +6 -0
  58. package/dist/services/scoped-secret-service.d.ts +16 -0
  59. package/dist/services/scoped-secret-service.js +35 -0
  60. package/dist/services/secret-service.d.ts +25 -4
  61. package/dist/services/trigger-service.d.ts +23 -0
  62. package/dist/services/trigger-service.js +1 -0
  63. package/dist/services/typed-secret-service.d.ts +30 -0
  64. package/dist/services/typed-secret-service.js +40 -0
  65. package/dist/services/typed-variables-service.d.ts +27 -0
  66. package/dist/services/typed-variables-service.js +46 -0
  67. package/dist/services/user-session-service.d.ts +13 -0
  68. package/dist/services/user-session-service.js +17 -0
  69. package/dist/services/variables-service.d.ts +5 -0
  70. package/dist/services/workflow-service.d.ts +9 -4
  71. package/dist/types/core.types.d.ts +48 -12
  72. package/dist/types/core.types.js +8 -1
  73. package/dist/types/state.types.d.ts +43 -51
  74. package/dist/utils.d.ts +3 -2
  75. package/dist/utils.js +15 -3
  76. package/dist/version.d.ts +6 -0
  77. package/dist/version.js +19 -0
  78. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
  79. package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
  80. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
  81. package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
  82. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +60 -0
  83. package/dist/wirings/ai-agent/ai-agent-prepare.js +312 -0
  84. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
  85. package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
  86. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
  87. package/dist/wirings/ai-agent/ai-agent-runner.js +96 -0
  88. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +11 -0
  89. package/dist/wirings/ai-agent/ai-agent-stream.js +503 -0
  90. package/dist/wirings/ai-agent/ai-agent.types.d.ts +254 -0
  91. package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
  92. package/dist/wirings/ai-agent/index.d.ts +5 -0
  93. package/dist/wirings/ai-agent/index.js +4 -0
  94. package/dist/wirings/channel/channel-common.d.ts +7 -4
  95. package/dist/wirings/channel/channel-common.js +15 -8
  96. package/dist/wirings/channel/channel-handler.js +12 -3
  97. package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
  98. package/dist/wirings/channel/channel-middleware-runner.js +73 -0
  99. package/dist/wirings/channel/channel-runner.js +7 -7
  100. package/dist/wirings/channel/channel.types.d.ts +5 -1
  101. package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
  102. package/dist/wirings/channel/define-channel-routes.js +23 -0
  103. package/dist/wirings/channel/index.d.ts +10 -8
  104. package/dist/wirings/channel/index.js +7 -8
  105. package/dist/wirings/channel/local/index.d.ts +3 -3
  106. package/dist/wirings/channel/local/index.js +3 -3
  107. package/dist/wirings/channel/local/local-channel-runner.js +18 -6
  108. package/dist/wirings/channel/serverless/index.d.ts +1 -1
  109. package/dist/wirings/channel/serverless/index.js +1 -1
  110. package/dist/wirings/channel/serverless/serverless-channel-runner.js +15 -4
  111. package/dist/wirings/cli/channel/index.d.ts +1 -1
  112. package/dist/wirings/cli/channel/index.js +1 -1
  113. package/dist/wirings/cli/cli-runner.d.ts +1 -1
  114. package/dist/wirings/cli/cli-runner.js +12 -8
  115. package/dist/wirings/cli/cli.types.d.ts +6 -6
  116. package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
  117. package/dist/wirings/cli/define-cli-commands.js +20 -0
  118. package/dist/wirings/cli/index.d.ts +2 -3
  119. package/dist/wirings/cli/index.js +1 -3
  120. package/dist/wirings/http/http-routes.d.ts +69 -0
  121. package/dist/wirings/http/http-routes.js +139 -0
  122. package/dist/wirings/http/http-runner.js +49 -23
  123. package/dist/wirings/http/http.types.d.ts +78 -38
  124. package/dist/wirings/http/index.d.ts +5 -4
  125. package/dist/wirings/http/index.js +4 -3
  126. package/dist/wirings/mcp/index.d.ts +4 -3
  127. package/dist/wirings/mcp/index.js +3 -3
  128. package/dist/wirings/mcp/mcp-runner.d.ts +1 -3
  129. package/dist/wirings/mcp/mcp-runner.js +25 -39
  130. package/dist/wirings/mcp/mcp.types.d.ts +3 -3
  131. package/dist/wirings/node/index.d.ts +2 -0
  132. package/dist/wirings/node/index.js +1 -0
  133. package/dist/wirings/node/node.types.d.ts +20 -0
  134. package/dist/wirings/node/node.types.js +1 -0
  135. package/dist/wirings/oauth2/index.d.ts +3 -0
  136. package/dist/wirings/oauth2/index.js +2 -0
  137. package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
  138. package/dist/wirings/oauth2/oauth2-client.js +267 -0
  139. package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
  140. package/dist/wirings/oauth2/oauth2.types.js +4 -0
  141. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
  142. package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
  143. package/dist/wirings/queue/index.d.ts +2 -2
  144. package/dist/wirings/queue/index.js +1 -1
  145. package/dist/wirings/queue/queue-runner.d.ts +7 -0
  146. package/dist/wirings/queue/queue-runner.js +17 -6
  147. package/dist/wirings/queue/queue.types.d.ts +8 -2
  148. package/dist/wirings/rpc/index.d.ts +1 -1
  149. package/dist/wirings/rpc/index.js +1 -1
  150. package/dist/wirings/rpc/rpc-runner.d.ts +33 -5
  151. package/dist/wirings/rpc/rpc-runner.js +134 -16
  152. package/dist/wirings/rpc/rpc-types.d.ts +8 -4
  153. package/dist/wirings/scheduler/index.d.ts +3 -3
  154. package/dist/wirings/scheduler/index.js +2 -3
  155. package/dist/wirings/scheduler/scheduler-runner.d.ts +5 -0
  156. package/dist/wirings/scheduler/scheduler-runner.js +23 -5
  157. package/dist/wirings/secret/index.d.ts +3 -0
  158. package/dist/wirings/secret/index.js +2 -0
  159. package/dist/wirings/secret/secret.types.d.ts +27 -0
  160. package/dist/wirings/secret/secret.types.js +1 -0
  161. package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
  162. package/dist/wirings/secret/validate-secret-definitions.js +55 -0
  163. package/dist/wirings/trigger/index.d.ts +3 -2
  164. package/dist/wirings/trigger/index.js +2 -2
  165. package/dist/wirings/trigger/pikku-trigger-service.d.ts +26 -0
  166. package/dist/wirings/trigger/pikku-trigger-service.js +75 -0
  167. package/dist/wirings/trigger/trigger-runner.d.ts +21 -8
  168. package/dist/wirings/trigger/trigger-runner.js +46 -18
  169. package/dist/wirings/trigger/trigger.types.d.ts +99 -11
  170. package/dist/wirings/trigger/trigger.types.js +40 -1
  171. package/dist/wirings/variable/index.d.ts +3 -0
  172. package/dist/wirings/variable/index.js +2 -0
  173. package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
  174. package/dist/wirings/variable/validate-variable-definitions.js +45 -0
  175. package/dist/wirings/variable/variable.types.d.ts +18 -0
  176. package/dist/wirings/variable/variable.types.js +1 -0
  177. package/dist/wirings/workflow/dsl/index.d.ts +1 -1
  178. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
  179. package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
  180. package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
  181. package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
  182. package/dist/wirings/workflow/graph/graph-runner.js +384 -296
  183. package/dist/wirings/workflow/graph/index.d.ts +4 -3
  184. package/dist/wirings/workflow/graph/index.js +3 -3
  185. package/dist/wirings/workflow/graph/template.d.ts +15 -0
  186. package/dist/wirings/workflow/graph/template.js +27 -0
  187. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
  188. package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
  189. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
  190. package/dist/wirings/workflow/index.d.ts +6 -6
  191. package/dist/wirings/workflow/index.js +6 -4
  192. package/dist/wirings/workflow/pikku-workflow-service.d.ts +28 -14
  193. package/dist/wirings/workflow/pikku-workflow-service.js +200 -56
  194. package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
  195. package/dist/wirings/workflow/workflow-helpers.js +38 -0
  196. package/dist/wirings/workflow/workflow-utils.d.ts +1 -23
  197. package/dist/wirings/workflow/workflow-utils.js +1 -66
  198. package/dist/wirings/workflow/workflow.types.d.ts +40 -93
  199. package/package.json +13 -15
  200. package/run-tests.sh +4 -1
  201. package/src/crypto-utils.ts +99 -0
  202. package/src/errors/errors.ts +17 -0
  203. package/src/errors/index.ts +0 -1
  204. package/src/factory-functions.test.ts +42 -2
  205. package/src/function/function-runner.test.ts +4 -11
  206. package/src/function/function-runner.ts +114 -29
  207. package/src/function/functions.types.ts +62 -132
  208. package/src/function/index.ts +5 -2
  209. package/src/handle-error.ts +2 -10
  210. package/src/index.ts +99 -25
  211. package/src/middleware/auth-apikey.test.ts +15 -12
  212. package/src/middleware/auth-apikey.ts +3 -3
  213. package/src/middleware/auth-bearer.test.ts +17 -14
  214. package/src/middleware/auth-bearer.ts +25 -27
  215. package/src/middleware/auth-cookie.test.ts +16 -13
  216. package/src/middleware/auth-cookie.ts +6 -8
  217. package/src/middleware/cors.ts +96 -0
  218. package/src/middleware/index.ts +5 -3
  219. package/src/middleware/remote-auth.ts +68 -0
  220. package/src/middleware-runner.test.ts +122 -0
  221. package/src/middleware-runner.ts +12 -12
  222. package/src/permissions.test.ts +81 -7
  223. package/src/permissions.ts +15 -17
  224. package/src/pikku-state.ts +20 -8
  225. package/src/run-tests-script.test.ts +49 -0
  226. package/src/schema.ts +18 -15
  227. package/src/services/ai-agent-runner-service.ts +29 -0
  228. package/src/services/ai-run-state-service.ts +20 -0
  229. package/src/services/ai-storage-service.ts +39 -0
  230. package/src/services/deployment-service.ts +22 -0
  231. package/src/services/gopass-secrets.ts +95 -0
  232. package/src/services/in-memory-trigger-service.ts +68 -0
  233. package/src/services/in-memory-workflow-service.ts +395 -0
  234. package/src/services/index.ts +49 -14
  235. package/src/services/local-secrets.ts +51 -0
  236. package/src/services/local-variables.ts +22 -0
  237. package/src/services/scheduler-service.ts +29 -1
  238. package/src/services/schema-service.ts +7 -0
  239. package/src/services/scoped-secret-service.ts +41 -0
  240. package/src/services/secret-service.ts +25 -4
  241. package/src/services/trigger-service.ts +38 -0
  242. package/src/services/typed-secret-service.ts +70 -0
  243. package/src/services/typed-variables-service.ts +81 -0
  244. package/src/services/user-session-service.ts +23 -0
  245. package/src/services/variables-service.ts +5 -0
  246. package/src/services/workflow-service.ts +22 -2
  247. package/src/types/core.types.ts +76 -11
  248. package/src/types/state.types.ts +37 -63
  249. package/src/utils.ts +20 -6
  250. package/src/version.test.ts +80 -0
  251. package/src/version.ts +25 -0
  252. package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
  253. package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
  254. package/src/wirings/ai-agent/ai-agent-prepare.ts +470 -0
  255. package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
  256. package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
  257. package/src/wirings/ai-agent/ai-agent-runner.test.ts +75 -0
  258. package/src/wirings/ai-agent/ai-agent-runner.ts +137 -0
  259. package/src/wirings/ai-agent/ai-agent-stream.test.ts +246 -0
  260. package/src/wirings/ai-agent/ai-agent-stream.ts +774 -0
  261. package/src/wirings/ai-agent/ai-agent.types.ts +273 -0
  262. package/src/wirings/ai-agent/index.ts +28 -0
  263. package/src/wirings/channel/channel-common.ts +32 -19
  264. package/src/wirings/channel/channel-handler.ts +17 -4
  265. package/src/wirings/channel/channel-middleware-runner.ts +119 -0
  266. package/src/wirings/channel/channel-runner.ts +9 -10
  267. package/src/wirings/channel/channel.types.ts +17 -1
  268. package/src/wirings/channel/define-channel-routes.ts +25 -0
  269. package/src/wirings/channel/index.ts +23 -8
  270. package/src/wirings/channel/local/index.ts +3 -3
  271. package/src/wirings/channel/local/local-channel-runner.test.ts +44 -1
  272. package/src/wirings/channel/local/local-channel-runner.ts +22 -6
  273. package/src/wirings/channel/serverless/index.ts +5 -1
  274. package/src/wirings/channel/serverless/serverless-channel-runner.ts +20 -4
  275. package/src/wirings/cli/channel/index.ts +1 -1
  276. package/src/wirings/cli/cli-runner.test.ts +9 -9
  277. package/src/wirings/cli/cli-runner.ts +17 -10
  278. package/src/wirings/cli/cli.types.ts +11 -11
  279. package/src/wirings/cli/command-parser.test.ts +8 -8
  280. package/src/wirings/cli/define-cli-commands.ts +24 -0
  281. package/src/wirings/cli/index.ts +10 -4
  282. package/src/wirings/http/http-routes.test.ts +322 -0
  283. package/src/wirings/http/http-routes.ts +198 -0
  284. package/src/wirings/http/http-runner.test.ts +3 -3
  285. package/src/wirings/http/http-runner.ts +63 -29
  286. package/src/wirings/http/http.types.ts +121 -37
  287. package/src/wirings/http/index.ts +16 -4
  288. package/src/wirings/mcp/index.ts +27 -3
  289. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
  290. package/src/wirings/mcp/mcp-runner.ts +39 -50
  291. package/src/wirings/mcp/mcp.types.ts +3 -3
  292. package/src/wirings/node/index.ts +2 -0
  293. package/src/wirings/node/node.types.ts +23 -0
  294. package/src/wirings/oauth2/index.ts +3 -0
  295. package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
  296. package/src/wirings/oauth2/oauth2-client.ts +335 -0
  297. package/src/wirings/oauth2/oauth2.types.ts +69 -0
  298. package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
  299. package/src/wirings/queue/index.ts +14 -2
  300. package/src/wirings/queue/queue-runner.test.ts +97 -55
  301. package/src/wirings/queue/queue-runner.ts +33 -7
  302. package/src/wirings/queue/queue.types.ts +12 -2
  303. package/src/wirings/rpc/index.ts +1 -1
  304. package/src/wirings/rpc/rpc-runner.ts +187 -17
  305. package/src/wirings/rpc/rpc-types.ts +13 -4
  306. package/src/wirings/scheduler/index.ts +7 -4
  307. package/src/wirings/scheduler/scheduler-runner.test.ts +70 -26
  308. package/src/wirings/scheduler/scheduler-runner.ts +45 -5
  309. package/src/wirings/secret/index.ts +9 -0
  310. package/src/wirings/secret/secret.types.ts +32 -0
  311. package/src/wirings/secret/validate-secret-definitions.ts +82 -0
  312. package/src/wirings/trigger/index.ts +10 -2
  313. package/src/wirings/trigger/pikku-trigger-service.ts +134 -0
  314. package/src/wirings/trigger/trigger-runner.ts +80 -38
  315. package/src/wirings/trigger/trigger.types.ts +144 -22
  316. package/src/wirings/variable/index.ts +8 -0
  317. package/src/wirings/variable/validate-variable-definitions.ts +69 -0
  318. package/src/wirings/variable/variable.types.ts +22 -0
  319. package/src/wirings/workflow/dsl/index.ts +1 -0
  320. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
  321. package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
  322. package/src/wirings/workflow/graph/graph-node.ts +1 -6
  323. package/src/wirings/workflow/graph/graph-runner.test.ts +495 -0
  324. package/src/wirings/workflow/graph/graph-runner.ts +496 -374
  325. package/src/wirings/workflow/graph/index.ts +14 -3
  326. package/src/wirings/workflow/graph/template.ts +42 -0
  327. package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
  328. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
  329. package/src/wirings/workflow/index.ts +21 -10
  330. package/src/wirings/workflow/pikku-workflow-service.test.ts +212 -0
  331. package/src/wirings/workflow/pikku-workflow-service.ts +285 -66
  332. package/src/wirings/workflow/workflow-helpers.ts +79 -0
  333. package/src/wirings/workflow/workflow-utils.ts +0 -120
  334. package/src/wirings/workflow/workflow.types.ts +45 -90
  335. package/tsconfig.tsbuildinfo +1 -1
  336. package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
  337. package/dist/wirings/forge-node/forge-node.types.js +0 -38
  338. package/dist/wirings/forge-node/index.d.ts +0 -1
  339. package/dist/wirings/forge-node/index.js +0 -1
  340. package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
  341. package/dist/wirings/workflow/wire-workflow.js +0 -53
  342. package/src/wirings/forge-node/forge-node.types.ts +0 -135
  343. package/src/wirings/forge-node/index.ts +0 -1
  344. package/src/wirings/workflow/wire-workflow.ts +0 -94
@@ -1,5 +1,6 @@
1
1
  import type { SerializeOptions } from 'cookie'
2
- import type { PikkuError } from '../../errors/error-handler.js'
2
+ import type { StandardSchemaV1 } from '@standard-schema/spec'
3
+ import { PikkuError } from '../../errors/error-handler.js'
3
4
  import type {
4
5
  CoreServices,
5
6
  CoreSingletonServices,
@@ -44,7 +45,7 @@ export type RunHTTPWiringOptions = Partial<{
44
45
 
45
46
  export type RunHTTPWiringParams = {
46
47
  singletonServices: CoreSingletonServices
47
- createWireServices: CreateWireServices<
48
+ createWireServices?: CreateWireServices<
48
49
  CoreSingletonServices,
49
50
  CoreServices<CoreSingletonServices>,
50
51
  CoreUserSession
@@ -53,7 +54,7 @@ export type RunHTTPWiringParams = {
53
54
 
54
55
  /**
55
56
  * Represents the HTTP methods supported for API HTTP wirings.
56
- t */
57
+ */
57
58
  export type HTTPMethod =
58
59
  | 'post'
59
60
  | 'get'
@@ -64,21 +65,41 @@ export type HTTPMethod =
64
65
  | 'options'
65
66
 
66
67
  /**
67
- * Represents an API HTTP wiring without a function, including metadata such as content type, route, and timeout settings.
68
+ * Header schema type for request header validation.
69
+ * Uses Standard Schema interface - works with Zod, Valibot, ArkType, Effect Schema, etc.
70
+ */
71
+ export type HTTPHeadersSchema = StandardSchemaV1<
72
+ Record<string, string | string[] | undefined>
73
+ >
74
+
75
+ /**
76
+ * Documentation config for OpenAPI generation
77
+ */
78
+ export type HTTPRouteDocsConfig = {
79
+ description?: string
80
+ response?: string
81
+ errors?: Array<typeof PikkuError>
82
+ tags?: string[]
83
+ }
84
+
85
+ /**
86
+ * Common HTTP route configuration shared between wireHTTP and wireHTTPRoutes
68
87
  */
69
- export type CoreHTTPFunction = {
88
+ export type HTTPRouteBaseConfig = {
70
89
  contentType?: 'xml' | 'json'
90
+ timeout?: number
91
+ tags?: string[]
92
+ headers?: HTTPHeadersSchema
93
+ docs?: HTTPRouteDocsConfig
94
+ }
95
+
96
+ /**
97
+ * Represents an API HTTP wiring without a function, including metadata such as content type, route, and timeout settings.
98
+ */
99
+ export type CoreHTTPFunction = HTTPRouteBaseConfig & {
71
100
  route: string
72
101
  eventChannel?: false
73
102
  returnsJSON?: false
74
- timeout?: number
75
- tags?: string[]
76
- docs?: Partial<{
77
- description: string
78
- response: string
79
- errors: Array<typeof PikkuError>
80
- tags: string[]
81
- }>
82
103
  }
83
104
  /**
84
105
  * Represents a http wire within Pikku, including a request and response.
@@ -121,12 +142,14 @@ export type CoreHTTPFunctionWiring<
121
142
  In,
122
143
  Out,
123
144
  any,
145
+ any,
124
146
  any
125
147
  > = CorePikkuFunction<In, Out>,
126
148
  PikkuFunctionSessionless extends CorePikkuFunctionSessionless<
127
149
  In,
128
150
  Out,
129
151
  any,
152
+ any,
130
153
  any
131
154
  > = CorePikkuFunctionSessionless<In, Out>,
132
155
  PikkuPermission extends CorePikkuPermission<
@@ -149,7 +172,6 @@ export type CoreHTTPFunctionWiring<
149
172
  >
150
173
  permissions?: CorePermissionGroup<PikkuPermission>
151
174
  auth?: true
152
- tags?: string[]
153
175
  middleware?: PikkuMiddleware[]
154
176
  sse?: undefined
155
177
  })
@@ -163,7 +185,6 @@ export type CoreHTTPFunctionWiring<
163
185
  >
164
186
  permissions?: undefined
165
187
  auth?: false
166
- tags?: string[]
167
188
  middleware?: PikkuMiddleware[]
168
189
  sse?: undefined
169
190
  })
@@ -177,9 +198,8 @@ export type CoreHTTPFunctionWiring<
177
198
  >
178
199
  permissions?: CorePermissionGroup<PikkuPermission>
179
200
  auth?: true
180
- sse?: boolean
181
- tags?: string[]
182
201
  middleware?: PikkuMiddleware[]
202
+ sse?: boolean
183
203
  })
184
204
  | (CoreHTTPFunction & {
185
205
  route: R
@@ -191,9 +211,8 @@ export type CoreHTTPFunctionWiring<
191
211
  >
192
212
  permissions?: undefined
193
213
  auth?: false
194
- sse?: boolean
195
- tags?: string[]
196
214
  middleware?: PikkuMiddleware[]
215
+ sse?: boolean
197
216
  })
198
217
  | (CoreHTTPFunction & {
199
218
  route: R
@@ -205,9 +224,8 @@ export type CoreHTTPFunctionWiring<
205
224
  >
206
225
  permissions?: CorePermissionGroup<PikkuPermission>
207
226
  auth?: true
208
- query?: Array<keyof In>
209
- tags?: string[]
210
227
  middleware?: PikkuMiddleware[]
228
+ query?: Array<keyof In>
211
229
  sse?: undefined
212
230
  })
213
231
  | (CoreHTTPFunction & {
@@ -220,24 +238,10 @@ export type CoreHTTPFunctionWiring<
220
238
  >
221
239
  permissions?: undefined
222
240
  auth?: false
223
- query?: Array<keyof In>
224
- tags?: string[]
225
241
  middleware?: PikkuMiddleware[]
242
+ query?: Array<keyof In>
226
243
  sse?: undefined
227
244
  })
228
- | {
229
- /** Route triggers a workflow matched by route/method from workflow wires.http */
230
- route: R
231
- method: HTTPMethod
232
- workflow: true
233
- func?: undefined
234
- permissions?: undefined
235
- auth?: undefined
236
- tags?: undefined
237
- middleware?: undefined
238
- returnsJSON?: undefined
239
- sse?: boolean
240
- }
241
245
 
242
246
  /**
243
247
  * Represents the input types for HTTP wiring metadata, including parameters, query, and body types.
@@ -257,8 +261,9 @@ export type HTTPWiringMeta = CommonWireMeta & {
257
261
  params?: string[]
258
262
  query?: string[]
259
263
  inputTypes?: HTTPFunctionMetaInputTypes
264
+ headersSchemaName?: string
260
265
  sse?: true
261
- workflow?: true
266
+ groupBasePath?: string
262
267
  }
263
268
  export type HTTPWiringsMeta = Record<HTTPMethod, Record<string, HTTPWiringMeta>>
264
269
 
@@ -305,3 +310,82 @@ export interface PikkuHTTPResponse<Out = unknown> {
305
310
  close?: () => void
306
311
  setMode?: (mode: 'stream') => void
307
312
  }
313
+
314
+ /**
315
+ * Single route configuration - supports all wireHTTP options
316
+ */
317
+ export type HTTPRouteConfig<
318
+ PikkuFunction extends
319
+ | CorePikkuFunction<any, any, any, any, any>
320
+ | CorePikkuFunctionSessionless<any, any, any, any, any> =
321
+ | CorePikkuFunction<any, any, any, any, any>
322
+ | CorePikkuFunctionSessionless<any, any, any, any, any>,
323
+ PikkuPermission extends CorePikkuPermission<
324
+ any,
325
+ any,
326
+ any
327
+ > = CorePikkuPermission<any>,
328
+ PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<
329
+ any,
330
+ any
331
+ >,
332
+ > = HTTPRouteBaseConfig & {
333
+ // Required
334
+ method: HTTPMethod
335
+ route: string
336
+ func: CorePikkuFunctionConfig<PikkuFunction, PikkuPermission, PikkuMiddleware>
337
+
338
+ // Auth & permissions
339
+ auth?: boolean
340
+ permissions?: CorePermissionGroup<PikkuPermission>
341
+
342
+ // Middleware
343
+ middleware?: PikkuMiddleware[]
344
+
345
+ // SSE support
346
+ sse?: boolean
347
+ }
348
+
349
+ /**
350
+ * Group-level configuration applied to all routes
351
+ */
352
+ export type HTTPRoutesGroupConfig<
353
+ PikkuPermission extends CorePikkuPermission<
354
+ any,
355
+ any,
356
+ any
357
+ > = CorePikkuPermission<any>,
358
+ PikkuMiddleware extends CorePikkuMiddleware<any, any> = CorePikkuMiddleware<
359
+ any,
360
+ any
361
+ >,
362
+ > = {
363
+ basePath?: string
364
+ tags?: string[]
365
+ auth?: boolean
366
+ middleware?: PikkuMiddleware[]
367
+ permissions?: CorePermissionGroup<PikkuPermission>
368
+ }
369
+
370
+ /**
371
+ * Nested route map - allows hierarchical organization
372
+ * Can contain individual routes, nested maps, or contracts with config
373
+ */
374
+ export type HTTPRouteMap = {
375
+ [key: string]: HTTPRouteConfig | HTTPRouteMap | HTTPRouteContract
376
+ }
377
+
378
+ /**
379
+ * A route contract with optional group config (returned by defineRoutes)
380
+ */
381
+ export type HTTPRouteContract<T extends HTTPRouteMap = HTTPRouteMap> =
382
+ HTTPRoutesGroupConfig & {
383
+ routes: T
384
+ }
385
+
386
+ /**
387
+ * Full configuration for wireHTTPRoutes
388
+ */
389
+ export type WireHTTPRoutesConfig = HTTPRoutesGroupConfig & {
390
+ routes: HTTPRouteMap | HTTPRouteConfig[]
391
+ }
@@ -1,6 +1,6 @@
1
- export * from './pikku-fetch-http-request.js'
2
- export * from './pikku-fetch-http-response.js'
3
- export * from './log-http-routes.js'
1
+ export { PikkuFetchHTTPRequest } from './pikku-fetch-http-request.js'
2
+ export { PikkuFetchHTTPResponse } from './pikku-fetch-http-response.js'
3
+ export { logRoutes } from './log-http-routes.js'
4
4
 
5
5
  export {
6
6
  fetch,
@@ -10,4 +10,16 @@ export {
10
10
  addHTTPPermission,
11
11
  } from './http-runner.js'
12
12
 
13
- export type * from './http.types.js'
13
+ export { wireHTTPRoutes, defineHTTPRoutes } from './http-routes.js'
14
+
15
+ export type {
16
+ AssertHTTPWiringParams,
17
+ CoreHTTPFunctionWiring,
18
+ HTTPMethod,
19
+ HTTPRouteBaseConfig,
20
+ HTTPWiringsMeta,
21
+ PikkuHTTPRequest,
22
+ PikkuHTTPResponse,
23
+ PikkuQuery,
24
+ RunHTTPWiringOptions,
25
+ } from './http.types.js'
@@ -1,3 +1,27 @@
1
- export * from './mcp.types.js'
2
- export * from './mcp-runner.js'
3
- export * from './mcp-endpoint-registry.js'
1
+ export { MCPEndpointRegistry } from './mcp-endpoint-registry.js'
2
+ export {
3
+ MCPError,
4
+ wireMCPResource,
5
+ wireMCPPrompt,
6
+ runMCPResource,
7
+ runMCPTool,
8
+ runMCPPrompt,
9
+ } from './mcp-runner.js'
10
+ export {
11
+ getMCPResourcesMeta,
12
+ getMCPToolsMeta,
13
+ getMCPPromptsMeta,
14
+ } from './mcp-runner.js'
15
+ export type {
16
+ AssertMCPResourceURIParams,
17
+ CoreMCPPrompt,
18
+ CoreMCPResource,
19
+ CoreMCPTool,
20
+ MCPPromptResponse,
21
+ MCPResourceMeta,
22
+ MCPResourceResponse,
23
+ MCPToolMeta,
24
+ MCPToolResponse,
25
+ MCPPromptMeta,
26
+ PikkuMCP,
27
+ } from './mcp.types.js'
@@ -147,7 +147,7 @@ describe('MCPEndpointRegistry', () => {
147
147
  uri: 'file://test.txt',
148
148
  title: 'Test Resource',
149
149
  description: 'Test description',
150
- pikkuFuncName: 'testResource',
150
+ pikkuFuncId: 'testResource',
151
151
  inputSchema: null,
152
152
  outputSchema: null,
153
153
  mimeType: 'text/plain',
@@ -164,7 +164,7 @@ describe('MCPEndpointRegistry', () => {
164
164
  name: 'test-tool',
165
165
  title: 'Test Tool',
166
166
  description: 'Test description',
167
- pikkuFuncName: 'testTool',
167
+ pikkuFuncId: 'testTool',
168
168
  inputSchema: null,
169
169
  outputSchema: null,
170
170
  },
@@ -179,7 +179,7 @@ describe('MCPEndpointRegistry', () => {
179
179
  'test-prompt': {
180
180
  name: 'test-prompt',
181
181
  description: 'Test Prompt',
182
- pikkuFuncName: 'testPrompt',
182
+ pikkuFuncId: 'testPrompt',
183
183
  inputSchema: null,
184
184
  outputSchema: null,
185
185
  arguments: [],
@@ -7,7 +7,6 @@ import {
7
7
  } from '../../types/core.types.js'
8
8
  import type {
9
9
  CoreMCPResource,
10
- CoreMCPTool,
11
10
  CoreMCPPrompt,
12
11
  JsonRpcRequest,
13
12
  JsonRpcResponse,
@@ -22,8 +21,15 @@ import { getErrorResponse } from '../../errors/error-handler.js'
22
21
  import { closeWireServices } from '../../utils.js'
23
22
  import { pikkuState } from '../../pikku-state.js'
24
23
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
25
- import { BadRequestError, NotFoundError } from '../../errors/errors.js'
26
- import { PikkuSessionService } from '../../services/user-session-service.js'
24
+ import {
25
+ BadRequestError,
26
+ NotFoundError,
27
+ PikkuMissingMetaError,
28
+ } from '../../errors/errors.js'
29
+ import {
30
+ PikkuSessionService,
31
+ createMiddlewareSessionWireProps,
32
+ } from '../../services/user-session-service.js'
27
33
 
28
34
  export class MCPError extends Error {
29
35
  constructor(public readonly error: JsonRpcErrorResponse) {
@@ -59,9 +65,11 @@ export const wireMCPResource = <
59
65
  const resourcesMeta = pikkuState(null, 'mcp', 'resourcesMeta')
60
66
  const mcpResourceMeta = resourcesMeta[mcpResource.uri]
61
67
  if (!mcpResourceMeta) {
62
- throw new Error(`MCP resource metadata not found for '${mcpResource.uri}'`)
68
+ throw new PikkuMissingMetaError(
69
+ `Missing generated metadata for MCP resource '${mcpResource.uri}'`
70
+ )
63
71
  }
64
- addFunction(mcpResourceMeta.pikkuFuncName, mcpResource.func as any)
72
+ addFunction(mcpResourceMeta.pikkuFuncId, mcpResource.func as any)
65
73
  const resources = pikkuState(null, 'mcp', 'resources')
66
74
  if (resources.has(mcpResource.uri)) {
67
75
  throw new Error(`MCP resource already exists: ${mcpResource.uri}`)
@@ -69,26 +77,6 @@ export const wireMCPResource = <
69
77
  resources.set(mcpResource.uri, mcpResource)
70
78
  }
71
79
 
72
- export const wireMCPTool = <
73
- PikkuFunctionConfig extends CorePikkuFunctionConfig<
74
- CorePikkuFunctionSessionless<any, any>
75
- > = CorePikkuFunctionConfig<CorePikkuFunctionSessionless<any, any>>,
76
- >(
77
- mcpTool: CoreMCPTool<PikkuFunctionConfig>
78
- ) => {
79
- const toolsMeta = pikkuState(null, 'mcp', 'toolsMeta')
80
- const mcpToolMeta = toolsMeta[mcpTool.name]
81
- if (!mcpToolMeta) {
82
- throw new Error(`MCP tool metadata not found for '${mcpTool.name}'`)
83
- }
84
- addFunction(mcpToolMeta.pikkuFuncName, mcpTool.func as any)
85
- const tools = pikkuState(null, 'mcp', 'tools')
86
- if (tools.has(mcpTool.name)) {
87
- throw new Error(`MCP tool already exists: ${mcpTool.name}`)
88
- }
89
- tools.set(mcpTool.name, mcpTool)
90
- }
91
-
92
80
  export const wireMCPPrompt = <
93
81
  PikkuFunctionConfig extends CorePikkuFunctionConfig<
94
82
  CorePikkuFunctionSessionless<any, any>
@@ -99,9 +87,11 @@ export const wireMCPPrompt = <
99
87
  const promptsMeta = pikkuState(null, 'mcp', 'promptsMeta')
100
88
  const mcpPromptMeta = promptsMeta[mcpPrompt.name]
101
89
  if (!mcpPromptMeta) {
102
- throw new Error(`MCP prompt metadata not found for '${mcpPrompt.name}'`)
90
+ throw new PikkuMissingMetaError(
91
+ `Missing generated metadata for MCP prompt '${mcpPrompt.name}'`
92
+ )
103
93
  }
104
- addFunction(mcpPromptMeta.pikkuFuncName, mcpPrompt.func as any)
94
+ addFunction(mcpPromptMeta.pikkuFuncId, mcpPrompt.func as any)
105
95
  const prompts = pikkuState(null, 'mcp', 'prompts')
106
96
  if (prompts.has(mcpPrompt.name)) {
107
97
  throw new Error(`MCP prompt already exists: ${mcpPrompt.name}`)
@@ -115,7 +105,7 @@ export async function runMCPResource(
115
105
  uri: string
116
106
  ) {
117
107
  let endpoint: CoreMCPResource | undefined
118
- let pikkuFuncName: string | undefined
108
+ let pikkuFuncId: string | undefined
119
109
  let extractedParams: Record<string, string> = {}
120
110
 
121
111
  const metas = pikkuState(null, 'mcp', 'resourcesMeta')
@@ -123,7 +113,7 @@ export async function runMCPResource(
123
113
 
124
114
  if (endpoints.has(uri)) {
125
115
  endpoint = endpoints.get(uri)
126
- pikkuFuncName = metas[uri]?.pikkuFuncName
116
+ pikkuFuncId = metas[uri]?.pikkuFuncId
127
117
  } else {
128
118
  for (const [uriTemplate, value] of endpoints.entries()) {
129
119
  // Extract parameter names from the template
@@ -139,7 +129,7 @@ export async function runMCPResource(
139
129
 
140
130
  if (match) {
141
131
  endpoint = value
142
- pikkuFuncName = metas[uriTemplate]?.pikkuFuncName
132
+ pikkuFuncId = metas[uriTemplate]?.pikkuFuncId
143
133
 
144
134
  // Extract parameter values and create params object
145
135
  for (let i = 0; i < paramNames.length; i++) {
@@ -158,7 +148,7 @@ export async function runMCPResource(
158
148
  'resource',
159
149
  uri,
160
150
  endpoint,
161
- pikkuFuncName,
151
+ pikkuFuncId,
162
152
  { ...params, mcp: { ...params.mcp, uri } } as RunMCPEndpointParams<
163
153
  keyof CoreMCPResource
164
154
  >
@@ -170,14 +160,13 @@ export async function runMCPTool(
170
160
  params: RunMCPEndpointParams,
171
161
  name: string
172
162
  ) {
173
- const endpoint = pikkuState(null, 'mcp', 'tools').get(name)
174
163
  const meta = pikkuState(null, 'mcp', 'toolsMeta')[name]
175
164
  return await runMCPPikkuFunc(
176
165
  request,
177
166
  'tool',
178
167
  name,
179
- endpoint,
180
- meta?.pikkuFuncName,
168
+ undefined,
169
+ meta?.pikkuFuncId,
181
170
  params
182
171
  )
183
172
  }
@@ -194,7 +183,7 @@ export async function runMCPPrompt(
194
183
  'prompt',
195
184
  name,
196
185
  endpoint,
197
- meta?.pikkuFuncName,
186
+ meta?.pikkuFuncId,
198
187
  params
199
188
  )
200
189
  }
@@ -206,27 +195,26 @@ async function runMCPPikkuFunc(
206
195
  request: JsonRpcRequest,
207
196
  type: 'resource' | 'tool' | 'prompt',
208
197
  name: string,
209
- mcp: CoreMCPResource | CoreMCPTool | CoreMCPPrompt | undefined,
210
- pikkuFuncName: string | undefined,
198
+ mcp: CoreMCPResource | CoreMCPPrompt | undefined,
199
+ pikkuFuncId: string | undefined,
211
200
  { singletonServices, createWireServices, mcp: mcpWire }: RunMCPEndpointParams
212
201
  ): Promise<JsonRpcResponse> {
213
202
  let wireServices: any
214
203
 
215
204
  try {
216
- // Validate JSON-RPC request structure
217
205
  if (request.jsonrpc !== '2.0') {
218
206
  throw new BadRequestError(
219
207
  'Invalid JSON-RPC version, only supoorted version is 2.0'
220
208
  )
221
209
  }
222
210
 
223
- if (!mcp) {
211
+ if (mcp === undefined && type !== 'tool') {
224
212
  throw new NotFoundError(
225
213
  `MCP '${type}' registration not found for '${name}'`
226
214
  )
227
215
  }
228
216
 
229
- if (!pikkuFuncName) {
217
+ if (!pikkuFuncId) {
230
218
  throw new NotFoundError(
231
219
  `MCP '${type}' PikkuFunction Mapping not found for '${name}'`
232
220
  )
@@ -234,12 +222,12 @@ async function runMCPPikkuFunc(
234
222
 
235
223
  singletonServices.logger.debug(`Running MCP ${type}: ${name}`)
236
224
 
225
+ const mcpSessionService = new PikkuSessionService()
237
226
  const wire: PikkuWire = {
238
227
  mcp: mcpWire,
239
- session: new PikkuSessionService(),
228
+ ...createMiddlewareSessionWireProps(mcpSessionService),
240
229
  }
241
230
 
242
- // Get metadata for the MCP endpoint to access pre-resolved middleware
243
231
  let meta: any
244
232
  if (type === 'resource') {
245
233
  meta = pikkuState(null, 'mcp', 'resourcesMeta')[name]
@@ -249,18 +237,23 @@ async function runMCPPikkuFunc(
249
237
  meta = pikkuState(null, 'mcp', 'promptsMeta')[name]
250
238
  }
251
239
 
252
- const result = await runPikkuFunc('mcp', `${type}:${name}`, pikkuFuncName, {
240
+ let result = await runPikkuFunc('mcp', `${type}:${name}`, pikkuFuncId, {
253
241
  singletonServices,
254
242
  createWireServices,
255
243
  data: () => request.params,
256
244
  inheritedMiddleware: meta?.middleware,
257
- wireMiddleware: mcp.middleware,
245
+ wireMiddleware: mcp?.middleware,
258
246
  inheritedPermissions: meta?.permissions,
259
- wirePermissions: mcp.permissions,
260
- tags: mcp.tags,
247
+ wirePermissions: mcp?.permissions,
248
+ tags: mcp?.tags,
261
249
  wire,
250
+ sessionService: mcpSessionService,
262
251
  })
263
252
 
253
+ if (type === 'tool' && meta?.outputSchema !== 'MCPToolResponse') {
254
+ result = [{ type: 'text', text: JSON.stringify(result) }]
255
+ }
256
+
264
257
  return {
265
258
  id: request.id,
266
259
  result,
@@ -297,10 +290,6 @@ async function runMCPPikkuFunc(
297
290
  }
298
291
  }
299
292
 
300
- export const getMCPTools = () => {
301
- return pikkuState(null, 'mcp', 'tools')
302
- }
303
-
304
293
  export const getMCPResources = () => {
305
294
  return pikkuState(null, 'mcp', 'resources')
306
295
  }
@@ -50,7 +50,7 @@ export type PikkuMCP<Tools extends string = any> = {
50
50
  export type MCPResourceMeta = Record<
51
51
  string,
52
52
  Omit<CoreMCPResource, 'func' | 'middleware' | 'permissions'> & {
53
- pikkuFuncName: string
53
+ pikkuFuncId: string
54
54
  inputSchema: string | null
55
55
  outputSchema: string | null
56
56
  middleware?: MiddlewareMetadata[] // Pre-resolved middleware chain (tag + explicit)
@@ -64,7 +64,7 @@ export type MCPResourceMeta = Record<
64
64
  export type MCPToolMeta = Record<
65
65
  string,
66
66
  Omit<CoreMCPTool, 'func' | 'middleware' | 'permissions'> & {
67
- pikkuFuncName: string
67
+ pikkuFuncId: string
68
68
  inputSchema: string | null
69
69
  outputSchema: string | null
70
70
  middleware?: MiddlewareMetadata[] // Pre-resolved middleware chain (tag + explicit)
@@ -78,7 +78,7 @@ export type MCPToolMeta = Record<
78
78
  export type MCPPromptMeta = Record<
79
79
  string,
80
80
  Omit<CoreMCPPrompt, 'func' | 'middleware' | 'permissions'> & {
81
- pikkuFuncName: string
81
+ pikkuFuncId: string
82
82
  inputSchema: string | null
83
83
  outputSchema: string | null
84
84
  arguments: Array<{
@@ -0,0 +1,2 @@
1
+ export type { CoreNodeConfig, NodeType } from './node.types.js'
2
+ export type { NodesMeta } from './node.types.js'
@@ -0,0 +1,23 @@
1
+ export type NodeType = 'trigger' | 'action' | 'end'
2
+
3
+ export type CoreNodeConfig = {
4
+ displayName: string
5
+ category: string
6
+ type: NodeType
7
+ errorOutput?: boolean
8
+ }
9
+
10
+ export type NodeMeta = {
11
+ name: string
12
+ displayName: string
13
+ category: string
14
+ type: NodeType
15
+ rpc: string
16
+ description?: string
17
+ errorOutput: boolean
18
+ inputSchemaName: string | null
19
+ outputSchemaName: string | null
20
+ tags?: string[]
21
+ }
22
+
23
+ export type NodesMeta = Record<string, NodeMeta>
@@ -0,0 +1,3 @@
1
+ export { OAuth2Client } from './oauth2-client.js'
2
+ export { wireOAuth2Credential } from './wire-oauth2-credential.js'
3
+ export type { OAuth2AppCredential, OAuth2Token } from './oauth2.types.js'