@pikku/core 0.11.2 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/CHANGELOG.md +33 -2
  2. package/dist/crypto-utils.d.ts +2 -0
  3. package/dist/crypto-utils.js +78 -0
  4. package/dist/errors/errors.d.ts +8 -0
  5. package/dist/errors/errors.js +16 -0
  6. package/dist/errors/index.d.ts +0 -1
  7. package/dist/errors/index.js +0 -1
  8. package/dist/function/function-runner.d.ts +7 -1
  9. package/dist/function/function-runner.js +82 -23
  10. package/dist/function/functions.types.d.ts +31 -87
  11. package/dist/function/functions.types.js +16 -46
  12. package/dist/function/index.d.ts +2 -2
  13. package/dist/function/index.js +1 -2
  14. package/dist/handle-error.js +1 -10
  15. package/dist/index.d.ts +28 -26
  16. package/dist/index.js +18 -29
  17. package/dist/middleware/auth-apikey.d.ts +2 -2
  18. package/dist/middleware/auth-apikey.js +3 -3
  19. package/dist/middleware/auth-bearer.d.ts +2 -2
  20. package/dist/middleware/auth-bearer.js +3 -6
  21. package/dist/middleware/auth-cookie.d.ts +2 -2
  22. package/dist/middleware/auth-cookie.js +6 -8
  23. package/dist/middleware/cors.d.ts +46 -0
  24. package/dist/middleware/cors.js +73 -0
  25. package/dist/middleware/index.d.ts +5 -3
  26. package/dist/middleware/index.js +5 -3
  27. package/dist/middleware/remote-auth.d.ts +5 -0
  28. package/dist/middleware/remote-auth.js +55 -0
  29. package/dist/middleware/timeout.d.ts +2 -2
  30. package/dist/middleware-runner.js +8 -10
  31. package/dist/permissions.js +11 -15
  32. package/dist/pikku-state.d.ts +1 -0
  33. package/dist/pikku-state.js +18 -8
  34. package/dist/schema.js +12 -11
  35. package/dist/services/ai-agent-runner-service.d.ts +24 -0
  36. package/dist/services/ai-agent-runner-service.js +1 -0
  37. package/dist/services/ai-run-state-service.d.ts +13 -0
  38. package/dist/services/ai-run-state-service.js +1 -0
  39. package/dist/services/ai-storage-service.d.ts +18 -0
  40. package/dist/services/ai-storage-service.js +1 -0
  41. package/dist/services/deployment-service.d.ts +19 -0
  42. package/dist/services/deployment-service.js +1 -0
  43. package/dist/services/gopass-secrets.d.ts +47 -0
  44. package/dist/services/gopass-secrets.js +94 -0
  45. package/dist/services/in-memory-trigger-service.d.ts +23 -0
  46. package/dist/services/in-memory-trigger-service.js +50 -0
  47. package/dist/services/in-memory-workflow-service.d.ts +59 -0
  48. package/dist/services/in-memory-workflow-service.js +287 -0
  49. package/dist/services/index.d.ts +25 -11
  50. package/dist/services/index.js +10 -13
  51. package/dist/services/local-secrets.d.ts +23 -0
  52. package/dist/services/local-secrets.js +45 -0
  53. package/dist/services/local-variables.d.ts +5 -0
  54. package/dist/services/local-variables.js +18 -0
  55. package/dist/services/scheduler-service.d.ts +21 -1
  56. package/dist/services/scheduler-service.js +14 -0
  57. package/dist/services/schema-service.d.ts +6 -0
  58. package/dist/services/scoped-secret-service.d.ts +16 -0
  59. package/dist/services/scoped-secret-service.js +35 -0
  60. package/dist/services/secret-service.d.ts +25 -4
  61. package/dist/services/trigger-service.d.ts +23 -0
  62. package/dist/services/trigger-service.js +1 -0
  63. package/dist/services/typed-secret-service.d.ts +30 -0
  64. package/dist/services/typed-secret-service.js +40 -0
  65. package/dist/services/typed-variables-service.d.ts +27 -0
  66. package/dist/services/typed-variables-service.js +46 -0
  67. package/dist/services/user-session-service.d.ts +13 -0
  68. package/dist/services/user-session-service.js +17 -0
  69. package/dist/services/variables-service.d.ts +5 -0
  70. package/dist/services/workflow-service.d.ts +9 -4
  71. package/dist/types/core.types.d.ts +48 -12
  72. package/dist/types/core.types.js +8 -1
  73. package/dist/types/state.types.d.ts +43 -51
  74. package/dist/utils.d.ts +3 -2
  75. package/dist/utils.js +15 -3
  76. package/dist/version.d.ts +6 -0
  77. package/dist/version.js +19 -0
  78. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
  79. package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
  80. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
  81. package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
  82. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +60 -0
  83. package/dist/wirings/ai-agent/ai-agent-prepare.js +312 -0
  84. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
  85. package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
  86. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
  87. package/dist/wirings/ai-agent/ai-agent-runner.js +96 -0
  88. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +11 -0
  89. package/dist/wirings/ai-agent/ai-agent-stream.js +503 -0
  90. package/dist/wirings/ai-agent/ai-agent.types.d.ts +254 -0
  91. package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
  92. package/dist/wirings/ai-agent/index.d.ts +5 -0
  93. package/dist/wirings/ai-agent/index.js +4 -0
  94. package/dist/wirings/channel/channel-common.d.ts +7 -4
  95. package/dist/wirings/channel/channel-common.js +15 -8
  96. package/dist/wirings/channel/channel-handler.js +12 -3
  97. package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
  98. package/dist/wirings/channel/channel-middleware-runner.js +73 -0
  99. package/dist/wirings/channel/channel-runner.js +7 -7
  100. package/dist/wirings/channel/channel.types.d.ts +5 -1
  101. package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
  102. package/dist/wirings/channel/define-channel-routes.js +23 -0
  103. package/dist/wirings/channel/index.d.ts +10 -8
  104. package/dist/wirings/channel/index.js +7 -8
  105. package/dist/wirings/channel/local/index.d.ts +3 -3
  106. package/dist/wirings/channel/local/index.js +3 -3
  107. package/dist/wirings/channel/local/local-channel-runner.js +18 -6
  108. package/dist/wirings/channel/serverless/index.d.ts +1 -1
  109. package/dist/wirings/channel/serverless/index.js +1 -1
  110. package/dist/wirings/channel/serverless/serverless-channel-runner.js +15 -4
  111. package/dist/wirings/cli/channel/index.d.ts +1 -1
  112. package/dist/wirings/cli/channel/index.js +1 -1
  113. package/dist/wirings/cli/cli-runner.d.ts +1 -1
  114. package/dist/wirings/cli/cli-runner.js +12 -8
  115. package/dist/wirings/cli/cli.types.d.ts +6 -6
  116. package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
  117. package/dist/wirings/cli/define-cli-commands.js +20 -0
  118. package/dist/wirings/cli/index.d.ts +2 -3
  119. package/dist/wirings/cli/index.js +1 -3
  120. package/dist/wirings/http/http-routes.d.ts +69 -0
  121. package/dist/wirings/http/http-routes.js +139 -0
  122. package/dist/wirings/http/http-runner.js +49 -23
  123. package/dist/wirings/http/http.types.d.ts +78 -38
  124. package/dist/wirings/http/index.d.ts +5 -4
  125. package/dist/wirings/http/index.js +4 -3
  126. package/dist/wirings/mcp/index.d.ts +4 -3
  127. package/dist/wirings/mcp/index.js +3 -3
  128. package/dist/wirings/mcp/mcp-runner.d.ts +1 -3
  129. package/dist/wirings/mcp/mcp-runner.js +25 -39
  130. package/dist/wirings/mcp/mcp.types.d.ts +3 -3
  131. package/dist/wirings/node/index.d.ts +2 -0
  132. package/dist/wirings/node/index.js +1 -0
  133. package/dist/wirings/node/node.types.d.ts +20 -0
  134. package/dist/wirings/node/node.types.js +1 -0
  135. package/dist/wirings/oauth2/index.d.ts +3 -0
  136. package/dist/wirings/oauth2/index.js +2 -0
  137. package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
  138. package/dist/wirings/oauth2/oauth2-client.js +267 -0
  139. package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
  140. package/dist/wirings/oauth2/oauth2.types.js +4 -0
  141. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
  142. package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
  143. package/dist/wirings/queue/index.d.ts +2 -2
  144. package/dist/wirings/queue/index.js +1 -1
  145. package/dist/wirings/queue/queue-runner.d.ts +7 -0
  146. package/dist/wirings/queue/queue-runner.js +17 -6
  147. package/dist/wirings/queue/queue.types.d.ts +8 -2
  148. package/dist/wirings/rpc/index.d.ts +1 -1
  149. package/dist/wirings/rpc/index.js +1 -1
  150. package/dist/wirings/rpc/rpc-runner.d.ts +33 -5
  151. package/dist/wirings/rpc/rpc-runner.js +134 -16
  152. package/dist/wirings/rpc/rpc-types.d.ts +8 -4
  153. package/dist/wirings/scheduler/index.d.ts +3 -3
  154. package/dist/wirings/scheduler/index.js +2 -3
  155. package/dist/wirings/scheduler/scheduler-runner.d.ts +5 -0
  156. package/dist/wirings/scheduler/scheduler-runner.js +23 -5
  157. package/dist/wirings/secret/index.d.ts +3 -0
  158. package/dist/wirings/secret/index.js +2 -0
  159. package/dist/wirings/secret/secret.types.d.ts +27 -0
  160. package/dist/wirings/secret/secret.types.js +1 -0
  161. package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
  162. package/dist/wirings/secret/validate-secret-definitions.js +55 -0
  163. package/dist/wirings/trigger/index.d.ts +3 -2
  164. package/dist/wirings/trigger/index.js +2 -2
  165. package/dist/wirings/trigger/pikku-trigger-service.d.ts +26 -0
  166. package/dist/wirings/trigger/pikku-trigger-service.js +75 -0
  167. package/dist/wirings/trigger/trigger-runner.d.ts +21 -8
  168. package/dist/wirings/trigger/trigger-runner.js +46 -18
  169. package/dist/wirings/trigger/trigger.types.d.ts +99 -11
  170. package/dist/wirings/trigger/trigger.types.js +40 -1
  171. package/dist/wirings/variable/index.d.ts +3 -0
  172. package/dist/wirings/variable/index.js +2 -0
  173. package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
  174. package/dist/wirings/variable/validate-variable-definitions.js +45 -0
  175. package/dist/wirings/variable/variable.types.d.ts +18 -0
  176. package/dist/wirings/variable/variable.types.js +1 -0
  177. package/dist/wirings/workflow/dsl/index.d.ts +1 -1
  178. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +7 -1
  179. package/dist/wirings/workflow/dsl/workflow-runner.js +3 -2
  180. package/dist/wirings/workflow/graph/graph-node.d.ts +1 -6
  181. package/dist/wirings/workflow/graph/graph-runner.d.ts +5 -31
  182. package/dist/wirings/workflow/graph/graph-runner.js +384 -296
  183. package/dist/wirings/workflow/graph/index.d.ts +4 -3
  184. package/dist/wirings/workflow/graph/index.js +3 -3
  185. package/dist/wirings/workflow/graph/template.d.ts +15 -0
  186. package/dist/wirings/workflow/graph/template.js +27 -0
  187. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
  188. package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
  189. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +0 -13
  190. package/dist/wirings/workflow/index.d.ts +6 -6
  191. package/dist/wirings/workflow/index.js +6 -4
  192. package/dist/wirings/workflow/pikku-workflow-service.d.ts +28 -14
  193. package/dist/wirings/workflow/pikku-workflow-service.js +200 -56
  194. package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
  195. package/dist/wirings/workflow/workflow-helpers.js +38 -0
  196. package/dist/wirings/workflow/workflow-utils.d.ts +1 -23
  197. package/dist/wirings/workflow/workflow-utils.js +1 -66
  198. package/dist/wirings/workflow/workflow.types.d.ts +40 -93
  199. package/package.json +13 -15
  200. package/run-tests.sh +4 -1
  201. package/src/crypto-utils.ts +99 -0
  202. package/src/errors/errors.ts +17 -0
  203. package/src/errors/index.ts +0 -1
  204. package/src/factory-functions.test.ts +42 -2
  205. package/src/function/function-runner.test.ts +4 -11
  206. package/src/function/function-runner.ts +114 -29
  207. package/src/function/functions.types.ts +62 -132
  208. package/src/function/index.ts +5 -2
  209. package/src/handle-error.ts +2 -10
  210. package/src/index.ts +99 -25
  211. package/src/middleware/auth-apikey.test.ts +15 -12
  212. package/src/middleware/auth-apikey.ts +3 -3
  213. package/src/middleware/auth-bearer.test.ts +17 -14
  214. package/src/middleware/auth-bearer.ts +25 -27
  215. package/src/middleware/auth-cookie.test.ts +16 -13
  216. package/src/middleware/auth-cookie.ts +6 -8
  217. package/src/middleware/cors.ts +96 -0
  218. package/src/middleware/index.ts +5 -3
  219. package/src/middleware/remote-auth.ts +68 -0
  220. package/src/middleware-runner.test.ts +122 -0
  221. package/src/middleware-runner.ts +12 -12
  222. package/src/permissions.test.ts +81 -7
  223. package/src/permissions.ts +15 -17
  224. package/src/pikku-state.ts +20 -8
  225. package/src/run-tests-script.test.ts +49 -0
  226. package/src/schema.ts +18 -15
  227. package/src/services/ai-agent-runner-service.ts +29 -0
  228. package/src/services/ai-run-state-service.ts +20 -0
  229. package/src/services/ai-storage-service.ts +39 -0
  230. package/src/services/deployment-service.ts +22 -0
  231. package/src/services/gopass-secrets.ts +95 -0
  232. package/src/services/in-memory-trigger-service.ts +68 -0
  233. package/src/services/in-memory-workflow-service.ts +395 -0
  234. package/src/services/index.ts +49 -14
  235. package/src/services/local-secrets.ts +51 -0
  236. package/src/services/local-variables.ts +22 -0
  237. package/src/services/scheduler-service.ts +29 -1
  238. package/src/services/schema-service.ts +7 -0
  239. package/src/services/scoped-secret-service.ts +41 -0
  240. package/src/services/secret-service.ts +25 -4
  241. package/src/services/trigger-service.ts +38 -0
  242. package/src/services/typed-secret-service.ts +70 -0
  243. package/src/services/typed-variables-service.ts +81 -0
  244. package/src/services/user-session-service.ts +23 -0
  245. package/src/services/variables-service.ts +5 -0
  246. package/src/services/workflow-service.ts +22 -2
  247. package/src/types/core.types.ts +76 -11
  248. package/src/types/state.types.ts +37 -63
  249. package/src/utils.ts +20 -6
  250. package/src/version.test.ts +80 -0
  251. package/src/version.ts +25 -0
  252. package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
  253. package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
  254. package/src/wirings/ai-agent/ai-agent-prepare.ts +470 -0
  255. package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
  256. package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
  257. package/src/wirings/ai-agent/ai-agent-runner.test.ts +75 -0
  258. package/src/wirings/ai-agent/ai-agent-runner.ts +137 -0
  259. package/src/wirings/ai-agent/ai-agent-stream.test.ts +246 -0
  260. package/src/wirings/ai-agent/ai-agent-stream.ts +774 -0
  261. package/src/wirings/ai-agent/ai-agent.types.ts +273 -0
  262. package/src/wirings/ai-agent/index.ts +28 -0
  263. package/src/wirings/channel/channel-common.ts +32 -19
  264. package/src/wirings/channel/channel-handler.ts +17 -4
  265. package/src/wirings/channel/channel-middleware-runner.ts +119 -0
  266. package/src/wirings/channel/channel-runner.ts +9 -10
  267. package/src/wirings/channel/channel.types.ts +17 -1
  268. package/src/wirings/channel/define-channel-routes.ts +25 -0
  269. package/src/wirings/channel/index.ts +23 -8
  270. package/src/wirings/channel/local/index.ts +3 -3
  271. package/src/wirings/channel/local/local-channel-runner.test.ts +44 -1
  272. package/src/wirings/channel/local/local-channel-runner.ts +22 -6
  273. package/src/wirings/channel/serverless/index.ts +5 -1
  274. package/src/wirings/channel/serverless/serverless-channel-runner.ts +20 -4
  275. package/src/wirings/cli/channel/index.ts +1 -1
  276. package/src/wirings/cli/cli-runner.test.ts +9 -9
  277. package/src/wirings/cli/cli-runner.ts +17 -10
  278. package/src/wirings/cli/cli.types.ts +11 -11
  279. package/src/wirings/cli/command-parser.test.ts +8 -8
  280. package/src/wirings/cli/define-cli-commands.ts +24 -0
  281. package/src/wirings/cli/index.ts +10 -4
  282. package/src/wirings/http/http-routes.test.ts +322 -0
  283. package/src/wirings/http/http-routes.ts +198 -0
  284. package/src/wirings/http/http-runner.test.ts +3 -3
  285. package/src/wirings/http/http-runner.ts +63 -29
  286. package/src/wirings/http/http.types.ts +121 -37
  287. package/src/wirings/http/index.ts +16 -4
  288. package/src/wirings/mcp/index.ts +27 -3
  289. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
  290. package/src/wirings/mcp/mcp-runner.ts +39 -50
  291. package/src/wirings/mcp/mcp.types.ts +3 -3
  292. package/src/wirings/node/index.ts +2 -0
  293. package/src/wirings/node/node.types.ts +23 -0
  294. package/src/wirings/oauth2/index.ts +3 -0
  295. package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
  296. package/src/wirings/oauth2/oauth2-client.ts +335 -0
  297. package/src/wirings/oauth2/oauth2.types.ts +69 -0
  298. package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
  299. package/src/wirings/queue/index.ts +14 -2
  300. package/src/wirings/queue/queue-runner.test.ts +97 -55
  301. package/src/wirings/queue/queue-runner.ts +33 -7
  302. package/src/wirings/queue/queue.types.ts +12 -2
  303. package/src/wirings/rpc/index.ts +1 -1
  304. package/src/wirings/rpc/rpc-runner.ts +187 -17
  305. package/src/wirings/rpc/rpc-types.ts +13 -4
  306. package/src/wirings/scheduler/index.ts +7 -4
  307. package/src/wirings/scheduler/scheduler-runner.test.ts +70 -26
  308. package/src/wirings/scheduler/scheduler-runner.ts +45 -5
  309. package/src/wirings/secret/index.ts +9 -0
  310. package/src/wirings/secret/secret.types.ts +32 -0
  311. package/src/wirings/secret/validate-secret-definitions.ts +82 -0
  312. package/src/wirings/trigger/index.ts +10 -2
  313. package/src/wirings/trigger/pikku-trigger-service.ts +134 -0
  314. package/src/wirings/trigger/trigger-runner.ts +80 -38
  315. package/src/wirings/trigger/trigger.types.ts +144 -22
  316. package/src/wirings/variable/index.ts +8 -0
  317. package/src/wirings/variable/validate-variable-definitions.ts +69 -0
  318. package/src/wirings/variable/variable.types.ts +22 -0
  319. package/src/wirings/workflow/dsl/index.ts +1 -0
  320. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +9 -1
  321. package/src/wirings/workflow/dsl/workflow-runner.ts +4 -3
  322. package/src/wirings/workflow/graph/graph-node.ts +1 -6
  323. package/src/wirings/workflow/graph/graph-runner.test.ts +495 -0
  324. package/src/wirings/workflow/graph/graph-runner.ts +496 -374
  325. package/src/wirings/workflow/graph/index.ts +14 -3
  326. package/src/wirings/workflow/graph/template.ts +42 -0
  327. package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
  328. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -22
  329. package/src/wirings/workflow/index.ts +21 -10
  330. package/src/wirings/workflow/pikku-workflow-service.test.ts +212 -0
  331. package/src/wirings/workflow/pikku-workflow-service.ts +285 -66
  332. package/src/wirings/workflow/workflow-helpers.ts +79 -0
  333. package/src/wirings/workflow/workflow-utils.ts +0 -120
  334. package/src/wirings/workflow/workflow.types.ts +45 -90
  335. package/tsconfig.tsbuildinfo +1 -1
  336. package/dist/wirings/forge-node/forge-node.types.d.ts +0 -120
  337. package/dist/wirings/forge-node/forge-node.types.js +0 -38
  338. package/dist/wirings/forge-node/index.d.ts +0 -1
  339. package/dist/wirings/forge-node/index.js +0 -1
  340. package/dist/wirings/workflow/wire-workflow.d.ts +0 -42
  341. package/dist/wirings/workflow/wire-workflow.js +0 -53
  342. package/src/wirings/forge-node/forge-node.types.ts +0 -135
  343. package/src/wirings/forge-node/index.ts +0 -1
  344. package/src/wirings/workflow/wire-workflow.ts +0 -94
@@ -1,6 +1,17 @@
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';
4
15
  /**
5
16
  * Resolve a namespaced function reference to package and function names
6
17
  * Uses pikkuState to look up the namespace -> package mapping
@@ -13,20 +24,26 @@ const resolveNamespace = (namespacedFunction) => {
13
24
  const namespace = namespacedFunction.substring(0, colonIndex);
14
25
  const functionName = namespacedFunction.substring(colonIndex + 1);
15
26
  const externalPackages = pikkuState(null, 'rpc', 'externalPackages');
16
- const packageName = externalPackages.get(namespace);
17
- if (!packageName) {
27
+ const pkgConfig = externalPackages.get(namespace);
28
+ if (!pkgConfig) {
18
29
  return null;
19
30
  }
20
31
  return {
21
- package: packageName,
32
+ package: pkgConfig.package,
22
33
  function: functionName,
23
34
  };
24
35
  };
25
36
  const getPikkuFunctionName = (rpcName) => {
26
37
  const rpc = pikkuState(null, 'rpc', 'meta');
27
- const rpcMeta = rpc[rpcName];
38
+ let rpcMeta = rpc[rpcName];
28
39
  if (!rpcMeta) {
29
- throw new Error(`RPC function not found: ${rpcName}`);
40
+ const { baseName, version } = parseVersionedId(rpcName);
41
+ if (version !== null) {
42
+ rpcMeta = rpc[baseName];
43
+ }
44
+ }
45
+ if (!rpcMeta) {
46
+ throw new RPCNotFoundError(rpcName);
30
47
  }
31
48
  return rpcMeta;
32
49
  };
@@ -41,7 +58,16 @@ export class ContextAwareRPCService {
41
58
  this.options = options;
42
59
  }
43
60
  async rpcExposed(funcName, data) {
44
- const functionMeta = pikkuState(null, 'function', 'meta')[funcName];
61
+ let functionMeta;
62
+ if (funcName.includes(':')) {
63
+ const resolved = resolveNamespace(funcName);
64
+ if (resolved) {
65
+ functionMeta = pikkuState(resolved.package, 'function', 'meta')[resolved.function];
66
+ }
67
+ }
68
+ else {
69
+ functionMeta = pikkuState(null, 'function', 'meta')[funcName];
70
+ }
45
71
  if (!functionMeta) {
46
72
  throw new Error(`Function not found: ${funcName}`);
47
73
  }
@@ -69,8 +95,6 @@ export class ContextAwareRPCService {
69
95
  // Main package function
70
96
  return runPikkuFunc('rpc', funcName, getPikkuFunctionName(funcName), {
71
97
  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
98
  singletonServices: this.services,
75
99
  data: () => data,
76
100
  wire: updatedWire,
@@ -97,7 +121,7 @@ export class ContextAwareRPCService {
97
121
  throw new Error(`Function '${resolved.function}' not found in package '${resolved.package}'. ` +
98
122
  `Available functions: ${Object.keys(externalFunctionMeta).join(', ') || '(none)'}`);
99
123
  }
100
- const funcName = funcMeta.pikkuFuncName || resolved.function;
124
+ const funcName = funcMeta.pikkuFuncId || resolved.function;
101
125
  // Execute the function using runPikkuFunc with the external package's state
102
126
  // We use the parent services (this.services) since external packages share services
103
127
  // Pass the function's tags so tag-based middleware/permissions are applied
@@ -130,26 +154,120 @@ export class ContextAwareRPCService {
130
154
  wire: mergedWire,
131
155
  });
132
156
  }
133
- async startWorkflow(workflowName, input) {
157
+ async startWorkflow(workflowName, input, options) {
134
158
  if (!this.services.workflowService) {
135
159
  throw new Error('WorkflowService service not available');
136
160
  }
137
- return this.services.workflowService.startWorkflow(workflowName, input, this);
161
+ const parentRunId = this.wire.workflowStep?.runId ?? this.wire.graph?.runId;
162
+ const wire = options?.wire ?? {
163
+ type: this.wire.wireType ?? 'unknown',
164
+ id: this.wire.wireId,
165
+ ...(parentRunId ? { parentRunId } : {}),
166
+ };
167
+ return this.services.workflowService.startWorkflow(workflowName, input, wire, this, options);
168
+ }
169
+ async agent(agentName, input) {
170
+ const result = await runAIAgent(agentName, input, {
171
+ singletonServices: this.services,
172
+ sessionService: this.options.sessionService,
173
+ });
174
+ return {
175
+ runId: result.runId,
176
+ result: result.object ?? result.text,
177
+ usage: result.usage,
178
+ };
179
+ }
180
+ async remote(funcName, data) {
181
+ let endpoint;
182
+ const headers = {
183
+ 'Content-Type': 'application/json',
184
+ };
185
+ const colonIndex = funcName.indexOf(':');
186
+ if (colonIndex !== -1) {
187
+ const namespace = funcName.substring(0, colonIndex);
188
+ const externalPackages = pikkuState(null, 'rpc', 'externalPackages');
189
+ const pkgConfig = externalPackages.get(namespace);
190
+ endpoint = pkgConfig?.rpcEndpoint;
191
+ }
192
+ if (!endpoint && this.services.deploymentService) {
193
+ const deployments = await this.services.deploymentService.findFunction(funcName);
194
+ if (deployments.length > 0) {
195
+ endpoint = deployments[0].endpoint;
196
+ }
197
+ }
198
+ if (!endpoint) {
199
+ throw new Error(`No endpoint configured for remote RPC: ${funcName}. ` +
200
+ `Configure rpcEndpoint in externalPackages config or set up a DeploymentService.`);
201
+ }
202
+ let secret;
203
+ if (this.services.secrets) {
204
+ try {
205
+ secret = await this.services.secrets.getSecret('PIKKU_REMOTE_SECRET');
206
+ }
207
+ catch { }
208
+ }
209
+ if (secret) {
210
+ if (!this.services.jwt) {
211
+ throw new Error('PIKKU_REMOTE_SECRET is set but JWT service is not available');
212
+ }
213
+ const session = this.wire.getSession && typeof this.wire.getSession === 'function'
214
+ ? await this.wire.getSession()
215
+ : this.wire.session;
216
+ const sessionEnc = session
217
+ ? await encryptJSON(secret, { session })
218
+ : undefined;
219
+ const token = await this.services.jwt.encode({ value: 5, unit: 'minute' }, {
220
+ aud: 'pikku-remote',
221
+ fn: funcName,
222
+ iat: Date.now(),
223
+ session: sessionEnc,
224
+ });
225
+ headers.Authorization = `Bearer ${token}`;
226
+ }
227
+ const url = `${endpoint}/rpc/${encodeURIComponent(funcName)}`;
228
+ const timeoutMs = 30_000;
229
+ const response = await fetch(url, {
230
+ method: 'POST',
231
+ headers,
232
+ body: JSON.stringify({ data }),
233
+ signal: AbortSignal.timeout(timeoutMs),
234
+ });
235
+ if (!response.ok) {
236
+ let errorBody;
237
+ try {
238
+ errorBody = JSON.stringify(await response.json());
239
+ }
240
+ catch {
241
+ errorBody = await response.text();
242
+ }
243
+ throw new Error(`Remote RPC call failed: ${response.status} ${response.statusText}. ${errorBody}`);
244
+ }
245
+ try {
246
+ return (await response.json());
247
+ }
248
+ catch {
249
+ const text = await response.text();
250
+ throw new Error(`Remote RPC call returned non-JSON response: ${response.status} ${response.statusText}. ${text}`);
251
+ }
138
252
  }
139
253
  }
140
254
  // RPC Service class for the global interface
141
255
  export class PikkuRPCService {
142
256
  // Convenience function for initializing
143
- getContextRPCService(services, wire, requiresAuth, depth = 0) {
144
- const serviceRPC = new ContextAwareRPCService(services, wire, {
145
- requiresAuth,
146
- });
257
+ getContextRPCService(services, wire, requiresAuthOrOptions, depth = 0) {
258
+ const options = typeof requiresAuthOrOptions === 'object' &&
259
+ requiresAuthOrOptions !== null
260
+ ? requiresAuthOrOptions
261
+ : { requiresAuth: requiresAuthOrOptions };
262
+ const serviceRPC = new ContextAwareRPCService(services, wire, options);
147
263
  return {
148
264
  depth,
149
265
  global: false,
150
266
  invoke: serviceRPC.rpc.bind(serviceRPC),
151
- invokeExposed: serviceRPC.rpc.bind(serviceRPC),
267
+ remote: serviceRPC.remote.bind(serviceRPC),
268
+ exposed: serviceRPC.rpcExposed.bind(serviceRPC),
152
269
  startWorkflow: serviceRPC.startWorkflow.bind(serviceRPC),
270
+ agent: serviceRPC.agent.bind(serviceRPC),
153
271
  rpcWithWire: serviceRPC.rpcWithWire.bind(serviceRPC),
154
272
  };
155
273
  }
@@ -1,12 +1,16 @@
1
- export type PikkuRPC<invoke extends Function = any> = {
1
+ export type PikkuRPC<Invoke extends Function = any, Remote extends Function = any, startWorkflow extends Function = any, Agent 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: Agent;
5
9
  };
6
10
  export type RPCMeta = {
7
- pikkuFuncName: string;
11
+ pikkuFuncId: string;
8
12
  expose: boolean;
9
- internal?: boolean;
13
+ remote?: boolean;
10
14
  };
11
15
  /**
12
16
  * Type for RPC handlers
@@ -1,3 +1,3 @@
1
- export * from './scheduler.types.js';
2
- export { runScheduledTask, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
3
- export * from './log-schedulers.js';
1
+ export { runScheduledTask, createSchedulerRuntimeHandlers, wireScheduler, getScheduledTasks, } from './scheduler-runner.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
- export { runScheduledTask, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
3
- export * from './log-schedulers.js';
1
+ export { runScheduledTask, createSchedulerRuntimeHandlers, wireScheduler, getScheduledTasks, } from './scheduler-runner.js';
2
+ export { logSchedulers } from './log-schedulers.js';
@@ -1,6 +1,7 @@
1
1
  import { type CoreServices, type CoreSingletonServices, type CoreUserSession, type CreateWireServices } from '../../types/core.types.js';
2
2
  import type { CoreScheduledTask } from './scheduler.types.js';
3
3
  import { CorePikkuFunctionConfig, CorePikkuFunctionSessionless } from '../../function/functions.types.js';
4
+ import { SchedulerRuntimeHandlers } from '../../services/scheduler-service.js';
4
5
  export type RunScheduledTasksParams = {
5
6
  name: string;
6
7
  session?: CoreUserSession;
@@ -10,3 +11,7 @@ export type RunScheduledTasksParams = {
10
11
  export declare const wireScheduler: <PikkuFunctionConfig extends CorePikkuFunctionConfig<CorePikkuFunctionSessionless<void, void>>>(scheduledTask: CoreScheduledTask<PikkuFunctionConfig>) => void;
11
12
  export declare function runScheduledTask({ name, session, singletonServices, createWireServices, }: RunScheduledTasksParams): Promise<void>;
12
13
  export declare const getScheduledTasks: () => Map<string, CoreScheduledTask>;
14
+ export declare const createSchedulerRuntimeHandlers: ({ singletonServices, createWireServices, }: {
15
+ singletonServices: CoreSingletonServices;
16
+ createWireServices?: CreateWireServices<CoreSingletonServices, CoreServices<CoreSingletonServices>, CoreUserSession>;
17
+ }) => SchedulerRuntimeHandlers;
@@ -1,15 +1,17 @@
1
1
  import { getErrorResponse, PikkuError } from '../../errors/error-handler.js';
2
+ import { PikkuMissingMetaError } from '../../errors/errors.js';
2
3
  import { closeWireServices } from '../../utils.js';
3
4
  import { pikkuState } from '../../pikku-state.js';
4
5
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js';
5
- import { PikkuSessionService } from '../../services/user-session-service.js';
6
+ import { PikkuSessionService, createMiddlewareSessionWireProps, } from '../../services/user-session-service.js';
7
+ import { rpcService } from '../rpc/rpc-runner.js';
6
8
  export const wireScheduler = (scheduledTask) => {
7
9
  const meta = pikkuState(null, 'scheduler', 'meta');
8
10
  const taskMeta = meta[scheduledTask.name];
9
11
  if (!taskMeta) {
10
- throw new Error('Task metadata not found');
12
+ throw new PikkuMissingMetaError(`Missing generated metadata for scheduled task '${scheduledTask.name}'`);
11
13
  }
12
- addFunction(taskMeta.pikkuFuncName, {
14
+ addFunction(taskMeta.pikkuFuncId, {
13
15
  func: scheduledTask.func.func,
14
16
  auth: scheduledTask.func.auth,
15
17
  permissions: scheduledTask.func.permissions,
@@ -57,11 +59,11 @@ export async function runScheduledTask({ name, session, singletonServices, creat
57
59
  throw new ScheduledTaskSkippedError(name, reason);
58
60
  },
59
61
  },
60
- session: userSession,
62
+ ...createMiddlewareSessionWireProps(userSession),
61
63
  };
62
64
  try {
63
65
  singletonServices.logger.info(`Running schedule task: ${name} | schedule: ${task.schedule}`);
64
- await runPikkuFunc('scheduler', meta.name, meta.pikkuFuncName, {
66
+ await runPikkuFunc('scheduler', meta.name, meta.pikkuFuncId, {
65
67
  singletonServices,
66
68
  createWireServices,
67
69
  auth: false,
@@ -70,6 +72,7 @@ export async function runScheduledTask({ name, session, singletonServices, creat
70
72
  wireMiddleware: task.middleware,
71
73
  tags: task.tags,
72
74
  wire,
75
+ sessionService: userSession,
73
76
  });
74
77
  }
75
78
  catch (e) {
@@ -88,3 +91,18 @@ export async function runScheduledTask({ name, session, singletonServices, creat
88
91
  export const getScheduledTasks = () => {
89
92
  return pikkuState(null, 'scheduler', 'tasks');
90
93
  };
94
+ export const createSchedulerRuntimeHandlers = ({ singletonServices, createWireServices, }) => {
95
+ return {
96
+ logger: singletonServices.logger,
97
+ invokeRPC: async (rpcName, data, session) => {
98
+ const wire = session ? { session } : {};
99
+ const rpc = rpcService.getContextRPCService(singletonServices, wire);
100
+ await rpc.invoke(rpcName, data);
101
+ },
102
+ runScheduledTask: async (name) => runScheduledTask({
103
+ name,
104
+ singletonServices,
105
+ createWireServices,
106
+ }),
107
+ };
108
+ };
@@ -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,26 @@
1
+ import { CoreSingletonServices, CreateWireServices, CoreServices, CoreUserSession } from '../../types/core.types.js';
2
+ import { TriggerInstance } from './trigger.types.js';
3
+ import { TriggerService } from '../../services/trigger-service.js';
4
+ export type TriggerTarget = {
5
+ targetType: 'rpc' | 'workflow';
6
+ targetName: string;
7
+ startNode?: string;
8
+ };
9
+ export type TriggerSourceInfo = {
10
+ name: string;
11
+ input: unknown;
12
+ };
13
+ export declare abstract class PikkuTriggerService implements TriggerService {
14
+ protected activeTriggers: Map<string, TriggerInstance>;
15
+ protected singletonServices?: CoreSingletonServices;
16
+ protected createWireServices?: CreateWireServices<CoreSingletonServices, CoreServices, CoreUserSession>;
17
+ setServices(singletonServices: CoreSingletonServices, createWireServices?: CreateWireServices<CoreSingletonServices, CoreServices, CoreUserSession>): void;
18
+ abstract start(): Promise<void>;
19
+ stop(): Promise<void>;
20
+ protected getTriggerTargets(): Map<string, TriggerTarget[]>;
21
+ protected getTriggerSources(): Map<string, {
22
+ input?: unknown;
23
+ }>;
24
+ protected setupTriggerInstance(name: string, input: unknown, onTrigger: (data: unknown) => Promise<void>): Promise<TriggerInstance>;
25
+ protected onTriggerFire(triggerName: string, targets: TriggerTarget[], data: unknown): Promise<void>;
26
+ }
@@ -0,0 +1,75 @@
1
+ import { rpcService } from '../rpc/rpc-runner.js';
2
+ import { setupTrigger } from './trigger-runner.js';
3
+ import { pikkuState } from '../../pikku-state.js';
4
+ export class PikkuTriggerService {
5
+ activeTriggers = new Map();
6
+ singletonServices;
7
+ createWireServices;
8
+ setServices(singletonServices, createWireServices) {
9
+ this.singletonServices = singletonServices;
10
+ this.createWireServices = createWireServices;
11
+ }
12
+ async stop() {
13
+ for (const [name, instance] of this.activeTriggers) {
14
+ try {
15
+ await instance.teardown();
16
+ this.singletonServices.logger.info(`Stopped trigger: ${name}`);
17
+ }
18
+ catch (error) {
19
+ this.singletonServices.logger.error(`Error stopping trigger ${name}: ${error}`);
20
+ }
21
+ }
22
+ this.activeTriggers.clear();
23
+ }
24
+ getTriggerTargets() {
25
+ const triggers = pikkuState(null, 'trigger', 'triggers');
26
+ const triggerTargets = new Map();
27
+ for (const [name] of triggers) {
28
+ const meta = pikkuState(null, 'trigger', 'meta')[name];
29
+ if (meta) {
30
+ if (!triggerTargets.has(name)) {
31
+ triggerTargets.set(name, []);
32
+ }
33
+ triggerTargets.get(name).push({
34
+ targetType: 'rpc',
35
+ targetName: meta.pikkuFuncId,
36
+ });
37
+ }
38
+ }
39
+ return triggerTargets;
40
+ }
41
+ getTriggerSources() {
42
+ return pikkuState(null, 'trigger', 'triggerSources');
43
+ }
44
+ async setupTriggerInstance(name, input, onTrigger) {
45
+ return setupTrigger({
46
+ name,
47
+ singletonServices: this.singletonServices,
48
+ createWireServices: this.createWireServices,
49
+ input,
50
+ onTrigger,
51
+ });
52
+ }
53
+ async onTriggerFire(triggerName, targets, data) {
54
+ const wireServices = await this.createWireServices?.(this.singletonServices, {});
55
+ const services = { ...this.singletonServices, ...wireServices };
56
+ const rpc = rpcService.getContextRPCService(services, {}, false);
57
+ for (const target of targets) {
58
+ try {
59
+ if (target.targetType === 'workflow') {
60
+ await rpc.startWorkflow(target.targetName, data, {
61
+ startNode: target.startNode,
62
+ });
63
+ this.singletonServices.logger.info(`Trigger '${triggerName}' started workflow '${target.targetName}'`);
64
+ }
65
+ else {
66
+ await rpc.invoke(target.targetName, data);
67
+ this.singletonServices.logger.info(`Trigger '${triggerName}' invoked RPC '${target.targetName}'`);
68
+ }
69
+ }
70
+ catch (error) {
71
+ this.singletonServices.logger.error(`Error invoking ${target.targetType} '${target.targetName}' from trigger '${triggerName}': ${error}`);
72
+ }
73
+ }
74
+ }
75
+ }
@@ -1,28 +1,41 @@
1
- import type { CoreSingletonServices } from '../../types/core.types.js';
2
- import type { CoreTrigger, TriggerInstance } from './trigger.types.js';
3
- import type { CorePikkuTriggerFunctionConfig } from '../../function/functions.types.js';
1
+ import { CreateWireServices, type CoreSingletonServices } from '../../types/core.types.js';
2
+ import type { CoreTrigger, CoreTriggerSource, TriggerInstance } from './trigger.types.js';
4
3
  /**
5
4
  * Registers a trigger with the Pikku framework.
6
- * The trigger will be available for setup via setupTrigger.
5
+ * Declares a trigger name and its target pikku function.
6
+ * Runs everywhere. Inspector extracts at build time.
7
7
  */
8
- export declare const wireTrigger: <TConfig = unknown, TOutput = unknown, TriggerFunctionConfig extends CorePikkuTriggerFunctionConfig<TConfig, TOutput> = CorePikkuTriggerFunctionConfig<TConfig, TOutput>>(trigger: CoreTrigger<TConfig, TOutput, TriggerFunctionConfig>) => void;
8
+ export declare const wireTrigger: (trigger: CoreTrigger) => void;
9
+ /**
10
+ * Registers a trigger source with the Pikku framework.
11
+ * Provides the actual subscription function and input data.
12
+ * Only imported in the trigger worker process.
13
+ */
14
+ export declare const wireTriggerSource: <TInput = unknown, TOutput = unknown>(source: CoreTriggerSource<TInput, TOutput>) => void;
9
15
  /**
10
16
  * Parameters for setting up a trigger
11
17
  */
12
- export type SetupTriggerParams<TOutput = unknown> = {
18
+ export type SetupTriggerParams<TInput = unknown, TOutput = unknown> = {
13
19
  name: string;
14
20
  singletonServices: CoreSingletonServices;
21
+ createWireServices?: CreateWireServices;
22
+ input?: TInput;
15
23
  onTrigger: (data: TOutput) => void | Promise<void>;
16
24
  };
17
25
  /**
18
26
  * Sets up a registered trigger and starts listening for events.
19
27
  * Returns a TriggerInstance with a teardown function.
28
+ *
29
+ * @param name - The trigger name (must be registered via wireTrigger)
30
+ * @param singletonServices - The singleton services
31
+ * @param input - The input to pass to the trigger function
32
+ * @param onTrigger - Callback invoked when the trigger fires
20
33
  */
21
- export declare function setupTrigger<TOutput = unknown>({ name, singletonServices, onTrigger, }: SetupTriggerParams<TOutput>): Promise<TriggerInstance>;
34
+ export declare function setupTrigger<TInput = unknown, TOutput = unknown>({ name, singletonServices, createWireServices, input, onTrigger, }: SetupTriggerParams<TInput, TOutput>): Promise<TriggerInstance>;
22
35
  /**
23
36
  * Gets all registered triggers
24
37
  */
25
- export declare const getRegisteredTriggers: () => Map<string, CoreTrigger<unknown, unknown, CorePikkuTriggerFunctionConfig<unknown, unknown>>>;
38
+ export declare const getRegisteredTriggers: () => Map<string, CoreTrigger<any>>;
26
39
  /**
27
40
  * Gets trigger metadata
28
41
  */