@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,6 +1,19 @@
1
1
  import { runPikkuFunc } from '../../function/function-runner.js';
2
2
  import { pikkuState } from '../../pikku-state.js';
3
3
  import { ForbiddenError } from '../../errors/errors.js';
4
+ import { PikkuError } from '../../errors/error-handler.js';
5
+ import { parseVersionedId } from '../../version.js';
6
+ import { encryptJSON } from '../../crypto-utils.js';
7
+ export class RPCNotFoundError extends PikkuError {
8
+ rpcName;
9
+ constructor(rpcName) {
10
+ super(`RPC function not found: ${rpcName}`);
11
+ this.rpcName = rpcName;
12
+ }
13
+ }
14
+ import { runAIAgent } from '../ai-agent/ai-agent-runner.js';
15
+ import { streamAIAgent, resumeAIAgent } from '../ai-agent/ai-agent-stream.js';
16
+ import { approveAIAgent } from '../ai-agent/ai-agent-registry.js';
4
17
  /**
5
18
  * Resolve a namespaced function reference to package and function names
6
19
  * Uses pikkuState to look up the namespace -> package mapping
@@ -12,21 +25,28 @@ const resolveNamespace = (namespacedFunction) => {
12
25
  }
13
26
  const namespace = namespacedFunction.substring(0, colonIndex);
14
27
  const functionName = namespacedFunction.substring(colonIndex + 1);
15
- const externalPackages = pikkuState(null, 'rpc', 'externalPackages');
16
- const packageName = externalPackages.get(namespace);
17
- if (!packageName) {
28
+ const addons = pikkuState(null, 'rpc', 'addons');
29
+ const pkgConfig = addons.get(namespace);
30
+ if (!pkgConfig) {
18
31
  return null;
19
32
  }
20
33
  return {
21
- package: packageName,
34
+ namespace,
35
+ package: pkgConfig.package,
22
36
  function: functionName,
23
37
  };
24
38
  };
25
39
  const getPikkuFunctionName = (rpcName) => {
26
40
  const rpc = pikkuState(null, 'rpc', 'meta');
27
- const rpcMeta = rpc[rpcName];
41
+ let rpcMeta = rpc[rpcName];
28
42
  if (!rpcMeta) {
29
- throw new Error(`RPC function not found: ${rpcName}`);
43
+ const { baseName, version } = parseVersionedId(rpcName);
44
+ if (version !== null) {
45
+ rpcMeta = rpc[baseName];
46
+ }
47
+ }
48
+ if (!rpcMeta) {
49
+ throw new RPCNotFoundError(rpcName);
30
50
  }
31
51
  return rpcMeta;
32
52
  };
@@ -41,7 +61,16 @@ export class ContextAwareRPCService {
41
61
  this.options = options;
42
62
  }
43
63
  async rpcExposed(funcName, data) {
44
- const functionMeta = pikkuState(null, 'function', 'meta')[funcName];
64
+ let functionMeta;
65
+ if (funcName.includes(':')) {
66
+ const resolved = resolveNamespace(funcName);
67
+ if (resolved) {
68
+ functionMeta = pikkuState(resolved.package, 'function', 'meta')[resolved.function];
69
+ }
70
+ }
71
+ else {
72
+ functionMeta = pikkuState(null, 'function', 'meta')[funcName];
73
+ }
45
74
  if (!functionMeta) {
46
75
  throw new Error(`Function not found: ${funcName}`);
47
76
  }
@@ -64,50 +93,51 @@ export class ContextAwareRPCService {
64
93
  };
65
94
  // Check if it's a namespaced function call (e.g., 'stripe:createCharge')
66
95
  if (funcName.includes(':')) {
67
- return this.invokeExternalPackageFunction(funcName, data, updatedWire);
96
+ return this.invokeAddonFunction(funcName, data, updatedWire);
68
97
  }
69
98
  // Main package function
70
99
  return runPikkuFunc('rpc', funcName, getPikkuFunctionName(funcName), {
71
100
  auth: this.options.requiresAuth,
72
- // TODO: this is a hack since services have already been created
73
- // but is valid since we don't want to keep creating new wire services
74
101
  singletonServices: this.services,
75
102
  data: () => data,
76
103
  wire: updatedWire,
77
104
  });
78
105
  }
79
106
  /**
80
- * Invoke a function from an external package
81
- * External packages register their functions in pikkuState under their package name.
107
+ * Invoke a function from an addon package
108
+ * Addon packages register their functions in pikkuState under their package name.
82
109
  * The function is executed using the parent services (shared singleton services).
83
110
  * @private
84
111
  */
85
- async invokeExternalPackageFunction(namespacedFunction, data, wire) {
112
+ async invokeAddonFunction(namespacedFunction, data, wire) {
86
113
  // Resolve namespace to package name
87
114
  const resolved = resolveNamespace(namespacedFunction);
88
115
  if (!resolved) {
89
116
  throw new Error(`Unknown namespace in function reference: ${namespacedFunction}. ` +
90
- `Make sure the package is registered in externalPackages config.`);
117
+ `Make sure the package is registered in addons config.`);
91
118
  }
92
- // Get the function meta from the external package
93
- // External packages use function meta, not RPC meta
94
- const externalFunctionMeta = pikkuState(resolved.package, 'function', 'meta');
95
- const funcMeta = externalFunctionMeta[resolved.function];
119
+ // Get the function meta from the addon package
120
+ // Addon packages use function meta, not RPC meta
121
+ const addonFunctionMeta = pikkuState(resolved.package, 'function', 'meta');
122
+ const funcMeta = addonFunctionMeta[resolved.function];
96
123
  if (!funcMeta) {
97
124
  throw new Error(`Function '${resolved.function}' not found in package '${resolved.package}'. ` +
98
- `Available functions: ${Object.keys(externalFunctionMeta).join(', ') || '(none)'}`);
125
+ `Available functions: ${Object.keys(addonFunctionMeta).join(', ') || '(none)'}`);
99
126
  }
100
- const funcName = funcMeta.pikkuFuncName || resolved.function;
101
- // Execute the function using runPikkuFunc with the external package's state
102
- // We use the parent services (this.services) since external packages share services
127
+ const funcName = funcMeta.pikkuFuncId || resolved.function;
128
+ const addonConfig = pikkuState(null, 'rpc', 'addons').get(resolved.namespace);
129
+ const auth = addonConfig?.auth ?? this.options.requiresAuth;
130
+ const tags = [...(addonConfig?.tags ?? []), ...(funcMeta.tags ?? [])];
131
+ // Execute the function using runPikkuFunc with the addon package's state
132
+ // We use the parent services (this.services) since addon packages share services
103
133
  // Pass the function's tags so tag-based middleware/permissions are applied
104
134
  return runPikkuFunc('rpc', namespacedFunction, funcName, {
105
- auth: this.options.requiresAuth,
135
+ auth,
106
136
  singletonServices: this.services,
107
137
  data: () => data,
108
138
  wire,
109
139
  packageName: resolved.package,
110
- tags: funcMeta.tags,
140
+ tags,
111
141
  });
112
142
  }
113
143
  async rpcWithWire(rpcName, data, wire) {
@@ -130,26 +160,142 @@ export class ContextAwareRPCService {
130
160
  wire: mergedWire,
131
161
  });
132
162
  }
133
- async startWorkflow(workflowName, input) {
163
+ async startWorkflow(workflowName, input, options) {
134
164
  if (!this.services.workflowService) {
135
165
  throw new Error('WorkflowService service not available');
136
166
  }
137
- return this.services.workflowService.startWorkflow(workflowName, input, this);
167
+ const parentRunId = this.wire.workflowStep?.runId ?? this.wire.graph?.runId;
168
+ const wire = options?.wire ?? {
169
+ type: this.wire.wireType ?? 'unknown',
170
+ id: this.wire.wireId,
171
+ ...(parentRunId ? { parentRunId } : {}),
172
+ };
173
+ return this.services.workflowService.startWorkflow(workflowName, input, wire, this, options);
174
+ }
175
+ get agent() {
176
+ return {
177
+ run: async (agentName, input) => {
178
+ const result = await runAIAgent(agentName, input, {
179
+ sessionService: this.options.sessionService,
180
+ });
181
+ return {
182
+ runId: result.runId,
183
+ result: result.object ?? result.text,
184
+ usage: result.usage,
185
+ };
186
+ },
187
+ stream: async (agentName, input, options) => {
188
+ const channel = this.wire.channel;
189
+ if (!channel)
190
+ throw new Error('No channel available for streaming');
191
+ await streamAIAgent(agentName, input, channel, { sessionService: this.options.sessionService }, undefined, options);
192
+ },
193
+ resume: async (runId, input, options) => {
194
+ const channel = this.wire.channel;
195
+ if (!channel)
196
+ throw new Error('No channel available for streaming');
197
+ await resumeAIAgent({ runId, ...input }, channel, { sessionService: this.options.sessionService }, options);
198
+ },
199
+ approve: async (runId, approvals, expectedAgentName) => {
200
+ if (!this.services.aiRunState)
201
+ throw new Error('AIRunStateService not available');
202
+ return approveAIAgent(this.services.aiRunState, runId, approvals, expectedAgentName);
203
+ },
204
+ };
205
+ }
206
+ async remote(funcName, data) {
207
+ let endpoint;
208
+ const headers = {
209
+ 'Content-Type': 'application/json',
210
+ };
211
+ const colonIndex = funcName.indexOf(':');
212
+ if (colonIndex !== -1) {
213
+ const namespace = funcName.substring(0, colonIndex);
214
+ const addons = pikkuState(null, 'rpc', 'addons');
215
+ const pkgConfig = addons.get(namespace);
216
+ endpoint = pkgConfig?.rpcEndpoint;
217
+ }
218
+ if (!endpoint && this.services.deploymentService) {
219
+ const deployments = await this.services.deploymentService.findFunction(funcName);
220
+ if (deployments.length > 0) {
221
+ endpoint = deployments[0].endpoint;
222
+ }
223
+ }
224
+ if (!endpoint) {
225
+ throw new Error(`No endpoint configured for remote RPC: ${funcName}. ` +
226
+ `Configure rpcEndpoint in addons config or set up a DeploymentService.`);
227
+ }
228
+ let secret;
229
+ if (this.services.secrets) {
230
+ try {
231
+ secret = await this.services.secrets.getSecret('PIKKU_REMOTE_SECRET');
232
+ }
233
+ catch { }
234
+ }
235
+ if (secret) {
236
+ if (!this.services.jwt) {
237
+ throw new Error('PIKKU_REMOTE_SECRET is set but JWT service is not available');
238
+ }
239
+ const session = this.wire.getSession && typeof this.wire.getSession === 'function'
240
+ ? await this.wire.getSession()
241
+ : this.wire.session;
242
+ const sessionEnc = session
243
+ ? await encryptJSON(secret, { session })
244
+ : undefined;
245
+ const token = await this.services.jwt.encode({ value: 5, unit: 'minute' }, {
246
+ aud: 'pikku-remote',
247
+ fn: funcName,
248
+ iat: Date.now(),
249
+ session: sessionEnc,
250
+ });
251
+ headers.Authorization = `Bearer ${token}`;
252
+ }
253
+ const url = `${endpoint}/rpc/${encodeURIComponent(funcName)}`;
254
+ const timeoutMs = 30_000;
255
+ const response = await fetch(url, {
256
+ method: 'POST',
257
+ headers,
258
+ body: JSON.stringify({ data }),
259
+ signal: AbortSignal.timeout(timeoutMs),
260
+ });
261
+ if (!response.ok) {
262
+ let errorBody;
263
+ try {
264
+ errorBody = JSON.stringify(await response.json());
265
+ }
266
+ catch {
267
+ errorBody = await response.text();
268
+ }
269
+ throw new Error(`Remote RPC call failed: ${response.status} ${response.statusText}. ${errorBody}`);
270
+ }
271
+ try {
272
+ return (await response.json());
273
+ }
274
+ catch {
275
+ const text = await response.text();
276
+ throw new Error(`Remote RPC call returned non-JSON response: ${response.status} ${response.statusText}. ${text}`);
277
+ }
138
278
  }
139
279
  }
140
280
  // RPC Service class for the global interface
141
281
  export class PikkuRPCService {
142
282
  // Convenience function for initializing
143
- getContextRPCService(services, wire, requiresAuth, depth = 0) {
144
- const serviceRPC = new ContextAwareRPCService(services, wire, {
145
- requiresAuth,
146
- });
283
+ getContextRPCService(services, wire, requiresAuthOrOptions, depth = 0) {
284
+ const options = typeof requiresAuthOrOptions === 'object' &&
285
+ requiresAuthOrOptions !== null
286
+ ? requiresAuthOrOptions
287
+ : { requiresAuth: requiresAuthOrOptions };
288
+ const serviceRPC = new ContextAwareRPCService(services, wire, options);
147
289
  return {
148
290
  depth,
149
291
  global: false,
150
292
  invoke: serviceRPC.rpc.bind(serviceRPC),
151
- invokeExposed: serviceRPC.rpc.bind(serviceRPC),
293
+ remote: serviceRPC.remote.bind(serviceRPC),
294
+ exposed: serviceRPC.rpcExposed.bind(serviceRPC),
152
295
  startWorkflow: serviceRPC.startWorkflow.bind(serviceRPC),
296
+ get agent() {
297
+ return serviceRPC.agent;
298
+ },
153
299
  rpcWithWire: serviceRPC.rpcWithWire.bind(serviceRPC),
154
300
  };
155
301
  }
@@ -1,12 +1,27 @@
1
- export type PikkuRPC<invoke extends Function = any> = {
1
+ export type PikkuRPC<Invoke extends Function = any, Remote extends Function = any, startWorkflow extends Function = any, AgentRun extends Function = any, AgentStream extends Function = any> = {
2
2
  depth: number;
3
3
  global: boolean;
4
- invoke: invoke;
4
+ invoke: Invoke;
5
+ remote: Remote;
6
+ exposed: (name: string, data: any) => Promise<any>;
7
+ startWorkflow: startWorkflow;
8
+ agent: {
9
+ run: AgentRun;
10
+ stream: AgentStream;
11
+ resume: (runId: string, input: {
12
+ toolCallId: string;
13
+ approved: boolean;
14
+ }, options?: any) => Promise<void>;
15
+ approve: (runId: string, approvals: {
16
+ toolCallId: string;
17
+ approved: boolean;
18
+ }[], expectedAgentName?: string) => Promise<any>;
19
+ };
5
20
  };
6
21
  export type RPCMeta = {
7
- pikkuFuncName: string;
22
+ pikkuFuncId: string;
8
23
  expose: boolean;
9
- internal?: boolean;
24
+ remote?: boolean;
10
25
  };
11
26
  /**
12
27
  * Type for RPC handlers
@@ -19,6 +34,7 @@ export interface RPCHandler<Input, Output> {
19
34
  * Resolved function reference from namespace
20
35
  */
21
36
  export interface ResolvedFunction {
37
+ namespace: string;
22
38
  package: string;
23
39
  function: string;
24
40
  }
@@ -0,0 +1,10 @@
1
+ export type WireAddonConfig = {
2
+ name: string;
3
+ package: string;
4
+ rpcEndpoint?: string;
5
+ auth?: boolean;
6
+ tags?: string[];
7
+ secretOverrides?: Record<string, string>;
8
+ variableOverrides?: Record<string, string>;
9
+ };
10
+ export declare const wireAddon: (config: WireAddonConfig) => void;
@@ -0,0 +1,9 @@
1
+ import { pikkuState } from '../../pikku-state.js';
2
+ export const wireAddon = (config) => {
3
+ pikkuState(null, 'rpc', 'addons').set(config.name, {
4
+ package: config.package,
5
+ rpcEndpoint: config.rpcEndpoint,
6
+ auth: config.auth,
7
+ tags: config.tags,
8
+ });
9
+ };
@@ -1,3 +1,3 @@
1
- export * from './scheduler.types.js';
2
1
  export { runScheduledTask, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
3
- export * from './log-schedulers.js';
2
+ export { logSchedulers } from './log-schedulers.js';
3
+ export type { CoreScheduledTask, ScheduledTasksMeta, PikkuScheduledTask, } from './scheduler.types.js';
@@ -1,3 +1,2 @@
1
- export * from './scheduler.types.js';
2
1
  export { runScheduledTask, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
3
- export * from './log-schedulers.js';
2
+ export { logSchedulers } from './log-schedulers.js';
@@ -1,4 +1,4 @@
1
- import { Logger } from '../../services/index.js';
1
+ import type { Logger } from '../../services/index.js';
2
2
  /**
3
3
  * Logs all the loaded scheduled tasks.
4
4
  * @param logger - A logger for logging information.
@@ -1,12 +1,10 @@
1
- import { type CoreServices, type CoreSingletonServices, type CoreUserSession, type CreateWireServices } from '../../types/core.types.js';
1
+ import type { CoreUserSession } from '../../types/core.types.js';
2
2
  import type { CoreScheduledTask } from './scheduler.types.js';
3
- import { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
3
+ import type { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
4
4
  export type RunScheduledTasksParams = {
5
5
  name: string;
6
6
  session?: CoreUserSession;
7
- singletonServices: CoreSingletonServices;
8
- createWireServices?: CreateWireServices<CoreSingletonServices, CoreServices<CoreSingletonServices>, CoreUserSession>;
9
7
  };
10
8
  export declare const wireScheduler: <PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunctionSessionless<void, void>>>(scheduledTask: CoreScheduledTask<PikkuFunctionConfig>) => void;
11
- export declare function runScheduledTask({ name, session, singletonServices, createWireServices, }: RunScheduledTasksParams): Promise<void>;
9
+ export declare function runScheduledTask({ name, session, }: RunScheduledTasksParams): Promise<void>;
12
10
  export declare const getScheduledTasks: () => Map<string, CoreScheduledTask>;
@@ -1,15 +1,15 @@
1
1
  import { getErrorResponse, PikkuError } from '../../errors/error-handler.js';
2
- import { closeWireServices } from '../../utils.js';
3
- import { pikkuState } from '../../pikku-state.js';
2
+ import { PikkuMissingMetaError } from '../../errors/errors.js';
3
+ import { getSingletonServices, getCreateWireServices, pikkuState, } from '../../pikku-state.js';
4
4
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js';
5
- import { PikkuSessionService } from '../../services/user-session-service.js';
5
+ import { PikkuSessionService, createMiddlewareSessionWireProps, } from '../../services/user-session-service.js';
6
6
  export const wireScheduler = (scheduledTask) => {
7
7
  const meta = pikkuState(null, 'scheduler', 'meta');
8
8
  const taskMeta = meta[scheduledTask.name];
9
9
  if (!taskMeta) {
10
- throw new Error('Task metadata not found');
10
+ throw new PikkuMissingMetaError(`Missing generated metadata for scheduled task '${scheduledTask.name}'`);
11
11
  }
12
- addFunction(taskMeta.pikkuFuncName, {
12
+ addFunction(taskMeta.pikkuFuncId, {
13
13
  func: scheduledTask.func.func,
14
14
  auth: scheduledTask.func.auth,
15
15
  permissions: scheduledTask.func.permissions,
@@ -33,8 +33,9 @@ class ScheduledTaskSkippedError extends PikkuError {
33
33
  this.name = 'ScheduledTaskSkippedError';
34
34
  }
35
35
  }
36
- export async function runScheduledTask({ name, session, singletonServices, createWireServices, }) {
37
- let wireServices;
36
+ export async function runScheduledTask({ name, session, }) {
37
+ const singletonServices = getSingletonServices();
38
+ const createWireServices = getCreateWireServices();
38
39
  const task = pikkuState(null, 'scheduler', 'tasks').get(name);
39
40
  const meta = pikkuState(null, 'scheduler', 'meta')[name];
40
41
  const userSession = new PikkuSessionService();
@@ -57,11 +58,11 @@ export async function runScheduledTask({ name, session, singletonServices, creat
57
58
  throw new ScheduledTaskSkippedError(name, reason);
58
59
  },
59
60
  },
60
- session: userSession,
61
+ ...createMiddlewareSessionWireProps(userSession),
61
62
  };
62
63
  try {
63
64
  singletonServices.logger.info(`Running schedule task: ${name} | schedule: ${task.schedule}`);
64
- await runPikkuFunc('scheduler', meta.name, meta.pikkuFuncName, {
65
+ await runPikkuFunc('scheduler', meta.name, meta.pikkuFuncId, {
65
66
  singletonServices,
66
67
  createWireServices,
67
68
  auth: false,
@@ -70,6 +71,7 @@ export async function runScheduledTask({ name, session, singletonServices, creat
70
71
  wireMiddleware: task.middleware,
71
72
  tags: task.tags,
72
73
  wire,
74
+ sessionService: userSession,
73
75
  });
74
76
  }
75
77
  catch (e) {
@@ -79,11 +81,6 @@ export async function runScheduledTask({ name, session, singletonServices, creat
79
81
  }
80
82
  throw e;
81
83
  }
82
- finally {
83
- if (wireServices) {
84
- await closeWireServices(singletonServices.logger, wireServices);
85
- }
86
- }
87
84
  }
88
85
  export const getScheduledTasks = () => {
89
86
  return pikkuState(null, 'scheduler', 'tasks');
@@ -1,5 +1,5 @@
1
- import { CoreUserSession, CorePikkuMiddleware, CommonWireMeta } from '../../types/core.types.js';
2
- import { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
1
+ import type { CoreUserSession, CorePikkuMiddleware, CommonWireMeta } from '../../types/core.types.js';
2
+ import type { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
3
3
  /**
4
4
  * Represents metadata for scheduled tasks, including title, schedule, and documentation.
5
5
  */
@@ -0,0 +1,3 @@
1
+ export { wireSecret } from './secret.types.js';
2
+ export type { CoreSecret, OAuth2CredentialConfig, SecretDefinitionMeta, SecretDefinitionsMeta, SecretDefinitions, } from './secret.types.js';
3
+ export { validateAndBuildSecretDefinitionsMeta } from './validate-secret-definitions.js';
@@ -0,0 +1,2 @@
1
+ export { wireSecret } from './secret.types.js';
2
+ export { validateAndBuildSecretDefinitionsMeta } from './validate-secret-definitions.js';
@@ -0,0 +1,27 @@
1
+ export type CoreSecret<T = unknown> = {
2
+ name: string;
3
+ displayName: string;
4
+ description?: string;
5
+ secretId: string;
6
+ schema: T;
7
+ };
8
+ export type OAuth2CredentialConfig = {
9
+ tokenSecretId: string;
10
+ authorizationUrl: string;
11
+ tokenUrl: string;
12
+ scopes: string[];
13
+ pkce?: boolean;
14
+ additionalParams?: Record<string, string>;
15
+ };
16
+ export type SecretDefinitionMeta = {
17
+ name: string;
18
+ displayName: string;
19
+ description?: string;
20
+ secretId: string;
21
+ schema?: Record<string, unknown> | string;
22
+ oauth2?: OAuth2CredentialConfig;
23
+ sourceFile?: string;
24
+ };
25
+ export type SecretDefinitionsMeta = Record<string, SecretDefinitionMeta>;
26
+ export type SecretDefinitions = SecretDefinitionMeta[];
27
+ export declare const wireSecret: <T>(_config: CoreSecret<T>) => void;
@@ -0,0 +1 @@
1
+ export const wireSecret = (_config) => { };
@@ -0,0 +1,6 @@
1
+ import type { SecretDefinitions, SecretDefinitionsMeta } from './secret.types.js';
2
+ export interface SchemaRefLike {
3
+ variableName: string;
4
+ sourceFile: string;
5
+ }
6
+ export declare function validateAndBuildSecretDefinitionsMeta(definitions: SecretDefinitions, schemaLookup: Map<string, SchemaRefLike>): SecretDefinitionsMeta;
@@ -0,0 +1,55 @@
1
+ export function validateAndBuildSecretDefinitionsMeta(definitions, schemaLookup) {
2
+ const meta = {};
3
+ const secretIdToDefinition = new Map();
4
+ for (const def of definitions) {
5
+ const existingDef = secretIdToDefinition.get(def.secretId);
6
+ if (existingDef) {
7
+ if (def.schema && existingDef.schema) {
8
+ const defSchemaRef = schemaLookup.get(def.schema);
9
+ const existingSchemaRef = schemaLookup.get(existingDef.schema);
10
+ if (defSchemaRef && existingSchemaRef) {
11
+ if (defSchemaRef.variableName !== existingSchemaRef.variableName ||
12
+ defSchemaRef.sourceFile !== existingSchemaRef.sourceFile) {
13
+ throw new Error(`Secret '${def.secretId}' is defined with different schemas.\n` +
14
+ ` First definition: ${existingDef.sourceFile} (schema: ${existingSchemaRef.variableName})\n` +
15
+ ` Second definition: ${def.sourceFile} (schema: ${defSchemaRef.variableName})\n` +
16
+ `Credentials sharing a secretId must use the same schema.`);
17
+ }
18
+ }
19
+ }
20
+ if (def.oauth2 && existingDef.oauth2) {
21
+ if (JSON.stringify(def.oauth2) !== JSON.stringify(existingDef.oauth2)) {
22
+ throw new Error(`OAuth2 secret '${def.secretId}' is defined with different configurations.\n` +
23
+ ` First definition: ${existingDef.sourceFile}\n` +
24
+ ` Second definition: ${def.sourceFile}\n` +
25
+ `Credentials sharing a secretId must use the same configuration.`);
26
+ }
27
+ }
28
+ if (!meta[def.name]) {
29
+ meta[def.name] = {
30
+ name: def.name,
31
+ displayName: def.displayName,
32
+ description: def.description,
33
+ secretId: def.secretId,
34
+ schema: def.schema,
35
+ oauth2: def.oauth2,
36
+ sourceFile: def.sourceFile,
37
+ };
38
+ }
39
+ continue;
40
+ }
41
+ secretIdToDefinition.set(def.secretId, def);
42
+ if (!meta[def.name]) {
43
+ meta[def.name] = {
44
+ name: def.name,
45
+ displayName: def.displayName,
46
+ description: def.description,
47
+ secretId: def.secretId,
48
+ schema: def.schema,
49
+ oauth2: def.oauth2,
50
+ sourceFile: def.sourceFile,
51
+ };
52
+ }
53
+ }
54
+ return meta;
55
+ }
@@ -1,2 +1,3 @@
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 { TriggerMeta, TriggerSourceMeta, CorePikkuTriggerFunction, CorePikkuTriggerFunctionConfig, CoreTrigger, PikkuTrigger, } from './trigger.types.js';
@@ -1,2 +1,2 @@
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';
@@ -0,0 +1,22 @@
1
+ import type { TriggerInstance } from './trigger.types.js';
2
+ import type { TriggerService } from '../../services/trigger-service.js';
3
+ export type TriggerTarget = {
4
+ targetType: 'rpc' | 'workflow';
5
+ targetName: string;
6
+ startNode?: string;
7
+ };
8
+ export type TriggerSourceInfo = {
9
+ name: string;
10
+ input: unknown;
11
+ };
12
+ export declare abstract class PikkuTriggerService implements TriggerService {
13
+ protected activeTriggers: Map<string, TriggerInstance>;
14
+ abstract start(): Promise<void>;
15
+ stop(): Promise<void>;
16
+ protected getTriggerTargets(): Map<string, TriggerTarget[]>;
17
+ protected getTriggerSources(): Map<string, {
18
+ input?: unknown;
19
+ }>;
20
+ protected setupTriggerInstance(name: string, input: unknown, onTrigger: (data: unknown) => Promise<void>): Promise<TriggerInstance>;
21
+ protected onTriggerFire(triggerName: string, targets: TriggerTarget[], data: unknown): Promise<void>;
22
+ }