@pikku/core 0.11.2 → 0.12.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 (436) hide show
  1. package/CHANGELOG.md +57 -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 +14 -0
  5. package/dist/errors/errors.js +26 -0
  6. package/dist/errors/index.d.ts +1 -1
  7. package/dist/errors/index.js +1 -1
  8. package/dist/function/function-runner.d.ts +10 -4
  9. package/dist/function/function-runner.js +126 -45
  10. package/dist/function/functions.types.d.ts +32 -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.d.ts +2 -2
  15. package/dist/handle-error.js +3 -12
  16. package/dist/index.d.ts +30 -26
  17. package/dist/index.js +19 -29
  18. package/dist/internal.d.ts +3 -0
  19. package/dist/internal.js +2 -0
  20. package/dist/middleware/auth-apikey.d.ts +2 -2
  21. package/dist/middleware/auth-apikey.js +3 -3
  22. package/dist/middleware/auth-bearer.d.ts +3 -3
  23. package/dist/middleware/auth-bearer.js +4 -7
  24. package/dist/middleware/auth-cookie.d.ts +4 -4
  25. package/dist/middleware/auth-cookie.js +7 -9
  26. package/dist/middleware/cors.d.ts +46 -0
  27. package/dist/middleware/cors.js +81 -0
  28. package/dist/middleware/index.d.ts +5 -3
  29. package/dist/middleware/index.js +5 -3
  30. package/dist/middleware/remote-auth.d.ts +5 -0
  31. package/dist/middleware/remote-auth.js +55 -0
  32. package/dist/middleware/timeout.d.ts +2 -2
  33. package/dist/middleware-runner.d.ts +1 -1
  34. package/dist/middleware-runner.js +8 -10
  35. package/dist/permissions.d.ts +2 -2
  36. package/dist/permissions.js +11 -15
  37. package/dist/pikku-state.d.ts +10 -8
  38. package/dist/pikku-state.js +48 -25
  39. package/dist/schema.d.ts +4 -4
  40. package/dist/schema.js +20 -15
  41. package/dist/services/ai-agent-runner-service.d.ts +43 -0
  42. package/dist/services/ai-agent-runner-service.js +1 -0
  43. package/dist/services/ai-run-state-service.d.ts +13 -0
  44. package/dist/services/ai-run-state-service.js +1 -0
  45. package/dist/services/ai-storage-service.d.ts +18 -0
  46. package/dist/services/ai-storage-service.js +1 -0
  47. package/dist/services/content-service.d.ts +6 -0
  48. package/dist/services/deployment-service.d.ts +19 -0
  49. package/dist/services/deployment-service.js +1 -0
  50. package/dist/services/gopass-secrets.d.ts +47 -0
  51. package/dist/services/gopass-secrets.js +97 -0
  52. package/dist/services/in-memory-ai-run-state-service.d.ts +15 -0
  53. package/dist/services/in-memory-ai-run-state-service.js +44 -0
  54. package/dist/services/in-memory-trigger-service.d.ts +22 -0
  55. package/dist/services/in-memory-trigger-service.js +48 -0
  56. package/dist/services/in-memory-workflow-service.d.ts +59 -0
  57. package/dist/services/in-memory-workflow-service.js +287 -0
  58. package/dist/services/index.d.ts +26 -11
  59. package/dist/services/index.js +11 -13
  60. package/dist/services/local-content.d.ts +2 -1
  61. package/dist/services/local-content.js +6 -1
  62. package/dist/services/local-secrets.d.ts +25 -2
  63. package/dist/services/local-secrets.js +45 -0
  64. package/dist/services/local-variables.d.ts +6 -1
  65. package/dist/services/local-variables.js +18 -0
  66. package/dist/services/logger-console.d.ts +2 -1
  67. package/dist/services/scheduler-service.d.ts +9 -1
  68. package/dist/services/scheduler-service.js +8 -0
  69. package/dist/services/schema-service.d.ts +6 -0
  70. package/dist/services/scoped-secret-service.d.ts +16 -0
  71. package/dist/services/scoped-secret-service.js +35 -0
  72. package/dist/services/secret-service.d.ts +25 -4
  73. package/dist/services/trigger-service.d.ts +16 -0
  74. package/dist/services/trigger-service.js +1 -0
  75. package/dist/services/typed-secret-service.d.ts +30 -0
  76. package/dist/services/typed-secret-service.js +40 -0
  77. package/dist/services/typed-variables-service.d.ts +27 -0
  78. package/dist/services/typed-variables-service.js +46 -0
  79. package/dist/services/user-session-service.d.ts +15 -2
  80. package/dist/services/user-session-service.js +17 -0
  81. package/dist/services/variables-service.d.ts +5 -0
  82. package/dist/services/workflow-service.d.ts +9 -5
  83. package/dist/types/core.types.d.ts +67 -25
  84. package/dist/types/core.types.js +8 -1
  85. package/dist/types/state.types.d.ts +53 -59
  86. package/dist/utils.d.ts +7 -6
  87. package/dist/utils.js +27 -12
  88. package/dist/version.d.ts +6 -0
  89. package/dist/version.js +19 -0
  90. package/dist/wirings/ai-agent/ai-agent-assistant-ui.d.ts +5 -0
  91. package/dist/wirings/ai-agent/ai-agent-assistant-ui.js +146 -0
  92. package/dist/wirings/ai-agent/ai-agent-helpers.d.ts +28 -0
  93. package/dist/wirings/ai-agent/ai-agent-helpers.js +40 -0
  94. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
  95. package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
  96. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
  97. package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
  98. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +59 -0
  99. package/dist/wirings/ai-agent/ai-agent-prepare.js +348 -0
  100. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
  101. package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
  102. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
  103. package/dist/wirings/ai-agent/ai-agent-runner.js +195 -0
  104. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +12 -0
  105. package/dist/wirings/ai-agent/ai-agent-stream.js +662 -0
  106. package/dist/wirings/ai-agent/ai-agent.types.d.ts +313 -0
  107. package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
  108. package/dist/wirings/ai-agent/index.d.ts +7 -0
  109. package/dist/wirings/ai-agent/index.js +6 -0
  110. package/dist/wirings/channel/channel-common.d.ts +8 -5
  111. package/dist/wirings/channel/channel-common.js +15 -8
  112. package/dist/wirings/channel/channel-handler.d.ts +3 -3
  113. package/dist/wirings/channel/channel-handler.js +15 -6
  114. package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
  115. package/dist/wirings/channel/channel-middleware-runner.js +73 -0
  116. package/dist/wirings/channel/channel-runner.d.ts +5 -5
  117. package/dist/wirings/channel/channel-runner.js +10 -9
  118. package/dist/wirings/channel/channel-store.d.ts +1 -1
  119. package/dist/wirings/channel/channel.types.d.ts +9 -7
  120. package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
  121. package/dist/wirings/channel/define-channel-routes.js +23 -0
  122. package/dist/wirings/channel/index.d.ts +10 -8
  123. package/dist/wirings/channel/index.js +7 -8
  124. package/dist/wirings/channel/local/index.d.ts +3 -3
  125. package/dist/wirings/channel/local/index.js +3 -3
  126. package/dist/wirings/channel/local/local-channel-runner.d.ts +7 -2
  127. package/dist/wirings/channel/local/local-channel-runner.js +22 -9
  128. package/dist/wirings/channel/local/local-eventhub-service.d.ts +2 -2
  129. package/dist/wirings/channel/log-channels.d.ts +1 -1
  130. package/dist/wirings/channel/pikku-abstract-channel-handler.d.ts +1 -1
  131. package/dist/wirings/channel/serverless/index.d.ts +1 -1
  132. package/dist/wirings/channel/serverless/index.js +1 -1
  133. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +4 -4
  134. package/dist/wirings/channel/serverless/serverless-channel-runner.js +40 -23
  135. package/dist/wirings/cli/channel/cli-channel-runner.d.ts +1 -1
  136. package/dist/wirings/cli/channel/index.d.ts +1 -1
  137. package/dist/wirings/cli/channel/index.js +1 -1
  138. package/dist/wirings/cli/cli-runner.d.ts +3 -3
  139. package/dist/wirings/cli/cli-runner.js +12 -8
  140. package/dist/wirings/cli/cli.types.d.ts +9 -9
  141. package/dist/wirings/cli/command-parser.d.ts +1 -1
  142. package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
  143. package/dist/wirings/cli/define-cli-commands.js +20 -0
  144. package/dist/wirings/cli/index.d.ts +2 -3
  145. package/dist/wirings/cli/index.js +1 -3
  146. package/dist/wirings/http/http-routes.d.ts +69 -0
  147. package/dist/wirings/http/http-routes.js +139 -0
  148. package/dist/wirings/http/http-runner.d.ts +9 -9
  149. package/dist/wirings/http/http-runner.js +79 -34
  150. package/dist/wirings/http/http.types.d.ts +77 -41
  151. package/dist/wirings/http/index.d.ts +5 -4
  152. package/dist/wirings/http/index.js +4 -3
  153. package/dist/wirings/http/log-http-routes.d.ts +1 -1
  154. package/dist/wirings/http/pikku-fetch-http-request.d.ts +1 -1
  155. package/dist/wirings/http/pikku-fetch-http-response.d.ts +2 -2
  156. package/dist/wirings/http/pikku-fetch-http-response.js +6 -1
  157. package/dist/wirings/http/routers/http-router.d.ts +1 -1
  158. package/dist/wirings/http/routers/path-to-regex.d.ts +2 -2
  159. package/dist/wirings/mcp/index.d.ts +4 -3
  160. package/dist/wirings/mcp/index.js +3 -3
  161. package/dist/wirings/mcp/mcp-endpoint-registry.d.ts +1 -1
  162. package/dist/wirings/mcp/mcp-runner.d.ts +1 -6
  163. package/dist/wirings/mcp/mcp-runner.js +28 -40
  164. package/dist/wirings/mcp/mcp.types.d.ts +5 -5
  165. package/dist/wirings/node/index.d.ts +2 -0
  166. package/dist/wirings/node/index.js +1 -0
  167. package/dist/wirings/node/node.types.d.ts +20 -0
  168. package/dist/wirings/node/node.types.js +1 -0
  169. package/dist/wirings/oauth2/index.d.ts +3 -0
  170. package/dist/wirings/oauth2/index.js +2 -0
  171. package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
  172. package/dist/wirings/oauth2/oauth2-client.js +267 -0
  173. package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
  174. package/dist/wirings/oauth2/oauth2.types.js +4 -0
  175. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
  176. package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
  177. package/dist/wirings/queue/index.d.ts +1 -1
  178. package/dist/wirings/queue/queue-runner.d.ts +1 -5
  179. package/dist/wirings/queue/queue-runner.js +11 -8
  180. package/dist/wirings/queue/queue.types.d.ts +5 -5
  181. package/dist/wirings/queue/register-queue-helper.d.ts +2 -2
  182. package/dist/wirings/queue/register-queue-helper.js +1 -1
  183. package/dist/wirings/queue/validate-worker-config.d.ts +1 -1
  184. package/dist/wirings/rpc/index.d.ts +3 -1
  185. package/dist/wirings/rpc/index.js +2 -1
  186. package/dist/wirings/rpc/rpc-runner.d.ts +58 -8
  187. package/dist/wirings/rpc/rpc-runner.js +177 -31
  188. package/dist/wirings/rpc/rpc-types.d.ts +20 -4
  189. package/dist/wirings/rpc/wire-addon.d.ts +10 -0
  190. package/dist/wirings/rpc/wire-addon.js +9 -0
  191. package/dist/wirings/scheduler/index.d.ts +2 -2
  192. package/dist/wirings/scheduler/index.js +1 -2
  193. package/dist/wirings/scheduler/log-schedulers.d.ts +1 -1
  194. package/dist/wirings/scheduler/scheduler-runner.d.ts +3 -5
  195. package/dist/wirings/scheduler/scheduler-runner.js +11 -14
  196. package/dist/wirings/scheduler/scheduler.types.d.ts +2 -2
  197. package/dist/wirings/secret/index.d.ts +3 -0
  198. package/dist/wirings/secret/index.js +2 -0
  199. package/dist/wirings/secret/secret.types.d.ts +27 -0
  200. package/dist/wirings/secret/secret.types.js +1 -0
  201. package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
  202. package/dist/wirings/secret/validate-secret-definitions.js +55 -0
  203. package/dist/wirings/trigger/index.d.ts +3 -2
  204. package/dist/wirings/trigger/index.js +2 -2
  205. package/dist/wirings/trigger/pikku-trigger-service.d.ts +22 -0
  206. package/dist/wirings/trigger/pikku-trigger-service.js +70 -0
  207. package/dist/wirings/trigger/trigger-runner.d.ts +18 -9
  208. package/dist/wirings/trigger/trigger-runner.js +48 -19
  209. package/dist/wirings/trigger/trigger.types.d.ts +99 -11
  210. package/dist/wirings/trigger/trigger.types.js +40 -1
  211. package/dist/wirings/variable/index.d.ts +3 -0
  212. package/dist/wirings/variable/index.js +2 -0
  213. package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
  214. package/dist/wirings/variable/validate-variable-definitions.js +45 -0
  215. package/dist/wirings/variable/variable.types.d.ts +18 -0
  216. package/dist/wirings/variable/variable.types.js +1 -0
  217. package/dist/wirings/workflow/dsl/index.d.ts +1 -1
  218. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
  219. package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
  220. package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
  221. package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
  222. package/dist/wirings/workflow/graph/graph-runner.js +384 -296
  223. package/dist/wirings/workflow/graph/index.d.ts +4 -3
  224. package/dist/wirings/workflow/graph/index.js +3 -3
  225. package/dist/wirings/workflow/graph/template.d.ts +15 -0
  226. package/dist/wirings/workflow/graph/template.js +27 -0
  227. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
  228. package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
  229. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
  230. package/dist/wirings/workflow/index.d.ts +6 -6
  231. package/dist/wirings/workflow/index.js +6 -4
  232. package/dist/wirings/workflow/pikku-workflow-service.d.ts +29 -19
  233. package/dist/wirings/workflow/pikku-workflow-service.js +217 -82
  234. package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
  235. package/dist/wirings/workflow/workflow-helpers.js +38 -0
  236. package/dist/wirings/workflow/workflow.types.d.ts +42 -95
  237. package/package.json +14 -15
  238. package/run-tests.sh +4 -1
  239. package/src/crypto-utils.test.ts +116 -0
  240. package/src/crypto-utils.ts +99 -0
  241. package/src/errors/error.test.ts +143 -2
  242. package/src/errors/errors.ts +27 -0
  243. package/src/errors/index.ts +1 -1
  244. package/src/factory-functions.test.ts +42 -2
  245. package/src/function/function-runner.test.ts +6 -13
  246. package/src/function/function-runner.ts +161 -53
  247. package/src/function/functions.types.ts +63 -132
  248. package/src/function/index.ts +5 -2
  249. package/src/handle-error.test.ts +361 -0
  250. package/src/handle-error.ts +6 -14
  251. package/src/index.ts +97 -30
  252. package/src/internal.ts +6 -0
  253. package/src/middleware/auth-apikey.test.ts +16 -13
  254. package/src/middleware/auth-apikey.ts +3 -3
  255. package/src/middleware/auth-bearer.test.ts +18 -15
  256. package/src/middleware/auth-bearer.ts +27 -32
  257. package/src/middleware/auth-cookie.test.ts +17 -14
  258. package/src/middleware/auth-cookie.ts +9 -13
  259. package/src/middleware/cors.test.ts +424 -0
  260. package/src/middleware/cors.ts +104 -0
  261. package/src/middleware/index.ts +5 -3
  262. package/src/middleware/remote-auth.test.ts +488 -0
  263. package/src/middleware/remote-auth.ts +68 -0
  264. package/src/middleware-runner.test.ts +123 -1
  265. package/src/middleware-runner.ts +13 -13
  266. package/src/permissions.test.ts +83 -9
  267. package/src/permissions.ts +17 -19
  268. package/src/pikku-state.test.ts +224 -0
  269. package/src/pikku-state.ts +59 -35
  270. package/src/run-tests-script.test.ts +49 -0
  271. package/src/schema.test.ts +198 -6
  272. package/src/schema.ts +28 -21
  273. package/src/services/ai-agent-runner-service.ts +41 -0
  274. package/src/services/ai-run-state-service.ts +20 -0
  275. package/src/services/ai-storage-service.ts +39 -0
  276. package/src/services/content-service.ts +7 -0
  277. package/src/services/deployment-service.ts +22 -0
  278. package/src/services/gopass-secrets.ts +98 -0
  279. package/src/services/in-memory-ai-run-state-service.ts +73 -0
  280. package/src/services/in-memory-trigger-service.ts +64 -0
  281. package/src/services/in-memory-workflow-service.test.ts +351 -0
  282. package/src/services/in-memory-workflow-service.ts +395 -0
  283. package/src/services/index.ts +50 -14
  284. package/src/services/local-content.ts +9 -3
  285. package/src/services/local-secrets.test.ts +80 -0
  286. package/src/services/local-secrets.ts +53 -2
  287. package/src/services/local-variables.test.ts +61 -0
  288. package/src/services/local-variables.ts +23 -1
  289. package/src/services/logger-console.test.ts +118 -0
  290. package/src/services/logger-console.ts +2 -1
  291. package/src/services/scheduler-service.ts +11 -1
  292. package/src/services/schema-service.ts +7 -0
  293. package/src/services/scoped-secret-service.test.ts +74 -0
  294. package/src/services/scoped-secret-service.ts +41 -0
  295. package/src/services/secret-service.ts +25 -4
  296. package/src/services/trigger-service.ts +17 -0
  297. package/src/services/typed-secret-service.test.ts +93 -0
  298. package/src/services/typed-secret-service.ts +70 -0
  299. package/src/services/typed-variables-service.test.ts +73 -0
  300. package/src/services/typed-variables-service.ts +81 -0
  301. package/src/services/user-session-service.test.ts +113 -0
  302. package/src/services/user-session-service.ts +25 -2
  303. package/src/services/variables-service.ts +5 -0
  304. package/src/services/workflow-service.ts +23 -13
  305. package/src/time-utils.test.ts +1 -1
  306. package/src/types/core.types.ts +95 -24
  307. package/src/types/state.types.ts +56 -73
  308. package/src/utils.test.ts +350 -0
  309. package/src/utils.ts +33 -18
  310. package/src/version.test.ts +80 -0
  311. package/src/version.ts +25 -0
  312. package/src/wirings/ai-agent/ai-agent-assistant-ui.test.ts +363 -0
  313. package/src/wirings/ai-agent/ai-agent-assistant-ui.ts +214 -0
  314. package/src/wirings/ai-agent/ai-agent-helpers.test.ts +152 -0
  315. package/src/wirings/ai-agent/ai-agent-helpers.ts +76 -0
  316. package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
  317. package/src/wirings/ai-agent/ai-agent-model-config.test.ts +115 -0
  318. package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
  319. package/src/wirings/ai-agent/ai-agent-prepare.ts +504 -0
  320. package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
  321. package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
  322. package/src/wirings/ai-agent/ai-agent-runner.test.ts +317 -0
  323. package/src/wirings/ai-agent/ai-agent-runner.ts +251 -0
  324. package/src/wirings/ai-agent/ai-agent-stream.test.ts +652 -0
  325. package/src/wirings/ai-agent/ai-agent-stream.ts +1049 -0
  326. package/src/wirings/ai-agent/ai-agent.types.ts +328 -0
  327. package/src/wirings/ai-agent/index.ts +39 -0
  328. package/src/wirings/channel/channel-common.ts +33 -20
  329. package/src/wirings/channel/channel-handler.ts +26 -9
  330. package/src/wirings/channel/channel-middleware-runner.ts +119 -0
  331. package/src/wirings/channel/channel-runner.ts +15 -16
  332. package/src/wirings/channel/channel-store.ts +1 -1
  333. package/src/wirings/channel/channel.types.ts +21 -9
  334. package/src/wirings/channel/define-channel-routes.ts +25 -0
  335. package/src/wirings/channel/index.ts +23 -8
  336. package/src/wirings/channel/local/index.ts +3 -3
  337. package/src/wirings/channel/local/local-channel-runner.test.ts +57 -7
  338. package/src/wirings/channel/local/local-channel-runner.ts +40 -19
  339. package/src/wirings/channel/local/local-eventhub-service.test.ts +2 -2
  340. package/src/wirings/channel/local/local-eventhub-service.ts +2 -2
  341. package/src/wirings/channel/log-channels.ts +1 -1
  342. package/src/wirings/channel/pikku-abstract-channel-handler.ts +1 -1
  343. package/src/wirings/channel/serverless/index.ts +5 -1
  344. package/src/wirings/channel/serverless/serverless-channel-runner.ts +57 -36
  345. package/src/wirings/cli/channel/cli-channel-runner.ts +1 -1
  346. package/src/wirings/cli/channel/index.ts +1 -1
  347. package/src/wirings/cli/cli-runner.test.ts +10 -10
  348. package/src/wirings/cli/cli-runner.ts +28 -14
  349. package/src/wirings/cli/cli.types.ts +14 -14
  350. package/src/wirings/cli/command-parser.test.ts +9 -9
  351. package/src/wirings/cli/command-parser.ts +1 -1
  352. package/src/wirings/cli/define-cli-commands.ts +24 -0
  353. package/src/wirings/cli/index.ts +10 -4
  354. package/src/wirings/http/http-routes.test.ts +322 -0
  355. package/src/wirings/http/http-routes.ts +198 -0
  356. package/src/wirings/http/http-runner.test.ts +12 -20
  357. package/src/wirings/http/http-runner.ts +101 -51
  358. package/src/wirings/http/http.types.ts +119 -48
  359. package/src/wirings/http/index.ts +16 -4
  360. package/src/wirings/http/log-http-routes.ts +1 -1
  361. package/src/wirings/http/pikku-fetch-http-request.ts +1 -1
  362. package/src/wirings/http/pikku-fetch-http-response.ts +12 -5
  363. package/src/wirings/http/routers/http-router.ts +1 -1
  364. package/src/wirings/http/routers/path-to-regex.test.ts +1 -1
  365. package/src/wirings/http/routers/path-to-regex.ts +4 -3
  366. package/src/wirings/mcp/index.ts +27 -3
  367. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
  368. package/src/wirings/mcp/mcp-endpoint-registry.ts +5 -1
  369. package/src/wirings/mcp/mcp-runner.ts +48 -65
  370. package/src/wirings/mcp/mcp.types.ts +5 -5
  371. package/src/wirings/node/index.ts +2 -0
  372. package/src/wirings/node/node.types.ts +23 -0
  373. package/src/wirings/oauth2/index.ts +3 -0
  374. package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
  375. package/src/wirings/oauth2/oauth2-client.ts +335 -0
  376. package/src/wirings/oauth2/oauth2.types.ts +69 -0
  377. package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
  378. package/src/wirings/queue/index.ts +13 -2
  379. package/src/wirings/queue/queue-runner.test.ts +142 -73
  380. package/src/wirings/queue/queue-runner.ts +18 -14
  381. package/src/wirings/queue/queue.types.ts +5 -5
  382. package/src/wirings/queue/register-queue-helper.ts +3 -5
  383. package/src/wirings/queue/validate-worker-config.test.ts +108 -0
  384. package/src/wirings/queue/validate-worker-config.ts +4 -1
  385. package/src/wirings/rpc/index.ts +3 -1
  386. package/src/wirings/rpc/rpc-runner.ts +254 -41
  387. package/src/wirings/rpc/rpc-types.ts +28 -4
  388. package/src/wirings/rpc/wire-addon.ts +20 -0
  389. package/src/wirings/scheduler/index.ts +6 -4
  390. package/src/wirings/scheduler/log-schedulers.ts +1 -1
  391. package/src/wirings/scheduler/scheduler-runner.test.ts +78 -45
  392. package/src/wirings/scheduler/scheduler-runner.ts +20 -27
  393. package/src/wirings/scheduler/scheduler.types.ts +2 -2
  394. package/src/wirings/secret/index.ts +9 -0
  395. package/src/wirings/secret/secret.types.ts +32 -0
  396. package/src/wirings/secret/validate-secret-definitions.test.ts +140 -0
  397. package/src/wirings/secret/validate-secret-definitions.ts +82 -0
  398. package/src/wirings/trigger/index.ts +10 -2
  399. package/src/wirings/trigger/pikku-trigger-service.ts +112 -0
  400. package/src/wirings/trigger/trigger-runner.test.ts +79 -0
  401. package/src/wirings/trigger/trigger-runner.ts +80 -41
  402. package/src/wirings/trigger/trigger.types.ts +144 -22
  403. package/src/wirings/variable/index.ts +8 -0
  404. package/src/wirings/variable/validate-variable-definitions.test.ts +91 -0
  405. package/src/wirings/variable/validate-variable-definitions.ts +69 -0
  406. package/src/wirings/variable/variable.types.ts +22 -0
  407. package/src/wirings/workflow/dsl/index.ts +1 -0
  408. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
  409. package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
  410. package/src/wirings/workflow/graph/graph-node.ts +1 -6
  411. package/src/wirings/workflow/graph/graph-runner.test.ts +487 -0
  412. package/src/wirings/workflow/graph/graph-runner.ts +496 -374
  413. package/src/wirings/workflow/graph/index.ts +14 -3
  414. package/src/wirings/workflow/graph/template.test.ts +49 -0
  415. package/src/wirings/workflow/graph/template.ts +42 -0
  416. package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
  417. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
  418. package/src/wirings/workflow/index.ts +21 -10
  419. package/src/wirings/workflow/pikku-workflow-service.test.ts +200 -0
  420. package/src/wirings/workflow/pikku-workflow-service.ts +308 -105
  421. package/src/wirings/workflow/workflow-helpers.test.ts +129 -0
  422. package/src/wirings/workflow/workflow-helpers.ts +79 -0
  423. package/src/wirings/workflow/workflow.types.ts +47 -92
  424. package/tsconfig.tsbuildinfo +1 -1
  425. package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
  426. package/dist/wirings/forge-node/forge-node.types.js +0 -38
  427. package/dist/wirings/forge-node/index.d.ts +0 -1
  428. package/dist/wirings/forge-node/index.js +0 -1
  429. package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
  430. package/dist/wirings/workflow/wire-workflow.js +0 -53
  431. package/dist/wirings/workflow/workflow-utils.d.ts +0 -23
  432. package/dist/wirings/workflow/workflow-utils.js +0 -66
  433. package/src/wirings/forge-node/forge-node.types.ts +0 -135
  434. package/src/wirings/forge-node/index.ts +0 -1
  435. package/src/wirings/workflow/wire-workflow.ts +0 -94
  436. package/src/wirings/workflow/workflow-utils.ts +0 -120
@@ -1,12 +1,12 @@
1
- import { NotFoundError } from '../../errors/errors.js'
1
+ import { NotFoundError, PikkuMissingMetaError } from '../../errors/errors.js'
2
2
  import { addFunction } from '../../function/function-runner.js'
3
- import { CorePikkuPermission } from '../../function/functions.types.js'
4
- import { pikkuState } from '../../pikku-state.js'
3
+ import type { CorePikkuPermission } from '../../function/functions.types.js'
4
+ import { pikkuState, getSingletonServices } from '../../pikku-state.js'
5
5
  import { coerceTopLevelDataFromSchema, validateSchema } from '../../schema.js'
6
- import { SessionService } from '../../services/user-session-service.js'
7
- import { CorePikkuMiddleware } from '../../types/core.types.js'
6
+ import type { SessionService } from '../../services/user-session-service.js'
7
+ import type { CorePikkuMiddleware } from '../../types/core.types.js'
8
8
  import { httpRouter } from '../http/routers/http-router.js'
9
- import {
9
+ import type {
10
10
  ChannelMeta,
11
11
  CoreChannel,
12
12
  RunChannelOptions,
@@ -36,28 +36,27 @@ export const wireChannel = <
36
36
  const channelsMeta = pikkuState(null, 'channel', 'meta')
37
37
  const channelMeta = channelsMeta[channel.name]
38
38
  if (!channelMeta) {
39
- throw new Error(`Channel metadata not found for channel: ${channel.name}`)
39
+ throw new PikkuMissingMetaError(
40
+ `Missing generated metadata for channel '${channel.name}'`
41
+ )
40
42
  }
41
43
 
42
44
  pikkuState(null, 'channel', 'channels').set(channel.name, channel as any)
43
45
 
44
46
  // Register onConnect function if provided
45
47
  if (channel.onConnect && channelMeta.connect) {
46
- addFunction(channelMeta.connect.pikkuFuncName, channel.onConnect as any)
48
+ addFunction(channelMeta.connect.pikkuFuncId, channel.onConnect as any)
47
49
  }
48
50
 
49
51
  // Register onDisconnect function if provided
50
52
  if (channel.onDisconnect && channelMeta.disconnect) {
51
- addFunction(
52
- channelMeta.disconnect.pikkuFuncName,
53
- channel.onDisconnect as any
54
- )
53
+ addFunction(channelMeta.disconnect.pikkuFuncId, channel.onDisconnect as any)
55
54
  }
56
55
 
57
56
  // Register onMessage function if provided
58
- if (channel.onMessage && channelMeta.message?.pikkuFuncName) {
57
+ if (channel.onMessage && channelMeta.message?.pikkuFuncId) {
59
58
  addFunction(
60
- channelMeta.message.pikkuFuncName,
59
+ channelMeta.message.pikkuFuncId,
61
60
  (channel.onMessage as any).func instanceof Function
62
61
  ? channel.onMessage
63
62
  : (channel.onMessage as any).func
@@ -79,7 +78,7 @@ export const wireChannel = <
79
78
  // Register the function using the pikku name from metadata
80
79
  // It could be a FuncConfig or a wiring override with a funcConfig
81
80
  addFunction(
82
- wiringMeta.pikkuFuncName,
81
+ wiringMeta.pikkuFuncId,
83
82
  (handler as any).func instanceof Function
84
83
  ? handler
85
84
  : (handler as any).func
@@ -123,7 +122,6 @@ const getMatchingChannelConfig = (path: string) => {
123
122
 
124
123
  export const openChannel = async ({
125
124
  route,
126
- singletonServices,
127
125
  coerceDataFromSchema = true,
128
126
  request,
129
127
  }: Pick<CoreChannel<unknown, string>, 'route'> &
@@ -134,6 +132,7 @@ export const openChannel = async ({
134
132
  channelConfig: CoreChannel<unknown, any>
135
133
  meta: ChannelMeta
136
134
  }> => {
135
+ const singletonServices = getSingletonServices()
137
136
  const matchingChannel = getMatchingChannelConfig(route)
138
137
  if (!matchingChannel) {
139
138
  singletonServices.logger.info(`Channel not found: ${route}`)
@@ -1,4 +1,4 @@
1
- import { CoreUserSession } from '../../types/core.types.js'
1
+ import type { CoreUserSession } from '../../types/core.types.js'
2
2
 
3
3
  export type Channel<ChannelType = unknown, OpeningData = unknown> = {
4
4
  channelId: string
@@ -1,17 +1,27 @@
1
- import { PikkuError } from '../../errors/error-handler.js'
2
- import {
1
+ import type { PikkuError } from '../../errors/error-handler.js'
2
+ import type {
3
3
  HTTPFunctionMetaInputTypes,
4
4
  PikkuHTTPRequest,
5
5
  PikkuHTTPResponse,
6
6
  } from '../http/http.types.js'
7
- import {
8
- CoreSingletonServices,
9
- CreateWireServices,
7
+ import type {
10
8
  CorePikkuMiddleware,
11
9
  MiddlewareMetadata,
12
10
  PermissionMetadata,
13
11
  } from '../../types/core.types.js'
14
- import {
12
+
13
+ export type CorePikkuChannelMiddleware<Services = any, Event = unknown> = (
14
+ services: Services,
15
+ event: Event,
16
+ next: (event: Event | Event[] | null) => Promise<void> | void
17
+ ) => Promise<void> | void
18
+
19
+ export type CorePikkuChannelMiddlewareFactory<
20
+ In = any,
21
+ Services = any,
22
+ Event = unknown,
23
+ > = (input: In) => CorePikkuChannelMiddleware<Services, Event>
24
+ import type {
15
25
  CorePermissionGroup,
16
26
  CorePikkuFunction,
17
27
  CorePikkuFunctionConfig,
@@ -29,14 +39,12 @@ export type RunChannelOptions = Partial<{
29
39
 
30
40
  export type RunChannelParams<ChannelData> = {
31
41
  channelId: string
32
- singletonServices: CoreSingletonServices
33
42
  request?: PikkuHTTPRequest<ChannelData>
34
43
  response?: PikkuHTTPResponse
35
- createWireServices?: CreateWireServices
36
44
  }
37
45
 
38
46
  export interface ChannelMessageMeta {
39
- pikkuFuncName: string
47
+ pikkuFuncId: string
40
48
  summary?: string
41
49
  description?: string
42
50
  errors?: string[]
@@ -62,6 +70,7 @@ export interface ChannelMeta {
62
70
  tags?: string[]
63
71
  middleware?: MiddlewareMetadata[] // Pre-resolved middleware chain (tag + explicit)
64
72
  permissions?: PermissionMetadata[] // Pre-resolved permission chain (tag + explicit)
73
+ channelMiddleware?: MiddlewareMetadata[]
65
74
  }
66
75
 
67
76
  export type ChannelsMeta = Record<string, ChannelMeta>
@@ -118,6 +127,9 @@ export type CoreChannel<
118
127
  >
119
128
  >
120
129
  middleware?: PikkuMiddleware[]
130
+ channelMiddleware?: Array<
131
+ CorePikkuChannelMiddleware | CorePikkuChannelMiddlewareFactory
132
+ >
121
133
  permissions?: CorePermissionGroup<PikkuPermission>
122
134
  auth?: boolean
123
135
  docs?: Partial<{
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Type-safe helper for defining channel message routes that can be composed.
3
+ * Returns the routes record as-is (identity function) for use with `wireChannel`.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * export const chatRoutes = defineChannelRoutes({
8
+ * greet: pikkuChannelFunc({ func: greetFunc }),
9
+ * farewell: pikkuChannelFunc({ func: farewellFunc }),
10
+ * })
11
+ *
12
+ * wireChannel({
13
+ * name: 'chat',
14
+ * route: '/ws/chat',
15
+ * onMessageWiring: {
16
+ * command: chatRoutes,
17
+ * }
18
+ * })
19
+ * ```
20
+ */
21
+ export function defineChannelRoutes<T extends Record<string, any>>(
22
+ routes: T
23
+ ): T {
24
+ return routes
25
+ }
@@ -1,8 +1,23 @@
1
- export * from './channel-runner.js'
2
- export * from './channel.types.js'
3
- export * from './log-channels.js'
4
- export * from './pikku-abstract-channel-handler.js'
5
- export * from './eventhub-service.js'
6
- export * from './eventhub-service.js'
7
- export * from './channel-store.js'
8
- export * from './eventhub-store.js'
1
+ export { wireChannel, openChannel } from './channel-runner.js'
2
+ export {
3
+ addChannelMiddleware,
4
+ combineChannelMiddleware,
5
+ wrapChannelWithMiddleware,
6
+ } from './channel-middleware-runner.js'
7
+ export { logChannels } from './log-channels.js'
8
+ export { PikkuAbstractChannelHandler } from './pikku-abstract-channel-handler.js'
9
+ export type { EventHubService } from './eventhub-service.js'
10
+ export { ChannelStore } from './channel-store.js'
11
+ export type { Channel } from './channel-store.js'
12
+ export { EventHubStore } from './eventhub-store.js'
13
+ export type {
14
+ ChannelsMeta,
15
+ CoreChannel,
16
+ CorePikkuChannelMiddleware,
17
+ CorePikkuChannelMiddlewareFactory,
18
+ ChannelMessageMeta,
19
+ ChannelMeta,
20
+ PikkuChannel,
21
+ PikkuChannelHandlerFactory,
22
+ } from './channel.types.js'
23
+ export { defineChannelRoutes } from './define-channel-routes.js'
@@ -1,3 +1,3 @@
1
- export * from './local-channel-handler.js'
2
- export * from './local-channel-runner.js'
3
- export * from './local-eventhub-service.js'
1
+ export { PikkuLocalChannelHandler } from './local-channel-handler.js'
2
+ export { runLocalChannel } from './local-channel-runner.js'
3
+ export { LocalEventHubService } from './local-eventhub-service.js'
@@ -3,13 +3,13 @@ import * as assert from 'node:assert/strict'
3
3
  import { runLocalChannel } from './local-channel-runner.js'
4
4
  import { pikkuState, resetPikkuState } from '../../../pikku-state.js'
5
5
  import { wireChannel } from '../channel-runner.js'
6
- import {
6
+ import type {
7
7
  HTTPMethod,
8
8
  PikkuHTTPRequest,
9
9
  PikkuHTTPResponse,
10
10
  PikkuQuery,
11
11
  } from '../../http/http.types.js'
12
- import { SerializeOptions } from 'cookie'
12
+ import type { SerializeOptions } from 'cookie'
13
13
  import { httpRouter } from '../../http/routers/http-router.js'
14
14
 
15
15
  /**
@@ -102,6 +102,10 @@ const mockCreateWireServices = async () => ({
102
102
  beforeEach(() => {
103
103
  resetPikkuState()
104
104
  httpRouter.reset()
105
+ pikkuState(null, 'package', 'singletonServices', mockSingletonServices as any)
106
+ pikkuState(null, 'package', 'factories', {
107
+ createWireServices: mockCreateWireServices,
108
+ } as any)
105
109
  })
106
110
 
107
111
  afterEach(() => {
@@ -113,11 +117,9 @@ test('runChannel should return undefined and 404 if no matching channel is found
113
117
  const mockResponse = new PikkuMockResponse()
114
118
 
115
119
  const result = await runLocalChannel({
116
- singletonServices: mockSingletonServices,
117
120
  channelId: 'test-channel-id',
118
121
  request: new PikkuMockRequest('/non-existent-channel', 'get'),
119
122
  response: mockResponse,
120
- createWireServices: mockCreateWireServices,
121
123
  })
122
124
 
123
125
  assert.equal(
@@ -131,6 +133,10 @@ test('runChannel should return undefined and 404 if no matching channel is found
131
133
 
132
134
  test('runChannel should return a channel handler if channel matches and no auth required', async () => {
133
135
  resetPikkuState()
136
+ pikkuState(null, 'package', 'singletonServices', mockSingletonServices as any)
137
+ pikkuState(null, 'package', 'factories', {
138
+ createWireServices: mockCreateWireServices,
139
+ } as any)
134
140
 
135
141
  pikkuState(null, 'channel', 'meta', {
136
142
  test: {
@@ -148,18 +154,62 @@ test('runChannel should return a channel handler if channel matches and no auth
148
154
  httpRouter.initialize()
149
155
 
150
156
  const result = await runLocalChannel({
151
- singletonServices: mockSingletonServices,
152
157
  channelId: 'test-channel-id',
153
158
  request: new PikkuMockRequest('/test-channel', 'get'),
154
159
  response: new PikkuMockResponse(),
155
160
  route: '/test-channel',
156
- createWireServices: mockCreateWireServices,
157
161
  })
158
162
 
159
163
  assert.ok(result, 'Should return a PikkuChannelHandler instance')
160
164
 
161
165
  // Simulate opening the channel
162
166
  result.open()
167
+ })
168
+
169
+ test('runChannel should close wire services once when channel closes', async () => {
170
+ resetPikkuState()
171
+ pikkuState(null, 'package', 'singletonServices', mockSingletonServices as any)
172
+ let closeCount = 0
173
+
174
+ pikkuState(null, 'channel', 'meta', {
175
+ test: {
176
+ name: 'test',
177
+ route: '/test-channel',
178
+ },
179
+ } as any)
180
+ wireChannel({
181
+ name: 'test',
182
+ route: '/test-channel',
183
+ auth: false,
184
+ })
185
+
186
+ httpRouter.initialize()
187
+
188
+ pikkuState(null, 'package', 'factories', {
189
+ createWireServices: async () => ({
190
+ tracked: {
191
+ close: async () => {
192
+ closeCount += 1
193
+ },
194
+ },
195
+ }),
196
+ } as any)
197
+
198
+ const result = await runLocalChannel({
199
+ channelId: 'test-channel-id',
200
+ request: new PikkuMockRequest('/test-channel', 'get'),
201
+ response: new PikkuMockResponse(),
202
+ route: '/test-channel',
203
+ })
204
+
205
+ assert.ok(result)
206
+ assert.equal(closeCount, 0)
207
+
208
+ result.close()
209
+ await new Promise((resolve) => setTimeout(resolve, 0))
210
+ assert.equal(closeCount, 1)
163
211
 
164
- // TODO: Test that the opened channel works
212
+ result.close()
213
+ await new Promise((resolve) => setTimeout(resolve, 0))
214
+ assert.equal(closeCount, 1)
165
215
  })
@@ -2,34 +2,45 @@ import { openChannel } from '../channel-runner.js'
2
2
  import { createHTTPWire } from '../../http/http-runner.js'
3
3
  import { closeWireServices } from '../../../utils.js'
4
4
  import { processMessageHandlers } from '../channel-handler.js'
5
- import {
6
- CoreChannel,
7
- RunChannelOptions,
8
- RunChannelParams,
9
- } from '../channel.types.js'
5
+ import type { CoreChannel, RunChannelOptions } from '../channel.types.js'
10
6
  import { PikkuLocalChannelHandler } from './local-channel-handler.js'
11
- import { PikkuWire, WireServices } from '../../../types/core.types.js'
7
+ import type { PikkuWire, WireServices } from '../../../types/core.types.js'
12
8
  import { handleHTTPError } from '../../../handle-error.js'
13
- import { PikkuSessionService } from '../../../services/user-session-service.js'
14
- import { PikkuHTTP } from '../../http/http.types.js'
9
+ import {
10
+ PikkuSessionService,
11
+ createMiddlewareSessionWireProps,
12
+ } from '../../../services/user-session-service.js'
13
+ import type {
14
+ PikkuHTTP,
15
+ PikkuHTTPRequest,
16
+ PikkuHTTPResponse,
17
+ } from '../../http/http.types.js'
15
18
  import { runChannelLifecycleWithMiddleware } from '../channel-common.js'
19
+ import {
20
+ getSingletonServices,
21
+ getCreateWireServices,
22
+ } from '../../../pikku-state.js'
16
23
 
17
24
  export const runLocalChannel = async ({
18
- singletonServices,
19
25
  channelId,
20
26
  request,
21
27
  response,
22
28
  route,
23
- createWireServices,
24
29
  skipUserSession = false,
25
30
  respondWith404 = true,
26
31
  coerceDataFromSchema = true,
27
32
  logWarningsForStatusCodes = [],
28
33
  bubbleErrors = false,
29
34
  }: Partial<Pick<CoreChannel<unknown, any>, 'route'>> &
30
- RunChannelOptions &
31
- RunChannelParams<unknown>): Promise<PikkuLocalChannelHandler | void> => {
35
+ RunChannelOptions & {
36
+ channelId: string
37
+ request?: PikkuHTTPRequest
38
+ response?: PikkuHTTPResponse
39
+ }): Promise<PikkuLocalChannelHandler | void> => {
40
+ const singletonServices = getSingletonServices()
41
+ const createWireServices = getCreateWireServices()
32
42
  let wireServices: WireServices<typeof singletonServices> | undefined
43
+ let closedWireServices = false
33
44
 
34
45
  let channelHandler: PikkuLocalChannelHandler | undefined
35
46
  const userSession = new PikkuSessionService()
@@ -44,12 +55,10 @@ export const runLocalChannel = async ({
44
55
  try {
45
56
  ;({ openingData, channelConfig, meta } = await openChannel({
46
57
  channelId,
47
- createWireServices,
48
58
  respondWith404,
49
59
  request,
50
60
  response,
51
61
  route,
52
- singletonServices,
53
62
  skipUserSession,
54
63
  coerceDataFromSchema,
55
64
  userSession,
@@ -75,12 +84,23 @@ export const runLocalChannel = async ({
75
84
  openingData
76
85
  )
77
86
  const channel = channelHandler.getChannel()
78
- const wire: PikkuWire = { channel, session: userSession }
87
+ const wire: PikkuWire = {
88
+ channel,
89
+ ...createMiddlewareSessionWireProps(userSession),
90
+ }
79
91
 
80
92
  if (createWireServices) {
81
93
  wireServices = await createWireServices(singletonServices, wire)
82
94
  }
83
95
 
96
+ const closeServices = async () => {
97
+ if (!wireServices || closedWireServices) {
98
+ return
99
+ }
100
+ closedWireServices = true
101
+ await closeWireServices(singletonServices.logger, wireServices)
102
+ }
103
+
84
104
  const services = { ...singletonServices, ...wireServices }
85
105
 
86
106
  channelHandler.registerOnOpen(async () => {
@@ -94,6 +114,7 @@ export const runLocalChannel = async ({
94
114
  services,
95
115
  channel,
96
116
  data: openingData,
117
+ channelMiddlewareMeta: meta.channelMiddleware,
97
118
  })
98
119
  if (result !== undefined) {
99
120
  await channel.send(result)
@@ -115,6 +136,7 @@ export const runLocalChannel = async ({
115
136
  lifecycleType: 'disconnect',
116
137
  services,
117
138
  channel,
139
+ channelMiddlewareMeta: meta.channelMiddleware,
118
140
  })
119
141
  } catch (e) {
120
142
  singletonServices.logger.error(`Error handling onDisconnect: ${e}`)
@@ -122,9 +144,7 @@ export const runLocalChannel = async ({
122
144
  }
123
145
  }
124
146
 
125
- if (wireServices) {
126
- await closeWireServices(singletonServices.logger, wireServices)
127
- }
147
+ await closeServices()
128
148
  })
129
149
 
130
150
  const onMessage = processMessageHandlers(
@@ -153,7 +173,8 @@ export const runLocalChannel = async ({
153
173
  bubbleErrors
154
174
  )
155
175
  } finally {
156
- if (wireServices) {
176
+ if (!channelHandler && wireServices && !closedWireServices) {
177
+ closedWireServices = true
157
178
  await closeWireServices(singletonServices.logger, wireServices)
158
179
  }
159
180
  }
@@ -1,7 +1,7 @@
1
1
  import * as assert from 'assert'
2
2
  import { test } from 'node:test'
3
- import { PikkuChannelHandler } from '../channel.types.js'
4
- import { CoreUserSession } from '../../../types/core.types.js'
3
+ import type { PikkuChannelHandler } from '../channel.types.js'
4
+ import type { CoreUserSession } from '../../../types/core.types.js'
5
5
  import { LocalEventHubService } from './local-eventhub-service.js'
6
6
 
7
7
  class MockChannelHandler implements PikkuChannelHandler {
@@ -1,5 +1,5 @@
1
- import { PikkuChannelHandler } from '../channel.types.js'
2
- import { EventHubService } from '../eventhub-service.js'
1
+ import type { PikkuChannelHandler } from '../channel.types.js'
2
+ import type { EventHubService } from '../eventhub-service.js'
3
3
 
4
4
  /**
5
5
  * Implementation of the SubscriptionService interface.
@@ -1,5 +1,5 @@
1
1
  import { pikkuState } from '../../pikku-state.js'
2
- import { Logger } from '../../services/index.js'
2
+ import type { Logger } from '../../services/index.js'
3
3
 
4
4
  /**
5
5
  * Logs all the loaded channels.
@@ -1,4 +1,4 @@
1
- import { PikkuChannel, PikkuChannelHandler } from './channel.types.js'
1
+ import type { PikkuChannel, PikkuChannelHandler } from './channel.types.js'
2
2
 
3
3
  export abstract class PikkuAbstractChannelHandler<
4
4
  OpeningData = unknown,
@@ -1 +1,5 @@
1
- export * from './serverless-channel-runner.js'
1
+ export {
2
+ runChannelConnect,
3
+ runChannelDisconnect,
4
+ runChannelMessage,
5
+ } from './serverless-channel-runner.js'