@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
@@ -0,0 +1,82 @@
1
+ import type {
2
+ SecretDefinitions,
3
+ SecretDefinitionsMeta,
4
+ } from './secret.types.js'
5
+
6
+ export interface SchemaRefLike {
7
+ variableName: string
8
+ sourceFile: string
9
+ }
10
+
11
+ export function validateAndBuildSecretDefinitionsMeta(
12
+ definitions: SecretDefinitions,
13
+ schemaLookup: Map<string, SchemaRefLike>
14
+ ): SecretDefinitionsMeta {
15
+ const meta: SecretDefinitionsMeta = {}
16
+ const secretIdToDefinition: Map<string, SecretDefinitions[0]> = new Map()
17
+
18
+ for (const def of definitions) {
19
+ const existingDef = secretIdToDefinition.get(def.secretId)
20
+
21
+ if (existingDef) {
22
+ if (def.schema && existingDef.schema) {
23
+ const defSchemaRef = schemaLookup.get(def.schema as string)
24
+ const existingSchemaRef = schemaLookup.get(existingDef.schema as string)
25
+
26
+ if (defSchemaRef && existingSchemaRef) {
27
+ if (
28
+ defSchemaRef.variableName !== existingSchemaRef.variableName ||
29
+ defSchemaRef.sourceFile !== existingSchemaRef.sourceFile
30
+ ) {
31
+ throw new Error(
32
+ `Secret '${def.secretId}' is defined with different schemas.\n` +
33
+ ` First definition: ${existingDef.sourceFile} (schema: ${existingSchemaRef.variableName})\n` +
34
+ ` Second definition: ${def.sourceFile} (schema: ${defSchemaRef.variableName})\n` +
35
+ `Credentials sharing a secretId must use the same schema.`
36
+ )
37
+ }
38
+ }
39
+ }
40
+
41
+ if (def.oauth2 && existingDef.oauth2) {
42
+ if (JSON.stringify(def.oauth2) !== JSON.stringify(existingDef.oauth2)) {
43
+ throw new Error(
44
+ `OAuth2 secret '${def.secretId}' is defined with different configurations.\n` +
45
+ ` First definition: ${existingDef.sourceFile}\n` +
46
+ ` Second definition: ${def.sourceFile}\n` +
47
+ `Credentials sharing a secretId must use the same configuration.`
48
+ )
49
+ }
50
+ }
51
+
52
+ if (!meta[def.name]) {
53
+ meta[def.name] = {
54
+ name: def.name,
55
+ displayName: def.displayName,
56
+ description: def.description,
57
+ secretId: def.secretId,
58
+ schema: def.schema,
59
+ oauth2: def.oauth2,
60
+ sourceFile: def.sourceFile,
61
+ }
62
+ }
63
+ continue
64
+ }
65
+
66
+ secretIdToDefinition.set(def.secretId, def)
67
+
68
+ if (!meta[def.name]) {
69
+ meta[def.name] = {
70
+ name: def.name,
71
+ displayName: def.displayName,
72
+ description: def.description,
73
+ secretId: def.secretId,
74
+ schema: def.schema,
75
+ oauth2: def.oauth2,
76
+ sourceFile: def.sourceFile,
77
+ }
78
+ }
79
+ }
80
+
81
+ return meta
82
+ }
@@ -1,2 +1,10 @@
1
- export * from './trigger.types.js'
2
- export * from './trigger-runner.js'
1
+ export { wireTrigger, wireTriggerSource } from './trigger-runner.js'
2
+ export { PikkuTriggerService } from './pikku-trigger-service.js'
3
+ export type {
4
+ TriggerMeta,
5
+ TriggerSourceMeta,
6
+ CorePikkuTriggerFunction,
7
+ CorePikkuTriggerFunctionConfig,
8
+ CoreTrigger,
9
+ PikkuTrigger,
10
+ } from './trigger.types.js'
@@ -0,0 +1,112 @@
1
+ import { rpcService } from '../rpc/rpc-runner.js'
2
+ import { setupTrigger } from './trigger-runner.js'
3
+ import type { TriggerInstance } from './trigger.types.js'
4
+ import type { TriggerService } from '../../services/trigger-service.js'
5
+ import {
6
+ getSingletonServices,
7
+ getCreateWireServices,
8
+ pikkuState,
9
+ } from '../../pikku-state.js'
10
+
11
+ export type TriggerTarget = {
12
+ targetType: 'rpc' | 'workflow'
13
+ targetName: string
14
+ startNode?: string
15
+ }
16
+
17
+ export type TriggerSourceInfo = {
18
+ name: string
19
+ input: unknown
20
+ }
21
+
22
+ export abstract class PikkuTriggerService implements TriggerService {
23
+ protected activeTriggers = new Map<string, TriggerInstance>()
24
+
25
+ abstract start(): Promise<void>
26
+
27
+ async stop(): Promise<void> {
28
+ const singletonServices = getSingletonServices()
29
+ for (const [name, instance] of this.activeTriggers) {
30
+ try {
31
+ await instance.teardown()
32
+ singletonServices.logger.info(`Stopped trigger: ${name}`)
33
+ } catch (error) {
34
+ singletonServices.logger.error(
35
+ `Error stopping trigger ${name}: ${error}`
36
+ )
37
+ }
38
+ }
39
+ this.activeTriggers.clear()
40
+ }
41
+
42
+ protected getTriggerTargets(): Map<string, TriggerTarget[]> {
43
+ const triggers = pikkuState(null, 'trigger', 'triggers')
44
+
45
+ const triggerTargets = new Map<string, TriggerTarget[]>()
46
+
47
+ for (const [name] of triggers) {
48
+ const meta = pikkuState(null, 'trigger', 'meta')[name]
49
+ if (meta) {
50
+ if (!triggerTargets.has(name)) {
51
+ triggerTargets.set(name, [])
52
+ }
53
+ triggerTargets.get(name)!.push({
54
+ targetType: 'rpc',
55
+ targetName: meta.pikkuFuncId,
56
+ })
57
+ }
58
+ }
59
+
60
+ return triggerTargets
61
+ }
62
+
63
+ protected getTriggerSources(): Map<string, { input?: unknown }> {
64
+ return pikkuState(null, 'trigger', 'triggerSources')
65
+ }
66
+
67
+ protected async setupTriggerInstance(
68
+ name: string,
69
+ input: unknown,
70
+ onTrigger: (data: unknown) => Promise<void>
71
+ ): Promise<TriggerInstance> {
72
+ return setupTrigger({
73
+ name,
74
+ input,
75
+ onTrigger,
76
+ })
77
+ }
78
+
79
+ protected async onTriggerFire(
80
+ triggerName: string,
81
+ targets: TriggerTarget[],
82
+ data: unknown
83
+ ): Promise<void> {
84
+ const singletonServices = getSingletonServices()
85
+ const createWireServices = getCreateWireServices()
86
+ const wireServices = await createWireServices?.(singletonServices, {})
87
+ const services = { ...singletonServices, ...wireServices }
88
+ const rpc = rpcService.getContextRPCService(services, {}, false)
89
+
90
+ for (const target of targets) {
91
+ try {
92
+ if (target.targetType === 'workflow') {
93
+ await rpc.startWorkflow(target.targetName, data, {
94
+ startNode: target.startNode,
95
+ })
96
+ singletonServices.logger.info(
97
+ `Trigger '${triggerName}' started workflow '${target.targetName}'`
98
+ )
99
+ } else {
100
+ await rpc.invoke(target.targetName, data)
101
+ singletonServices.logger.info(
102
+ `Trigger '${triggerName}' invoked RPC '${target.targetName}'`
103
+ )
104
+ }
105
+ } catch (error) {
106
+ singletonServices.logger.error(
107
+ `Error invoking ${target.targetType} '${target.targetName}' from trigger '${triggerName}': ${error}`
108
+ )
109
+ }
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,79 @@
1
+ import { describe, test, beforeEach } from 'node:test'
2
+ import assert from 'node:assert'
3
+ import {
4
+ wireTrigger,
5
+ wireTriggerSource,
6
+ getRegisteredTriggers,
7
+ getTriggerMeta,
8
+ } from './trigger-runner.js'
9
+ import { resetPikkuState, pikkuState } from '../../pikku-state.js'
10
+ import { PikkuMissingMetaError } from '../../errors/errors.js'
11
+
12
+ beforeEach(() => {
13
+ resetPikkuState()
14
+ })
15
+
16
+ describe('wireTrigger', () => {
17
+ test('should register a trigger when meta exists', () => {
18
+ const meta = pikkuState(null, 'trigger', 'meta')
19
+ ;(meta as any)['myTrigger'] = { pikkuFuncId: 'triggerFunc' }
20
+
21
+ wireTrigger({ name: 'myTrigger', func: async () => {} } as any)
22
+
23
+ const triggers = getRegisteredTriggers()
24
+ assert.ok(triggers.has('myTrigger'))
25
+ })
26
+
27
+ test('should throw PikkuMissingMetaError when meta is missing', () => {
28
+ assert.throws(
29
+ () => wireTrigger({ name: 'noMeta', func: async () => {} } as any),
30
+ (err: any) => err instanceof PikkuMissingMetaError
31
+ )
32
+ })
33
+ })
34
+
35
+ describe('wireTriggerSource', () => {
36
+ test('should register a trigger source when meta exists', () => {
37
+ const sourceMeta = pikkuState(null, 'trigger', 'sourceMeta')
38
+ ;(sourceMeta as any)['mySource'] = { pikkuFuncId: 'sourceFunc' }
39
+
40
+ wireTriggerSource({ name: 'mySource', func: async () => {} } as any)
41
+
42
+ const sources = pikkuState(null, 'trigger', 'triggerSources')
43
+ assert.ok(sources.has('mySource'))
44
+ })
45
+
46
+ test('should throw PikkuMissingMetaError when source meta is missing', () => {
47
+ assert.throws(
48
+ () => wireTriggerSource({ name: 'noMeta', func: async () => {} } as any),
49
+ (err: any) => err instanceof PikkuMissingMetaError
50
+ )
51
+ })
52
+
53
+ test('should throw when trigger source already exists', () => {
54
+ const sourceMeta = pikkuState(null, 'trigger', 'sourceMeta')
55
+ ;(sourceMeta as any)['dupSource'] = { pikkuFuncId: 'sourceFunc' }
56
+
57
+ wireTriggerSource({ name: 'dupSource', func: async () => {} } as any)
58
+
59
+ assert.throws(
60
+ () =>
61
+ wireTriggerSource({ name: 'dupSource', func: async () => {} } as any),
62
+ { message: 'Trigger source already exists: dupSource' }
63
+ )
64
+ })
65
+ })
66
+
67
+ describe('getRegisteredTriggers', () => {
68
+ test('should return the triggers Map', () => {
69
+ const triggers = getRegisteredTriggers()
70
+ assert.ok(triggers instanceof Map)
71
+ })
72
+ })
73
+
74
+ describe('getTriggerMeta', () => {
75
+ test('should return the trigger meta object', () => {
76
+ const meta = getTriggerMeta()
77
+ assert.ok(typeof meta === 'object')
78
+ })
79
+ })
@@ -1,84 +1,123 @@
1
- import type { CoreSingletonServices } from '../../types/core.types.js'
2
- import type { CoreTrigger, TriggerInstance } from './trigger.types.js'
3
- import { pikkuState } from '../../pikku-state.js'
4
- import type { CorePikkuTriggerFunctionConfig } from '../../function/functions.types.js'
1
+ import type { PikkuWire } from '../../types/core.types.js'
2
+ import type {
3
+ CoreTrigger,
4
+ CoreTriggerSource,
5
+ TriggerInstance,
6
+ } from './trigger.types.js'
7
+ import {
8
+ pikkuState,
9
+ getSingletonServices,
10
+ getCreateWireServices,
11
+ } from '../../pikku-state.js'
12
+ import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
13
+ import { PikkuMissingMetaError } from '../../errors/errors.js'
5
14
 
6
15
  /**
7
16
  * Registers a trigger with the Pikku framework.
8
- * The trigger will be available for setup via setupTrigger.
17
+ * Declares a trigger name and its target pikku function.
18
+ * Runs everywhere. Inspector extracts at build time.
9
19
  */
10
- export const wireTrigger = <
11
- TConfig = unknown,
12
- TOutput = unknown,
13
- TriggerFunctionConfig extends CorePikkuTriggerFunctionConfig<
14
- TConfig,
15
- TOutput
16
- > = CorePikkuTriggerFunctionConfig<TConfig, TOutput>,
17
- >(
18
- trigger: CoreTrigger<TConfig, TOutput, TriggerFunctionConfig>
19
- ) => {
20
+ export const wireTrigger = (trigger: CoreTrigger) => {
20
21
  const meta = pikkuState(null, 'trigger', 'meta')
21
22
  const triggerMeta = meta[trigger.name]
22
23
  if (!triggerMeta) {
23
- throw new Error(`Trigger metadata not found: ${trigger.name}`)
24
+ throw new PikkuMissingMetaError(
25
+ `Missing generated metadata for trigger '${trigger.name}'`
26
+ )
24
27
  }
25
28
 
29
+ addFunction(triggerMeta.pikkuFuncId, trigger.func as any)
30
+
26
31
  const triggers = pikkuState(null, 'trigger', 'triggers')
27
- if (triggers.has(trigger.name)) {
28
- throw new Error(`Trigger already exists: ${trigger.name}`)
29
- }
30
32
  triggers.set(trigger.name, trigger as any)
31
33
  }
32
34
 
35
+ /**
36
+ * Registers a trigger source with the Pikku framework.
37
+ * Provides the actual subscription function and input data.
38
+ * Only imported in the trigger worker process.
39
+ */
40
+ export const wireTriggerSource = <TInput = unknown, TOutput = unknown>(
41
+ source: CoreTriggerSource<TInput, TOutput>
42
+ ) => {
43
+ const sourceMeta = pikkuState(null, 'trigger', 'sourceMeta')
44
+ const triggerSourceMeta = sourceMeta[source.name]
45
+ if (!triggerSourceMeta) {
46
+ throw new PikkuMissingMetaError(
47
+ `Missing generated metadata for trigger source '${source.name}'`
48
+ )
49
+ }
50
+
51
+ const triggerSources = pikkuState(null, 'trigger', 'triggerSources')
52
+ if (triggerSources.has(source.name)) {
53
+ throw new Error(`Trigger source already exists: ${source.name}`)
54
+ }
55
+ triggerSources.set(source.name, source as any)
56
+
57
+ addFunction(
58
+ triggerSourceMeta.pikkuFuncId,
59
+ source.func as any,
60
+ triggerSourceMeta.packageName
61
+ )
62
+ }
63
+
33
64
  /**
34
65
  * Parameters for setting up a trigger
35
66
  */
36
- export type SetupTriggerParams<TOutput = unknown> = {
67
+ export type SetupTriggerParams<TInput = unknown, TOutput = unknown> = {
37
68
  name: string
38
- singletonServices: CoreSingletonServices
69
+ input?: TInput
39
70
  onTrigger: (data: TOutput) => void | Promise<void>
40
71
  }
41
72
 
42
73
  /**
43
74
  * Sets up a registered trigger and starts listening for events.
44
75
  * Returns a TriggerInstance with a teardown function.
76
+ *
77
+ * @param name - The trigger name (must be registered via wireTrigger)
78
+ * @param input - The input to pass to the trigger function
79
+ * @param onTrigger - Callback invoked when the trigger fires
45
80
  */
46
- export async function setupTrigger<TOutput = unknown>({
81
+ export async function setupTrigger<TInput = unknown, TOutput = unknown>({
47
82
  name,
48
- singletonServices,
83
+ input,
49
84
  onTrigger,
50
- }: SetupTriggerParams<TOutput>): Promise<TriggerInstance> {
51
- const trigger = pikkuState(null, 'trigger', 'triggers').get(name)
52
- const meta = pikkuState(null, 'trigger', 'meta')[name]
85
+ }: SetupTriggerParams<TInput, TOutput>): Promise<TriggerInstance> {
86
+ const singletonServices = getSingletonServices()
87
+ const createWireServices = getCreateWireServices()
88
+ const source = pikkuState(null, 'trigger', 'triggerSources').get(name)
89
+ const sourceMeta = pikkuState(null, 'trigger', 'sourceMeta')[name]
53
90
 
54
- if (!trigger) {
55
- throw new Error(`Trigger not found: ${name}`)
91
+ if (!source) {
92
+ throw new Error(`Trigger source not found: ${name}`)
56
93
  }
57
- if (!meta) {
58
- throw new Error(`Trigger metadata not found: ${name}`)
94
+ if (!sourceMeta) {
95
+ throw new PikkuMissingMetaError(
96
+ `Missing generated metadata for trigger source '${name}'`
97
+ )
59
98
  }
60
99
 
61
- const wire = {
100
+ const wire: PikkuWire = {
62
101
  trigger: {
63
- trigger: (data: TOutput) => {
102
+ invoke: (data: unknown) => {
64
103
  singletonServices.logger.info(`Trigger fired: ${name}`)
65
- onTrigger(data)
104
+ onTrigger(data as TOutput)
66
105
  },
67
106
  },
68
107
  }
69
108
 
70
109
  singletonServices.logger.info(`Setting up trigger: ${name}`)
71
110
 
72
- const teardown = await trigger.func.func(
111
+ const teardown = await runPikkuFunc('trigger', name, sourceMeta.pikkuFuncId, {
73
112
  singletonServices,
74
- trigger.config,
75
- wire as any
76
- )
113
+ createWireServices,
114
+ auth: false,
115
+ data: () => input as any,
116
+ wire,
117
+ packageName: sourceMeta.packageName || null,
118
+ })
77
119
 
78
- return {
79
- name,
80
- teardown,
81
- }
120
+ return { name, teardown }
82
121
  }
83
122
 
84
123
  /**
@@ -1,50 +1,152 @@
1
- import type { CorePikkuTriggerFunctionConfig } from '../../function/functions.types.js'
1
+ import type {
2
+ CommonWireMeta,
3
+ CoreSingletonServices,
4
+ } from '../../types/core.types.js'
5
+ import type { StandardSchemaV1 } from '@standard-schema/spec'
6
+ import type { CoreNodeConfig } from '../node/node.types.js'
2
7
 
3
8
  /**
4
9
  * The trigger interaction object passed to trigger functions via the wire.
5
10
  * Call trigger() to fire the trigger and start a new workflow/execution.
6
11
  */
7
12
  export interface PikkuTrigger<TOutput = unknown> {
8
- trigger: (data: TOutput) => void
13
+ invoke: (data: TOutput) => void
9
14
  }
10
15
 
11
16
  /**
12
17
  * Metadata for registered triggers stored in state.
13
18
  */
14
- export type TriggerMeta = Record<
19
+ export type TriggerMeta = Record<string, CommonWireMeta & { name: string }>
20
+
21
+ export type TriggerSourceMeta = Record<
15
22
  string,
16
- {
17
- pikkuFuncName: string
18
- name: string
19
- description?: string
20
- tags?: string[]
21
- }
23
+ { name: string; pikkuFuncId: string; packageName?: string }
22
24
  >
23
25
 
26
+ /**
27
+ * A trigger function that sets up a subscription and returns a teardown function.
28
+ * The trigger is fired via wire.trigger.invoke(data).
29
+ *
30
+ * @template TInput - Input type (configuration passed when wired)
31
+ * @template TOutput - Output type produced when trigger fires
32
+ * @template Services - Services available to the trigger
33
+ */
34
+ export type CorePikkuTriggerFunction<
35
+ TInput = unknown,
36
+ TOutput = unknown,
37
+ Services extends CoreSingletonServices = CoreSingletonServices,
38
+ > = (
39
+ services: Services,
40
+ input: TInput,
41
+ wire: { trigger: { invoke: (data: TOutput) => void } }
42
+ ) => Promise<() => void | Promise<void>>
43
+
44
+ /**
45
+ * Configuration object for creating a trigger function with metadata
46
+ */
47
+ export type CorePikkuTriggerFunctionConfig<
48
+ TInput = unknown,
49
+ TOutput = unknown,
50
+ Services extends CoreSingletonServices = CoreSingletonServices,
51
+ InputSchema extends StandardSchemaV1 | undefined = undefined,
52
+ OutputSchema extends StandardSchemaV1 | undefined = undefined,
53
+ > = {
54
+ /** Optional human-readable title for the trigger */
55
+ title?: string
56
+ /** Optional description of what the trigger does */
57
+ description?: string
58
+ /** Optional tags for categorization */
59
+ tags?: string[]
60
+ /** The trigger function */
61
+ func: CorePikkuTriggerFunction<TInput, TOutput, Services>
62
+ /** Optional Zod schema for input validation */
63
+ input?: InputSchema
64
+ /** Optional Zod schema for output validation */
65
+ output?: OutputSchema
66
+ /** Optional node configuration */
67
+ node?: CoreNodeConfig
68
+ }
69
+
70
+ /**
71
+ * Factory function for creating trigger functions
72
+ * Supports both direct function and configuration object syntax
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * // Direct function syntax
77
+ * export const redisSubscribeTrigger = pikkuTriggerFunc<
78
+ * { channel: string },
79
+ * { message: string }
80
+ * >(async ({ redis }, { channel }, { trigger }) => {
81
+ * const subscriber = redis.duplicate()
82
+ * await subscriber.subscribe(channel, (msg) => {
83
+ * trigger.invoke({ message: msg })
84
+ * })
85
+ * return () => subscriber.unsubscribe()
86
+ * })
87
+ *
88
+ * // Configuration object syntax with metadata
89
+ * export const redisSubscribeTrigger = pikkuTriggerFunc({
90
+ * title: 'Redis Subscribe Trigger',
91
+ * description: 'Listens to Redis pub/sub channel',
92
+ * input: z.object({ channel: z.string() }),
93
+ * output: z.object({ message: z.string() }),
94
+ * func: async ({ redis }, { channel }, { trigger }) => {
95
+ * const subscriber = redis.duplicate()
96
+ * await subscriber.subscribe(channel, (msg) => {
97
+ * trigger.invoke({ message: msg })
98
+ * })
99
+ * return () => subscriber.unsubscribe()
100
+ * }
101
+ * })
102
+ * ```
103
+ */
104
+ export const pikkuTriggerFunc = <
105
+ TInput = unknown,
106
+ TOutput = unknown,
107
+ Services extends CoreSingletonServices = CoreSingletonServices,
108
+ InputSchema extends StandardSchemaV1 | undefined = undefined,
109
+ OutputSchema extends StandardSchemaV1 | undefined = undefined,
110
+ >(
111
+ triggerOrConfig:
112
+ | CorePikkuTriggerFunction<TInput, TOutput, Services>
113
+ | CorePikkuTriggerFunctionConfig<
114
+ TInput,
115
+ TOutput,
116
+ Services,
117
+ InputSchema,
118
+ OutputSchema
119
+ >
120
+ ): CorePikkuTriggerFunctionConfig<
121
+ TInput,
122
+ TOutput,
123
+ Services,
124
+ InputSchema,
125
+ OutputSchema
126
+ > => {
127
+ if (typeof triggerOrConfig === 'function') {
128
+ return { func: triggerOrConfig }
129
+ }
130
+ return triggerOrConfig
131
+ }
132
+
24
133
  /**
25
134
  * Core trigger definition for registration.
26
135
  *
27
- * @template TConfig - Configuration type
136
+ * @template TInput - Input type (configuration passed when wired)
28
137
  * @template TOutput - Output type
29
138
  */
30
- export interface CoreTrigger<
31
- TConfig = unknown,
32
- TOutput = unknown,
33
- TriggerFunctionConfig extends CorePikkuTriggerFunctionConfig<
34
- TConfig,
35
- TOutput
36
- > = CorePikkuTriggerFunctionConfig<TConfig, TOutput>,
37
- > {
139
+ export interface CoreTrigger<PikkuFunctionConfig = any> {
38
140
  /** Unique name for this trigger */
39
141
  name: string
40
- /** The trigger function configuration */
41
- func: TriggerFunctionConfig
42
- /** Configuration to pass to the trigger function */
43
- config: TConfig
142
+ /** The target RPC function to invoke when the trigger fires */
143
+ func: PikkuFunctionConfig
44
144
  /** Optional description */
45
145
  description?: string
46
146
  /** Optional tags for categorization */
47
147
  tags?: string[]
148
+ /** Whether this trigger is used by a graph workflow */
149
+ graph?: true
48
150
  }
49
151
 
50
152
  /**
@@ -54,3 +156,23 @@ export interface TriggerInstance {
54
156
  name: string
55
157
  teardown: () => void | Promise<void>
56
158
  }
159
+
160
+ /**
161
+ * A trigger source that provides the subscription function.
162
+ * Only imported in the trigger worker process.
163
+ *
164
+ * @template TInput - Input type passed to the trigger function
165
+ * @template TOutput - Output type produced when trigger fires
166
+ */
167
+ export type CoreTriggerSource<TInput = unknown, TOutput = unknown> = {
168
+ /** Must match a wireTrigger name */
169
+ name: string
170
+ /** The trigger function config that sets up the subscription */
171
+ func: CorePikkuTriggerFunctionConfig<
172
+ TInput,
173
+ TOutput,
174
+ CoreSingletonServices,
175
+ StandardSchemaV1 | undefined,
176
+ StandardSchemaV1 | undefined
177
+ >
178
+ } & (unknown extends TInput ? { input?: TInput } : { input: TInput })
@@ -0,0 +1,8 @@
1
+ export { wireVariable } from './variable.types.js'
2
+ export type {
3
+ CoreVariable,
4
+ VariableDefinitionMeta,
5
+ VariableDefinitionsMeta,
6
+ VariableDefinitions,
7
+ } from './variable.types.js'
8
+ export { validateAndBuildVariableDefinitionsMeta } from './validate-variable-definitions.js'