@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
@@ -9,7 +9,7 @@ import {
9
9
  QueueJobDiscardedError,
10
10
  } from './queue-runner.js'
11
11
  import { resetPikkuState, pikkuState } from '../../pikku-state.js'
12
- import { CoreQueueWorker, QueueJob } from './queue.types.js'
12
+ import type { CoreQueueWorker, QueueJob } from './queue.types.js'
13
13
 
14
14
  beforeEach(() => {
15
15
  resetPikkuState()
@@ -38,9 +38,9 @@ const createMockJob = (
38
38
  data,
39
39
  })
40
40
 
41
- const addTestQueueFunction = (pikkuFuncName: string) => {
42
- pikkuState(null, 'function', 'meta')[pikkuFuncName] = {
43
- pikkuFuncName,
41
+ const addTestQueueFunction = (pikkuFuncId: string) => {
42
+ pikkuState(null, 'function', 'meta')[pikkuFuncId] = {
43
+ pikkuFuncId,
44
44
  inputSchemaName: null,
45
45
  outputSchemaName: null,
46
46
  middleware: undefined,
@@ -51,7 +51,7 @@ const addTestQueueFunction = (pikkuFuncName: string) => {
51
51
  describe('wireQueueWorker', () => {
52
52
  test('should successfully wire a queue worker', () => {
53
53
  const mockWorker: CoreQueueWorker = {
54
- queueName: 'test-queue',
54
+ name: 'test-queue',
55
55
  func: {
56
56
  func: async (services: any, data: any, wire: any) => {
57
57
  return { processed: true }
@@ -60,10 +60,9 @@ describe('wireQueueWorker', () => {
60
60
  },
61
61
  }
62
62
 
63
- // Set up metadata first
64
63
  pikkuState(null, 'queue', 'meta')['test-queue'] = {
65
- pikkuFuncName: 'queue_test-queue',
66
- queueName: 'test-queue',
64
+ pikkuFuncId: 'queue_test-queue',
65
+ name: 'test-queue',
67
66
  }
68
67
  addTestQueueFunction('queue_test-queue')
69
68
  wireQueueWorker(mockWorker)
@@ -75,7 +74,7 @@ describe('wireQueueWorker', () => {
75
74
 
76
75
  test('should throw error when processor metadata not found', () => {
77
76
  const mockWorker: CoreQueueWorker = {
78
- queueName: 'missing-meta-queue',
77
+ name: 'missing-meta-queue',
79
78
  func: {
80
79
  func: async () => {},
81
80
  auth: false,
@@ -85,7 +84,9 @@ describe('wireQueueWorker', () => {
85
84
  assert.throws(
86
85
  () => wireQueueWorker(mockWorker),
87
86
  (error: any) => {
88
- assert(error.message.includes('Queue processor metadata not found'))
87
+ assert(
88
+ error.message.includes('Missing generated metadata for queue worker')
89
+ )
89
90
  assert(error.message.includes('missing-meta-queue'))
90
91
  return true
91
92
  }
@@ -98,7 +99,7 @@ describe('wireQueueWorker', () => {
98
99
  }
99
100
 
100
101
  const mockWorker: CoreQueueWorker = {
101
- queueName: 'worker-with-middleware',
102
+ name: 'worker-with-middleware',
102
103
  func: {
103
104
  func: async () => {},
104
105
  auth: false,
@@ -110,8 +111,8 @@ describe('wireQueueWorker', () => {
110
111
  }
111
112
 
112
113
  pikkuState(null, 'queue', 'meta')['worker-with-middleware'] = {
113
- pikkuFuncName: 'queue_worker-with-middleware',
114
- queueName: 'worker-with-middleware',
114
+ pikkuFuncId: 'queue_worker-with-middleware',
115
+ name: 'worker-with-middleware',
115
116
  }
116
117
  addTestQueueFunction('queue_worker-with-middleware')
117
118
  wireQueueWorker(mockWorker)
@@ -126,7 +127,7 @@ describe('wireQueueWorker', () => {
126
127
  describe('getQueueWorkers', () => {
127
128
  test('should return the registrations map', () => {
128
129
  const mockWorker: CoreQueueWorker = {
129
- queueName: 'test-queue',
130
+ name: 'test-queue',
130
131
  func: {
131
132
  func: async () => {},
132
133
  auth: false,
@@ -134,8 +135,8 @@ describe('getQueueWorkers', () => {
134
135
  }
135
136
 
136
137
  pikkuState(null, 'queue', 'meta')['test-queue'] = {
137
- pikkuFuncName: 'queue_test-queue',
138
- queueName: 'test-queue',
138
+ pikkuFuncId: 'queue_test-queue',
139
+ name: 'test-queue',
139
140
  }
140
141
  addTestQueueFunction('queue_test-queue')
141
142
  wireQueueWorker(mockWorker)
@@ -155,7 +156,7 @@ describe('getQueueWorkers', () => {
155
156
  describe('removeQueueWorker', () => {
156
157
  test('should successfully remove a queue worker', async () => {
157
158
  const mockWorker: CoreQueueWorker = {
158
- queueName: 'removable-queue',
159
+ name: 'removable-queue',
159
160
  func: {
160
161
  func: async () => {},
161
162
  auth: false,
@@ -163,8 +164,8 @@ describe('removeQueueWorker', () => {
163
164
  }
164
165
 
165
166
  pikkuState(null, 'queue', 'meta')['removable-queue'] = {
166
- pikkuFuncName: 'queue_removable-queue',
167
- queueName: 'removable-queue',
167
+ pikkuFuncId: 'queue_removable-queue',
168
+ name: 'removable-queue',
168
169
  }
169
170
  addTestQueueFunction('queue_removable-queue')
170
171
  wireQueueWorker(mockWorker)
@@ -198,7 +199,7 @@ describe('runQueueJob', () => {
198
199
  let receivedData: any
199
200
 
200
201
  const mockWorker: CoreQueueWorker = {
201
- queueName: 'simple-queue',
202
+ name: 'simple-queue',
202
203
  func: {
203
204
  func: async (services: any, data: any, wire: any) => {
204
205
  jobProcessed = true
@@ -210,19 +211,21 @@ describe('runQueueJob', () => {
210
211
  }
211
212
 
212
213
  pikkuState(null, 'queue', 'meta')['simple-queue'] = {
213
- pikkuFuncName: 'queue_simple-queue',
214
- queueName: 'simple-queue',
214
+ pikkuFuncId: 'queue_simple-queue',
215
+ name: 'simple-queue',
215
216
  }
216
217
  addTestQueueFunction('queue_simple-queue')
217
218
  wireQueueWorker(mockWorker)
218
219
 
219
220
  const mockLogger = createMockLogger()
221
+ pikkuState(null, 'package', 'singletonServices', {
222
+ logger: mockLogger,
223
+ } as any)
220
224
  const job = createMockJob('simple-queue', 'job-123', {
221
225
  message: 'test data',
222
226
  })
223
227
 
224
228
  const result = await runQueueJob({
225
- singletonServices: { logger: mockLogger } as any,
226
229
  job,
227
230
  })
228
231
 
@@ -238,7 +241,7 @@ describe('runQueueJob', () => {
238
241
 
239
242
  test('should handle job.fail() by throwing QueueJobFailedError', async () => {
240
243
  const mockWorker: CoreQueueWorker = {
241
- queueName: 'fail-queue',
244
+ name: 'fail-queue',
242
245
  func: {
243
246
  func: async (services: any, data: any, wire: any) => {
244
247
  await wire.queue.fail('Processing failed')
@@ -248,19 +251,21 @@ describe('runQueueJob', () => {
248
251
  }
249
252
 
250
253
  pikkuState(null, 'queue', 'meta')['fail-queue'] = {
251
- pikkuFuncName: 'queue_fail-queue',
252
- queueName: 'fail-queue',
254
+ pikkuFuncId: 'queue_fail-queue',
255
+ name: 'fail-queue',
253
256
  }
254
257
  addTestQueueFunction('queue_fail-queue')
255
258
  wireQueueWorker(mockWorker)
256
259
 
257
260
  const mockLogger = createMockLogger()
261
+ pikkuState(null, 'package', 'singletonServices', {
262
+ logger: mockLogger,
263
+ } as any)
258
264
  const job = createMockJob('fail-queue', 'job-fail-123')
259
265
 
260
266
  await assert.rejects(
261
267
  async () => {
262
268
  await runQueueJob({
263
- singletonServices: { logger: mockLogger } as any,
264
269
  job,
265
270
  })
266
271
  },
@@ -276,7 +281,7 @@ describe('runQueueJob', () => {
276
281
 
277
282
  test('should handle job.fail() without reason', async () => {
278
283
  const mockWorker: CoreQueueWorker = {
279
- queueName: 'fail-no-reason-queue',
284
+ name: 'fail-no-reason-queue',
280
285
  func: {
281
286
  func: async (services: any, data: any, wire: any) => {
282
287
  await wire.queue.fail()
@@ -286,19 +291,21 @@ describe('runQueueJob', () => {
286
291
  }
287
292
 
288
293
  pikkuState(null, 'queue', 'meta')['fail-no-reason-queue'] = {
289
- pikkuFuncName: 'queue_fail-no-reason-queue',
290
- queueName: 'fail-no-reason-queue',
294
+ pikkuFuncId: 'queue_fail-no-reason-queue',
295
+ name: 'fail-no-reason-queue',
291
296
  }
292
297
  addTestQueueFunction('queue_fail-no-reason-queue')
293
298
  wireQueueWorker(mockWorker)
294
299
 
295
300
  const mockLogger = createMockLogger()
301
+ pikkuState(null, 'package', 'singletonServices', {
302
+ logger: mockLogger,
303
+ } as any)
296
304
  const job = createMockJob('fail-no-reason-queue', 'job-456')
297
305
 
298
306
  await assert.rejects(
299
307
  async () => {
300
308
  await runQueueJob({
301
- singletonServices: { logger: mockLogger } as any,
302
309
  job,
303
310
  })
304
311
  },
@@ -312,7 +319,7 @@ describe('runQueueJob', () => {
312
319
 
313
320
  test('should handle job.discard() by throwing QueueJobDiscardedError', async () => {
314
321
  const mockWorker: CoreQueueWorker = {
315
- queueName: 'discard-queue',
322
+ name: 'discard-queue',
316
323
  func: {
317
324
  func: async (services: any, data: any, wire: any) => {
318
325
  await wire.queue.discard('Invalid data')
@@ -322,19 +329,21 @@ describe('runQueueJob', () => {
322
329
  }
323
330
 
324
331
  pikkuState(null, 'queue', 'meta')['discard-queue'] = {
325
- pikkuFuncName: 'queue_discard-queue',
326
- queueName: 'discard-queue',
332
+ pikkuFuncId: 'queue_discard-queue',
333
+ name: 'discard-queue',
327
334
  }
328
335
  addTestQueueFunction('queue_discard-queue')
329
336
  wireQueueWorker(mockWorker)
330
337
 
331
338
  const mockLogger = createMockLogger()
339
+ pikkuState(null, 'package', 'singletonServices', {
340
+ logger: mockLogger,
341
+ } as any)
332
342
  const job = createMockJob('discard-queue', 'job-discard-789')
333
343
 
334
344
  await assert.rejects(
335
345
  async () => {
336
346
  await runQueueJob({
337
- singletonServices: { logger: mockLogger } as any,
338
347
  job,
339
348
  })
340
349
  },
@@ -352,7 +361,7 @@ describe('runQueueJob', () => {
352
361
  const progressUpdates: Array<number | string | object> = []
353
362
 
354
363
  const mockWorker: CoreQueueWorker = {
355
- queueName: 'progress-queue',
364
+ name: 'progress-queue',
356
365
  func: {
357
366
  func: async (services: any, data: any, wire: any) => {
358
367
  await wire.queue.updateProgress(25)
@@ -365,17 +374,19 @@ describe('runQueueJob', () => {
365
374
  }
366
375
 
367
376
  pikkuState(null, 'queue', 'meta')['progress-queue'] = {
368
- pikkuFuncName: 'queue_progress-queue',
369
- queueName: 'progress-queue',
377
+ pikkuFuncId: 'queue_progress-queue',
378
+ name: 'progress-queue',
370
379
  }
371
380
  addTestQueueFunction('queue_progress-queue')
372
381
  wireQueueWorker(mockWorker)
373
382
 
374
383
  const mockLogger = createMockLogger()
384
+ pikkuState(null, 'package', 'singletonServices', {
385
+ logger: mockLogger,
386
+ } as any)
375
387
  const job = createMockJob('progress-queue', 'job-progress-999')
376
388
 
377
389
  await runQueueJob({
378
- singletonServices: { logger: mockLogger } as any,
379
390
  job,
380
391
  updateProgress: async (progress) => {
381
392
  progressUpdates.push(progress)
@@ -387,7 +398,7 @@ describe('runQueueJob', () => {
387
398
 
388
399
  test('should use default updateProgress when not provided', async () => {
389
400
  const mockWorker: CoreQueueWorker = {
390
- queueName: 'default-progress-queue',
401
+ name: 'default-progress-queue',
391
402
  func: {
392
403
  func: async (services: any, data: any, wire: any) => {
393
404
  await wire.queue.updateProgress(50)
@@ -398,17 +409,19 @@ describe('runQueueJob', () => {
398
409
  }
399
410
 
400
411
  pikkuState(null, 'queue', 'meta')['default-progress-queue'] = {
401
- pikkuFuncName: 'queue_default-progress-queue',
402
- queueName: 'default-progress-queue',
412
+ pikkuFuncId: 'queue_default-progress-queue',
413
+ name: 'default-progress-queue',
403
414
  }
404
415
  addTestQueueFunction('queue_default-progress-queue')
405
416
  wireQueueWorker(mockWorker)
406
417
 
407
418
  const mockLogger = createMockLogger()
419
+ pikkuState(null, 'package', 'singletonServices', {
420
+ logger: mockLogger,
421
+ } as any)
408
422
  const job = createMockJob('default-progress-queue', 'job-111')
409
423
 
410
424
  await runQueueJob({
411
- singletonServices: { logger: mockLogger } as any,
412
425
  job,
413
426
  })
414
427
 
@@ -421,7 +434,7 @@ describe('runQueueJob', () => {
421
434
  let capturedWire: any
422
435
 
423
436
  const mockWorker: CoreQueueWorker = {
424
- queueName: 'wire-queue',
437
+ name: 'wire-queue',
425
438
  func: {
426
439
  func: async (services: any, data: any, wire: any) => {
427
440
  capturedWire = wire
@@ -432,17 +445,19 @@ describe('runQueueJob', () => {
432
445
  }
433
446
 
434
447
  pikkuState(null, 'queue', 'meta')['wire-queue'] = {
435
- pikkuFuncName: 'queue_wire-queue',
436
- queueName: 'wire-queue',
448
+ pikkuFuncId: 'queue_wire-queue',
449
+ name: 'wire-queue',
437
450
  }
438
451
  addTestQueueFunction('queue_wire-queue')
439
452
  wireQueueWorker(mockWorker)
440
453
 
441
454
  const mockLogger = createMockLogger()
455
+ pikkuState(null, 'package', 'singletonServices', {
456
+ logger: mockLogger,
457
+ } as any)
442
458
  const job = createMockJob('wire-queue', 'job-int-123')
443
459
 
444
460
  await runQueueJob({
445
- singletonServices: { logger: mockLogger } as any,
446
461
  job,
447
462
  })
448
463
 
@@ -455,17 +470,21 @@ describe('runQueueJob', () => {
455
470
 
456
471
  test('should throw error when processor metadata not found', async () => {
457
472
  const mockLogger = createMockLogger()
473
+ pikkuState(null, 'package', 'singletonServices', {
474
+ logger: mockLogger,
475
+ } as any)
458
476
  const job = createMockJob('missing-meta-queue', 'job-222')
459
477
 
460
478
  await assert.rejects(
461
479
  async () => {
462
480
  await runQueueJob({
463
- singletonServices: { logger: mockLogger } as any,
464
481
  job,
465
482
  })
466
483
  },
467
484
  (error: any) => {
468
- assert(error.message.includes('Processor metadata not found'))
485
+ assert(
486
+ error.message.includes('Missing generated metadata for queue worker')
487
+ )
469
488
  assert(error.message.includes('missing-meta-queue'))
470
489
  return true
471
490
  }
@@ -473,19 +492,20 @@ describe('runQueueJob', () => {
473
492
  })
474
493
 
475
494
  test('should throw error when queue worker registration not found', async () => {
476
- // Add metadata but not registration
477
495
  pikkuState(null, 'queue', 'meta')['no-registration-queue'] = {
478
- pikkuFuncName: 'queue_no-registration-queue',
479
- queueName: 'no-registration-queue',
496
+ pikkuFuncId: 'queue_no-registration-queue',
497
+ name: 'no-registration-queue',
480
498
  }
481
499
 
482
500
  const mockLogger = createMockLogger()
501
+ pikkuState(null, 'package', 'singletonServices', {
502
+ logger: mockLogger,
503
+ } as any)
483
504
  const job = createMockJob('no-registration-queue', 'job-333')
484
505
 
485
506
  await assert.rejects(
486
507
  async () => {
487
508
  await runQueueJob({
488
- singletonServices: { logger: mockLogger } as any,
489
509
  job,
490
510
  })
491
511
  },
@@ -502,7 +522,7 @@ describe('runQueueJob', () => {
502
522
  const mockWireService = { custom: 'service' }
503
523
 
504
524
  const mockWorker: CoreQueueWorker = {
505
- queueName: 'session-services-queue',
525
+ name: 'session-services-queue',
506
526
  func: {
507
527
  func: async () => 'ok',
508
528
  auth: false,
@@ -510,22 +530,26 @@ describe('runQueueJob', () => {
510
530
  }
511
531
 
512
532
  pikkuState(null, 'queue', 'meta')['session-services-queue'] = {
513
- pikkuFuncName: 'queue_session-services-queue',
514
- queueName: 'session-services-queue',
533
+ pikkuFuncId: 'queue_session-services-queue',
534
+ name: 'session-services-queue',
515
535
  }
516
536
  addTestQueueFunction('queue_session-services-queue')
517
537
  wireQueueWorker(mockWorker)
518
538
 
519
539
  const mockLogger = createMockLogger()
520
- const job = createMockJob('session-services-queue', 'job-444')
521
-
522
- await runQueueJob({
523
- singletonServices: { logger: mockLogger } as any,
524
- job,
540
+ pikkuState(null, 'package', 'singletonServices', {
541
+ logger: mockLogger,
542
+ } as any)
543
+ pikkuState(null, 'package', 'factories', {
525
544
  createWireServices: async () => {
526
545
  createWireServicesCalled = true
527
546
  return mockWireService as any
528
547
  },
548
+ } as any)
549
+ const job = createMockJob('session-services-queue', 'job-444')
550
+
551
+ await runQueueJob({
552
+ job,
529
553
  })
530
554
 
531
555
  assert.equal(createWireServicesCalled, true)
@@ -533,7 +557,7 @@ describe('runQueueJob', () => {
533
557
 
534
558
  test('should log errors when job processing fails', async () => {
535
559
  const mockWorker: CoreQueueWorker = {
536
- queueName: 'error-queue',
560
+ name: 'error-queue',
537
561
  func: {
538
562
  func: async () => {
539
563
  throw new Error('Processing error')
@@ -543,19 +567,21 @@ describe('runQueueJob', () => {
543
567
  }
544
568
 
545
569
  pikkuState(null, 'queue', 'meta')['error-queue'] = {
546
- pikkuFuncName: 'queue_error-queue',
547
- queueName: 'error-queue',
570
+ pikkuFuncId: 'queue_error-queue',
571
+ name: 'error-queue',
548
572
  }
549
573
  addTestQueueFunction('queue_error-queue')
550
574
  wireQueueWorker(mockWorker)
551
575
 
552
576
  const mockLogger = createMockLogger()
577
+ pikkuState(null, 'package', 'singletonServices', {
578
+ logger: mockLogger,
579
+ } as any)
553
580
  const job = createMockJob('error-queue', 'job-555')
554
581
 
555
582
  await assert.rejects(
556
583
  async () => {
557
584
  await runQueueJob({
558
- singletonServices: { logger: mockLogger } as any,
559
585
  job,
560
586
  })
561
587
  },
@@ -580,7 +606,7 @@ describe('runQueueJob', () => {
580
606
  }
581
607
 
582
608
  const mockWorker: CoreQueueWorker = {
583
- queueName: 'middleware-queue',
609
+ name: 'middleware-queue',
584
610
  func: {
585
611
  func: async () => {
586
612
  executionOrder.push('job')
@@ -592,17 +618,19 @@ describe('runQueueJob', () => {
592
618
  }
593
619
 
594
620
  pikkuState(null, 'queue', 'meta')['middleware-queue'] = {
595
- pikkuFuncName: 'queue_middleware-queue',
596
- queueName: 'middleware-queue',
621
+ pikkuFuncId: 'queue_middleware-queue',
622
+ name: 'middleware-queue',
597
623
  }
598
624
  addTestQueueFunction('queue_middleware-queue')
599
625
  wireQueueWorker(mockWorker)
600
626
 
601
627
  const mockLogger = createMockLogger()
628
+ pikkuState(null, 'package', 'singletonServices', {
629
+ logger: mockLogger,
630
+ } as any)
602
631
  const job = createMockJob('middleware-queue', 'job-666')
603
632
 
604
633
  await runQueueJob({
605
- singletonServices: { logger: mockLogger } as any,
606
634
  job,
607
635
  })
608
636
 
@@ -611,7 +639,7 @@ describe('runQueueJob', () => {
611
639
 
612
640
  test('should log debug message on successful job completion', async () => {
613
641
  const mockWorker: CoreQueueWorker = {
614
- queueName: 'debug-queue',
642
+ name: 'debug-queue',
615
643
  func: {
616
644
  func: async () => 'success',
617
645
  auth: false,
@@ -619,17 +647,19 @@ describe('runQueueJob', () => {
619
647
  }
620
648
 
621
649
  pikkuState(null, 'queue', 'meta')['debug-queue'] = {
622
- pikkuFuncName: 'queue_debug-queue',
623
- queueName: 'debug-queue',
650
+ pikkuFuncId: 'queue_debug-queue',
651
+ name: 'debug-queue',
624
652
  }
625
653
  addTestQueueFunction('queue_debug-queue')
626
654
  wireQueueWorker(mockWorker)
627
655
 
628
656
  const mockLogger = createMockLogger()
657
+ pikkuState(null, 'package', 'singletonServices', {
658
+ logger: mockLogger,
659
+ } as any)
629
660
  const job = createMockJob('debug-queue', 'job-777')
630
661
 
631
662
  await runQueueJob({
632
- singletonServices: { logger: mockLogger } as any,
633
663
  job,
634
664
  })
635
665
 
@@ -639,3 +669,42 @@ describe('runQueueJob', () => {
639
669
  assert(debugLogs[0].message.includes('Successfully processed job job-777'))
640
670
  })
641
671
  })
672
+
673
+ describe('runQueueJob with pikkuState services', () => {
674
+ test('delegates queue job execution using pikkuState services', async () => {
675
+ const mockWorker: CoreQueueWorker = {
676
+ name: 'bound-runner-queue',
677
+ func: {
678
+ func: async (_services: any, data: any) => {
679
+ return data.value + 1
680
+ },
681
+ auth: false,
682
+ },
683
+ }
684
+
685
+ pikkuState(null, 'queue', 'meta')['bound-runner-queue'] = {
686
+ pikkuFuncId: 'queue_bound-runner-queue',
687
+ name: 'bound-runner-queue',
688
+ }
689
+ addTestQueueFunction('queue_bound-runner-queue')
690
+ wireQueueWorker(mockWorker)
691
+
692
+ const mockLogger = createMockLogger()
693
+ pikkuState(null, 'package', 'singletonServices', {
694
+ logger: mockLogger,
695
+ } as any)
696
+
697
+ await runQueueJob({
698
+ job: createMockJob('bound-runner-queue', 'job-888', { value: 41 }),
699
+ })
700
+
701
+ const logs = mockLogger.getLogs()
702
+ assert(
703
+ logs.some(
704
+ (log) =>
705
+ log.level === 'debug' &&
706
+ String(log.message).includes('Successfully processed job job-888')
707
+ )
708
+ )
709
+ })
710
+ })
@@ -1,13 +1,17 @@
1
- import type { CoreServices, PikkuWire } from '../../types/core.types.js'
1
+ import type { PikkuWire } from '../../types/core.types.js'
2
2
  import type { CoreQueueWorker, QueueJob, PikkuQueue } from './queue.types.js'
3
3
  import type {
4
4
  CorePikkuFunctionConfig,
5
5
  CorePikkuFunctionSessionless,
6
6
  } from '../../function/functions.types.js'
7
7
  import { getErrorResponse, PikkuError } from '../../errors/error-handler.js'
8
- import { pikkuState } from '../../pikku-state.js'
8
+ import { PikkuMissingMetaError } from '../../errors/errors.js'
9
+ import {
10
+ getSingletonServices,
11
+ getCreateWireServices,
12
+ pikkuState,
13
+ } from '../../pikku-state.js'
9
14
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
10
- import { CreateWireServices } from '../../types/core.types.js'
11
15
 
12
16
  /**
13
17
  * Error class for queue processor not found
@@ -53,15 +57,15 @@ export const wireQueueWorker = <
53
57
  ) => {
54
58
  // Get processor metadata
55
59
  const meta = pikkuState(null, 'queue', 'meta')
56
- const processorMeta = meta[queueWorker.queueName]
60
+ const processorMeta = meta[queueWorker.name]
57
61
  if (!processorMeta) {
58
- throw new Error(
59
- `Queue processor metadata not found for '${queueWorker.queueName}'. Make sure to run the CLI to generate metadata.`
62
+ throw new PikkuMissingMetaError(
63
+ `Missing generated metadata for queue worker '${queueWorker.name}'`
60
64
  )
61
65
  }
62
66
 
63
67
  // Register the function with pikku
64
- addFunction(processorMeta.pikkuFuncName, {
68
+ addFunction(processorMeta.pikkuFuncId, {
65
69
  func: queueWorker.func.func,
66
70
  auth: queueWorker.func.auth,
67
71
  permissions: queueWorker.func.permissions,
@@ -71,7 +75,7 @@ export const wireQueueWorker = <
71
75
 
72
76
  // Store processor definition in state - runtime adapters will pick this up
73
77
  const registrations = pikkuState(null, 'queue', 'registrations')
74
- registrations.set(queueWorker.queueName, queueWorker)
78
+ registrations.set(queueWorker.name, queueWorker)
75
79
  }
76
80
 
77
81
  /**
@@ -99,22 +103,22 @@ export async function removeQueueWorker(name: string): Promise<void> {
99
103
  * Process a single queue job - this function is called by queue consumers
100
104
  */
101
105
  export async function runQueueJob({
102
- singletonServices,
103
- createWireServices,
104
106
  job,
105
107
  updateProgress,
106
108
  }: {
107
- singletonServices: CoreServices
108
- createWireServices?: CreateWireServices
109
109
  job: QueueJob
110
110
  updateProgress?: (progress: number | string | object) => Promise<void>
111
111
  }): Promise<void> {
112
+ const singletonServices = getSingletonServices()
113
+ const createWireServices = getCreateWireServices()
112
114
  const logger = singletonServices.logger
113
115
 
114
116
  const meta = pikkuState(null, 'queue', 'meta')
115
117
  const processorMeta = meta[job.queueName]
116
118
  if (!processorMeta) {
117
- throw new Error(`Processor metadata not found for: ${job.queueName}`)
119
+ throw new PikkuMissingMetaError(
120
+ `Missing generated metadata for queue worker '${job.queueName}'`
121
+ )
118
122
  }
119
123
 
120
124
  // Get the queue worker registration to access middleware
@@ -153,7 +157,7 @@ export async function runQueueJob({
153
157
  const result = await runPikkuFunc(
154
158
  'queue',
155
159
  job.queueName,
156
- processorMeta.pikkuFuncName,
160
+ processorMeta.pikkuFuncId,
157
161
  {
158
162
  singletonServices,
159
163
  createWireServices,
@@ -1,6 +1,6 @@
1
- import { CommonWireMeta } from '../../types/core.types.js'
2
- import { CorePikkuFunctionConfig } from '../../function/functions.types.js'
3
- import { QueueConfigMapping } from './validate-worker-config.js'
1
+ import type { CommonWireMeta } from '../../types/core.types.js'
2
+ import type { CorePikkuFunctionConfig } from '../../function/functions.types.js'
3
+ import type { QueueConfigMapping } from './validate-worker-config.js'
4
4
 
5
5
  /**
6
6
  * Configuration for queue workers - how jobs are processed
@@ -148,7 +148,7 @@ export interface QueueWorkers {
148
148
  export type QueueWorkersMeta = Record<
149
149
  string,
150
150
  CommonWireMeta & {
151
- queueName: string
151
+ name: string
152
152
  config?: PikkuWorkerConfig
153
153
  }
154
154
  >
@@ -163,7 +163,7 @@ export type CoreQueueWorker<
163
163
  any
164
164
  > = CorePikkuFunctionConfig<any, any, any>,
165
165
  > = {
166
- queueName: string
166
+ name: string
167
167
  func: PikkuFunctionConfig
168
168
  config?: PikkuWorkerConfig
169
169
  errors?: string[]