@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
@@ -6,8 +6,8 @@ import {
6
6
  getScheduledTasks,
7
7
  } from './scheduler-runner.js'
8
8
  import { resetPikkuState, pikkuState } from '../../pikku-state.js'
9
- import { CoreScheduledTask } from './scheduler.types.js'
10
- import { CoreUserSession } from '../../types/core.types.js'
9
+ import type { CoreScheduledTask } from './scheduler.types.js'
10
+ import type { CoreUserSession } from '../../types/core.types.js'
11
11
 
12
12
  beforeEach(() => {
13
13
  resetPikkuState()
@@ -38,7 +38,7 @@ describe('wireScheduler', () => {
38
38
 
39
39
  // Set up metadata first
40
40
  pikkuState(null, 'scheduler', 'meta')['test-task'] = {
41
- pikkuFuncName: 'scheduler_test-task',
41
+ pikkuFuncId: 'scheduler_test-task',
42
42
  name: 'test-task',
43
43
  schedule: '0 0 * * *',
44
44
  }
@@ -63,7 +63,10 @@ describe('wireScheduler', () => {
63
63
  assert.throws(
64
64
  () => wireScheduler(mockTask),
65
65
  (error: any) => {
66
- assert.equal(error.message, 'Task metadata not found')
66
+ assert.equal(
67
+ error.message,
68
+ "Missing generated metadata for scheduled task 'missing-meta-task'"
69
+ )
67
70
  return true
68
71
  }
69
72
  )
@@ -81,7 +84,7 @@ describe('wireScheduler', () => {
81
84
 
82
85
  // Set up metadata
83
86
  pikkuState(null, 'scheduler', 'meta')['duplicate-task'] = {
84
- pikkuFuncName: 'scheduler_duplicate-task',
87
+ pikkuFuncId: 'scheduler_duplicate-task',
85
88
  name: 'duplicate-task',
86
89
  schedule: '0 0 * * *',
87
90
  }
@@ -121,7 +124,7 @@ describe('wireScheduler', () => {
121
124
  }
122
125
 
123
126
  pikkuState(null, 'scheduler', 'meta')['task-with-middleware'] = {
124
- pikkuFuncName: 'scheduler_task-with-middleware',
127
+ pikkuFuncId: 'scheduler_task-with-middleware',
125
128
  name: 'task-with-middleware',
126
129
  schedule: '0 0 * * *',
127
130
  }
@@ -152,21 +155,23 @@ describe('runScheduledTask', () => {
152
155
 
153
156
  // Set up metadata and task
154
157
  pikkuState(null, 'scheduler', 'meta')['simple-task'] = {
155
- pikkuFuncName: 'scheduler_simple-task',
158
+ pikkuFuncId: 'scheduler_simple-task',
156
159
  name: 'simple-task',
157
160
  schedule: '0 0 * * *',
158
161
  }
159
162
  pikkuState(null, 'function', 'meta')['scheduler_simple-task'] = {
160
- pikkuFuncName: 'scheduler_simple-task',
163
+ pikkuFuncId: 'scheduler_simple-task',
161
164
  inputSchemaName: null,
162
165
  outputSchemaName: null,
163
166
  }
164
167
  wireScheduler(mockTask)
165
168
 
166
169
  const mockLogger = createMockLogger()
170
+ pikkuState(null, 'package', 'singletonServices', {
171
+ logger: mockLogger,
172
+ } as any)
167
173
  await runScheduledTask({
168
174
  name: 'simple-task',
169
- singletonServices: { logger: mockLogger } as any,
170
175
  })
171
176
 
172
177
  assert.equal(taskExecuted, true)
@@ -185,31 +190,33 @@ describe('runScheduledTask', () => {
185
190
  schedule: '0 0 * * *',
186
191
  func: {
187
192
  func: async (services: any, data: any, wire: any) => {
188
- receivedSession = await wire.session.get()
193
+ receivedSession = await wire.getSession()
189
194
  },
190
195
  auth: false,
191
196
  },
192
197
  }
193
198
 
194
199
  pikkuState(null, 'scheduler', 'meta')['task-with-session'] = {
195
- pikkuFuncName: 'scheduler_task-with-session',
200
+ pikkuFuncId: 'scheduler_task-with-session',
196
201
  name: 'task-with-session',
197
202
  schedule: '0 0 * * *',
198
203
  }
199
204
  pikkuState(null, 'function', 'meta')['scheduler_task-with-session'] = {
200
- pikkuFuncName: 'scheduler_task-with-session',
205
+ pikkuFuncId: 'scheduler_task-with-session',
201
206
  inputSchemaName: null,
202
207
  outputSchemaName: null,
203
208
  }
204
209
  wireScheduler(mockTask)
205
210
 
206
211
  const mockLogger = createMockLogger()
212
+ pikkuState(null, 'package', 'singletonServices', {
213
+ logger: mockLogger,
214
+ } as any)
207
215
  const session: CoreUserSession = { userId: 'user123' }
208
216
 
209
217
  await runScheduledTask({
210
218
  name: 'task-with-session',
211
219
  session,
212
- singletonServices: { logger: mockLogger } as any,
213
220
  })
214
221
 
215
222
  assert.deepEqual(receivedSession, session)
@@ -217,12 +224,14 @@ describe('runScheduledTask', () => {
217
224
 
218
225
  test('should throw ScheduledTaskNotFoundError when task not found', async () => {
219
226
  const mockLogger = createMockLogger()
227
+ pikkuState(null, 'package', 'singletonServices', {
228
+ logger: mockLogger,
229
+ } as any)
220
230
 
221
231
  await assert.rejects(
222
232
  async () => {
223
233
  await runScheduledTask({
224
234
  name: 'non-existent-task',
225
- singletonServices: { logger: mockLogger } as any,
226
235
  })
227
236
  },
228
237
  (error: any) => {
@@ -246,12 +255,14 @@ describe('runScheduledTask', () => {
246
255
  pikkuState(null, 'scheduler', 'tasks').set('task-without-meta', mockTask)
247
256
 
248
257
  const mockLogger = createMockLogger()
258
+ pikkuState(null, 'package', 'singletonServices', {
259
+ logger: mockLogger,
260
+ } as any)
249
261
 
250
262
  await assert.rejects(
251
263
  async () => {
252
264
  await runScheduledTask({
253
265
  name: 'task-without-meta',
254
- singletonServices: { logger: mockLogger } as any,
255
266
  })
256
267
  },
257
268
  (error: any) => {
@@ -274,24 +285,26 @@ describe('runScheduledTask', () => {
274
285
  }
275
286
 
276
287
  pikkuState(null, 'scheduler', 'meta')['skipped-task'] = {
277
- pikkuFuncName: 'scheduler_skipped-task',
288
+ pikkuFuncId: 'scheduler_skipped-task',
278
289
  name: 'skipped-task',
279
290
  schedule: '0 0 * * *',
280
291
  }
281
292
  pikkuState(null, 'function', 'meta')['scheduler_skipped-task'] = {
282
- pikkuFuncName: 'scheduler_skipped-task',
293
+ pikkuFuncId: 'scheduler_skipped-task',
283
294
  inputSchemaName: null,
284
295
  outputSchemaName: null,
285
296
  }
286
297
  wireScheduler(mockTask)
287
298
 
288
299
  const mockLogger = createMockLogger()
300
+ pikkuState(null, 'package', 'singletonServices', {
301
+ logger: mockLogger,
302
+ } as any)
289
303
 
290
304
  await assert.rejects(
291
305
  async () => {
292
306
  await runScheduledTask({
293
307
  name: 'skipped-task',
294
- singletonServices: { logger: mockLogger } as any,
295
308
  })
296
309
  },
297
310
  (error: any) => {
@@ -317,24 +330,26 @@ describe('runScheduledTask', () => {
317
330
  }
318
331
 
319
332
  pikkuState(null, 'scheduler', 'meta')['skipped-task-no-reason'] = {
320
- pikkuFuncName: 'scheduler_skipped-task-no-reason',
333
+ pikkuFuncId: 'scheduler_skipped-task-no-reason',
321
334
  name: 'skipped-task-no-reason',
322
335
  schedule: '0 0 * * *',
323
336
  }
324
337
  pikkuState(null, 'function', 'meta')['scheduler_skipped-task-no-reason'] = {
325
- pikkuFuncName: 'scheduler_skipped-task-no-reason',
338
+ pikkuFuncId: 'scheduler_skipped-task-no-reason',
326
339
  inputSchemaName: null,
327
340
  outputSchemaName: null,
328
341
  }
329
342
  wireScheduler(mockTask)
330
343
 
331
344
  const mockLogger = createMockLogger()
345
+ pikkuState(null, 'package', 'singletonServices', {
346
+ logger: mockLogger,
347
+ } as any)
332
348
 
333
349
  await assert.rejects(
334
350
  async () => {
335
351
  await runScheduledTask({
336
352
  name: 'skipped-task-no-reason',
337
- singletonServices: { logger: mockLogger } as any,
338
353
  })
339
354
  },
340
355
  (error: any) => {
@@ -363,22 +378,24 @@ describe('runScheduledTask', () => {
363
378
  }
364
379
 
365
380
  pikkuState(null, 'scheduler', 'meta')['wire-task'] = {
366
- pikkuFuncName: 'scheduler_wire-task',
381
+ pikkuFuncId: 'scheduler_wire-task',
367
382
  name: 'wire-task',
368
383
  schedule: '*/5 * * * *',
369
384
  }
370
385
  pikkuState(null, 'function', 'meta')['scheduler_wire-task'] = {
371
- pikkuFuncName: 'scheduler_wire-task',
386
+ pikkuFuncId: 'scheduler_wire-task',
372
387
  inputSchemaName: null,
373
388
  outputSchemaName: null,
374
389
  }
375
390
  wireScheduler(mockTask)
376
391
 
377
392
  const mockLogger = createMockLogger()
393
+ pikkuState(null, 'package', 'singletonServices', {
394
+ logger: mockLogger,
395
+ } as any)
378
396
 
379
397
  await runScheduledTask({
380
398
  name: 'wire-task',
381
- singletonServices: { logger: mockLogger } as any,
382
399
  })
383
400
 
384
401
  assert.equal(capturedWire.scheduledTask.name, 'wire-task')
@@ -401,26 +418,30 @@ describe('runScheduledTask', () => {
401
418
  }
402
419
 
403
420
  pikkuState(null, 'scheduler', 'meta')['session-services-task'] = {
404
- pikkuFuncName: 'scheduler_session-services-task',
421
+ pikkuFuncId: 'scheduler_session-services-task',
405
422
  name: 'session-services-task',
406
423
  schedule: '0 0 * * *',
407
424
  }
408
425
  pikkuState(null, 'function', 'meta')['scheduler_session-services-task'] = {
409
- pikkuFuncName: 'scheduler_session-services-task',
426
+ pikkuFuncId: 'scheduler_session-services-task',
410
427
  inputSchemaName: null,
411
428
  outputSchemaName: null,
412
429
  }
413
430
  wireScheduler(mockTask)
414
431
 
415
432
  const mockLogger = createMockLogger()
416
-
417
- await runScheduledTask({
418
- name: 'session-services-task',
419
- singletonServices: { logger: mockLogger } as any,
433
+ pikkuState(null, 'package', 'singletonServices', {
434
+ logger: mockLogger,
435
+ } as any)
436
+ pikkuState(null, 'package', 'factories', {
420
437
  createWireServices: async () => {
421
438
  createWireServicesCalled = true
422
439
  return mockWireService as any
423
440
  },
441
+ } as any)
442
+
443
+ await runScheduledTask({
444
+ name: 'session-services-task',
424
445
  })
425
446
 
426
447
  assert.equal(createWireServicesCalled, true)
@@ -446,23 +467,27 @@ describe('runScheduledTask', () => {
446
467
  }
447
468
 
448
469
  pikkuState(null, 'scheduler', 'meta')['cleanup-task'] = {
449
- pikkuFuncName: 'scheduler_cleanup-task',
470
+ pikkuFuncId: 'scheduler_cleanup-task',
450
471
  name: 'cleanup-task',
451
472
  schedule: '0 0 * * *',
452
473
  }
453
474
  pikkuState(null, 'function', 'meta')['scheduler_cleanup-task'] = {
454
- pikkuFuncName: 'scheduler_cleanup-task',
475
+ pikkuFuncId: 'scheduler_cleanup-task',
455
476
  inputSchemaName: null,
456
477
  outputSchemaName: null,
457
478
  }
458
479
  wireScheduler(mockTask)
459
480
 
460
481
  const mockLogger = createMockLogger()
482
+ pikkuState(null, 'package', 'singletonServices', {
483
+ logger: mockLogger,
484
+ } as any)
485
+ pikkuState(null, 'package', 'factories', {
486
+ createWireServices: async () => mockWireService as any,
487
+ } as any)
461
488
 
462
489
  await runScheduledTask({
463
490
  name: 'cleanup-task',
464
- singletonServices: { logger: mockLogger } as any,
465
- createWireServices: async () => mockWireService as any,
466
491
  })
467
492
 
468
493
  assert.equal(closeCalled, true)
@@ -490,24 +515,28 @@ describe('runScheduledTask', () => {
490
515
  }
491
516
 
492
517
  pikkuState(null, 'scheduler', 'meta')['error-cleanup-task'] = {
493
- pikkuFuncName: 'scheduler_error-cleanup-task',
518
+ pikkuFuncId: 'scheduler_error-cleanup-task',
494
519
  name: 'error-cleanup-task',
495
520
  schedule: '0 0 * * *',
496
521
  }
497
522
  pikkuState(null, 'function', 'meta')['scheduler_error-cleanup-task'] = {
498
- pikkuFuncName: 'scheduler_error-cleanup-task',
523
+ pikkuFuncId: 'scheduler_error-cleanup-task',
499
524
  inputSchemaName: null,
500
525
  outputSchemaName: null,
501
526
  }
502
527
  wireScheduler(mockTask)
503
528
 
504
529
  const mockLogger = createMockLogger()
530
+ pikkuState(null, 'package', 'singletonServices', {
531
+ logger: mockLogger,
532
+ } as any)
533
+ pikkuState(null, 'package', 'factories', {
534
+ createWireServices: async () => mockWireService as any,
535
+ } as any)
505
536
 
506
537
  await assert.rejects(async () => {
507
538
  await runScheduledTask({
508
539
  name: 'error-cleanup-task',
509
- singletonServices: { logger: mockLogger } as any,
510
- createWireServices: async () => mockWireService as any,
511
540
  })
512
541
  })
513
542
 
@@ -527,23 +556,25 @@ describe('runScheduledTask', () => {
527
556
  }
528
557
 
529
558
  pikkuState(null, 'scheduler', 'meta')['error-task'] = {
530
- pikkuFuncName: 'scheduler_error-task',
559
+ pikkuFuncId: 'scheduler_error-task',
531
560
  name: 'error-task',
532
561
  schedule: '0 0 * * *',
533
562
  }
534
563
  pikkuState(null, 'function', 'meta')['scheduler_error-task'] = {
535
- pikkuFuncName: 'scheduler_error-task',
564
+ pikkuFuncId: 'scheduler_error-task',
536
565
  inputSchemaName: null,
537
566
  outputSchemaName: null,
538
567
  }
539
568
  wireScheduler(mockTask)
540
569
 
541
570
  const mockLogger = createMockLogger()
571
+ pikkuState(null, 'package', 'singletonServices', {
572
+ logger: mockLogger,
573
+ } as any)
542
574
 
543
575
  await assert.rejects(async () => {
544
576
  await runScheduledTask({
545
577
  name: 'error-task',
546
- singletonServices: { logger: mockLogger } as any,
547
578
  })
548
579
  })
549
580
 
@@ -574,22 +605,24 @@ describe('runScheduledTask', () => {
574
605
  }
575
606
 
576
607
  pikkuState(null, 'scheduler', 'meta')['middleware-task'] = {
577
- pikkuFuncName: 'scheduler_middleware-task',
608
+ pikkuFuncId: 'scheduler_middleware-task',
578
609
  name: 'middleware-task',
579
610
  schedule: '0 0 * * *',
580
611
  }
581
612
  pikkuState(null, 'function', 'meta')['scheduler_middleware-task'] = {
582
- pikkuFuncName: 'scheduler_middleware-task',
613
+ pikkuFuncId: 'scheduler_middleware-task',
583
614
  inputSchemaName: null,
584
615
  outputSchemaName: null,
585
616
  }
586
617
  wireScheduler(mockTask)
587
618
 
588
619
  const mockLogger = createMockLogger()
620
+ pikkuState(null, 'package', 'singletonServices', {
621
+ logger: mockLogger,
622
+ } as any)
589
623
 
590
624
  await runScheduledTask({
591
625
  name: 'middleware-task',
592
- singletonServices: { logger: mockLogger } as any,
593
626
  })
594
627
 
595
628
  assert.deepEqual(executionOrder, ['middleware', 'task'])
@@ -608,7 +641,7 @@ describe('getScheduledTasks', () => {
608
641
  }
609
642
 
610
643
  pikkuState(null, 'scheduler', 'meta')['test-task'] = {
611
- pikkuFuncName: 'scheduler_test-task',
644
+ pikkuFuncId: 'scheduler_test-task',
612
645
  name: 'test-task',
613
646
  schedule: '0 0 * * *',
614
647
  }
@@ -1,17 +1,18 @@
1
- import {
2
- PikkuWire,
3
- type CoreServices,
4
- type CoreSingletonServices,
5
- type CoreUserSession,
6
- type CreateWireServices,
7
- } from '../../types/core.types.js'
1
+ import type { PikkuWire, CoreUserSession } from '../../types/core.types.js'
8
2
  import type { CoreScheduledTask } from './scheduler.types.js'
9
3
  import { getErrorResponse, PikkuError } from '../../errors/error-handler.js'
10
- import { closeWireServices } from '../../utils.js'
11
- import { pikkuState } from '../../pikku-state.js'
4
+ import { PikkuMissingMetaError } from '../../errors/errors.js'
5
+ import {
6
+ getSingletonServices,
7
+ getCreateWireServices,
8
+ pikkuState,
9
+ } from '../../pikku-state.js'
12
10
  import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
13
- import { PikkuSessionService } from '../../services/user-session-service.js'
14
11
  import {
12
+ PikkuSessionService,
13
+ createMiddlewareSessionWireProps,
14
+ } from '../../services/user-session-service.js'
15
+ import type {
15
16
  CorePikkuFunctionConfig,
16
17
  CorePikkuFunctionSessionless,
17
18
  } from '../../function/functions.types.js'
@@ -19,12 +20,6 @@ import {
19
20
  export type RunScheduledTasksParams = {
20
21
  name: string
21
22
  session?: CoreUserSession
22
- singletonServices: CoreSingletonServices
23
- createWireServices?: CreateWireServices<
24
- CoreSingletonServices,
25
- CoreServices<CoreSingletonServices>,
26
- CoreUserSession
27
- >
28
23
  }
29
24
 
30
25
  export const wireScheduler = <
@@ -37,9 +32,11 @@ export const wireScheduler = <
37
32
  const meta = pikkuState(null, 'scheduler', 'meta')
38
33
  const taskMeta = meta[scheduledTask.name]
39
34
  if (!taskMeta) {
40
- throw new Error('Task metadata not found')
35
+ throw new PikkuMissingMetaError(
36
+ `Missing generated metadata for scheduled task '${scheduledTask.name}'`
37
+ )
41
38
  }
42
- addFunction(taskMeta.pikkuFuncName, {
39
+ addFunction(taskMeta.pikkuFuncId, {
43
40
  func: scheduledTask.func.func,
44
41
  auth: scheduledTask.func.auth,
45
42
  permissions: scheduledTask.func.permissions,
@@ -72,10 +69,9 @@ class ScheduledTaskSkippedError extends PikkuError {
72
69
  export async function runScheduledTask({
73
70
  name,
74
71
  session,
75
- singletonServices,
76
- createWireServices,
77
72
  }: RunScheduledTasksParams): Promise<void> {
78
- let wireServices: any
73
+ const singletonServices = getSingletonServices()
74
+ const createWireServices = getCreateWireServices()
79
75
  const task = pikkuState(null, 'scheduler', 'tasks').get(name)
80
76
  const meta = pikkuState(null, 'scheduler', 'meta')[name]
81
77
 
@@ -103,7 +99,7 @@ export async function runScheduledTask({
103
99
  throw new ScheduledTaskSkippedError(name, reason)
104
100
  },
105
101
  },
106
- session: userSession,
102
+ ...createMiddlewareSessionWireProps(userSession),
107
103
  }
108
104
 
109
105
  try {
@@ -111,7 +107,7 @@ export async function runScheduledTask({
111
107
  `Running schedule task: ${name} | schedule: ${task.schedule}`
112
108
  )
113
109
 
114
- await runPikkuFunc('scheduler', meta.name, meta.pikkuFuncName, {
110
+ await runPikkuFunc('scheduler', meta.name, meta.pikkuFuncId, {
115
111
  singletonServices,
116
112
  createWireServices,
117
113
  auth: false,
@@ -120,6 +116,7 @@ export async function runScheduledTask({
120
116
  wireMiddleware: task.middleware,
121
117
  tags: task.tags,
122
118
  wire,
119
+ sessionService: userSession,
123
120
  })
124
121
  } catch (e: any) {
125
122
  const errorResponse = getErrorResponse(e)
@@ -127,10 +124,6 @@ export async function runScheduledTask({
127
124
  singletonServices.logger.error(e)
128
125
  }
129
126
  throw e
130
- } finally {
131
- if (wireServices) {
132
- await closeWireServices(singletonServices.logger, wireServices)
133
- }
134
127
  }
135
128
  }
136
129
 
@@ -1,9 +1,9 @@
1
- import {
1
+ import type {
2
2
  CoreUserSession,
3
3
  CorePikkuMiddleware,
4
4
  CommonWireMeta,
5
5
  } from '../../types/core.types.js'
6
- import {
6
+ import type {
7
7
  CorePikkuFunctionConfig,
8
8
  CorePikkuFunctionSessionless,
9
9
  } from '../../function/functions.types.js'
@@ -0,0 +1,9 @@
1
+ export { wireSecret } from './secret.types.js'
2
+ export type {
3
+ CoreSecret,
4
+ OAuth2CredentialConfig,
5
+ SecretDefinitionMeta,
6
+ SecretDefinitionsMeta,
7
+ SecretDefinitions,
8
+ } from './secret.types.js'
9
+ export { validateAndBuildSecretDefinitionsMeta } from './validate-secret-definitions.js'
@@ -0,0 +1,32 @@
1
+ export type CoreSecret<T = unknown> = {
2
+ name: string
3
+ displayName: string
4
+ description?: string
5
+ secretId: string
6
+ schema: T
7
+ }
8
+
9
+ export type OAuth2CredentialConfig = {
10
+ tokenSecretId: string
11
+ authorizationUrl: string
12
+ tokenUrl: string
13
+ scopes: string[]
14
+ pkce?: boolean
15
+ additionalParams?: Record<string, string>
16
+ }
17
+
18
+ export type SecretDefinitionMeta = {
19
+ name: string
20
+ displayName: string
21
+ description?: string
22
+ secretId: string
23
+ schema?: Record<string, unknown> | string
24
+ oauth2?: OAuth2CredentialConfig
25
+ sourceFile?: string
26
+ }
27
+
28
+ export type SecretDefinitionsMeta = Record<string, SecretDefinitionMeta>
29
+
30
+ export type SecretDefinitions = SecretDefinitionMeta[]
31
+
32
+ export const wireSecret = <T>(_config: CoreSecret<T>): void => {}
@@ -0,0 +1,140 @@
1
+ import { describe, test } from 'node:test'
2
+ import assert from 'node:assert'
3
+ import { validateAndBuildSecretDefinitionsMeta } from './validate-secret-definitions.js'
4
+
5
+ describe('validateAndBuildSecretDefinitionsMeta', () => {
6
+ test('should build meta from single definition', () => {
7
+ const definitions = [
8
+ {
9
+ name: 'stripe',
10
+ displayName: 'Stripe',
11
+ description: 'API key',
12
+ secretId: 'STRIPE_KEY',
13
+ sourceFile: 'a.ts',
14
+ },
15
+ ]
16
+ const result = validateAndBuildSecretDefinitionsMeta(
17
+ definitions as any,
18
+ new Map()
19
+ )
20
+ assert.ok(result['stripe'])
21
+ assert.strictEqual(result['stripe'].secretId, 'STRIPE_KEY')
22
+ assert.strictEqual(result['stripe'].displayName, 'Stripe')
23
+ })
24
+
25
+ test('should allow duplicate secretId with same schema', () => {
26
+ const schemaLookup = new Map([
27
+ ['schema1', { variableName: 'Schema', sourceFile: 'types.ts' }],
28
+ ])
29
+ const definitions = [
30
+ {
31
+ name: 'cred1',
32
+ displayName: 'Cred 1',
33
+ description: 'd',
34
+ secretId: 'SHARED',
35
+ schema: 'schema1',
36
+ sourceFile: 'a.ts',
37
+ },
38
+ {
39
+ name: 'cred2',
40
+ displayName: 'Cred 2',
41
+ description: 'd',
42
+ secretId: 'SHARED',
43
+ schema: 'schema1',
44
+ sourceFile: 'b.ts',
45
+ },
46
+ ]
47
+ const result = validateAndBuildSecretDefinitionsMeta(
48
+ definitions as any,
49
+ schemaLookup
50
+ )
51
+ assert.ok(result['cred1'])
52
+ assert.ok(result['cred2'])
53
+ })
54
+
55
+ test('should throw when duplicate secretId has different schemas', () => {
56
+ const schemaLookup = new Map([
57
+ ['schema1', { variableName: 'SchemaA', sourceFile: 'types.ts' }],
58
+ ['schema2', { variableName: 'SchemaB', sourceFile: 'types2.ts' }],
59
+ ])
60
+ const definitions = [
61
+ {
62
+ name: 'cred1',
63
+ displayName: 'Cred 1',
64
+ description: 'd',
65
+ secretId: 'SHARED',
66
+ schema: 'schema1',
67
+ sourceFile: 'a.ts',
68
+ },
69
+ {
70
+ name: 'cred2',
71
+ displayName: 'Cred 2',
72
+ description: 'd',
73
+ secretId: 'SHARED',
74
+ schema: 'schema2',
75
+ sourceFile: 'b.ts',
76
+ },
77
+ ]
78
+ assert.throws(
79
+ () =>
80
+ validateAndBuildSecretDefinitionsMeta(definitions as any, schemaLookup),
81
+ (err: any) => err.message.includes('different schemas')
82
+ )
83
+ })
84
+
85
+ test('should throw when duplicate secretId has different oauth2 configs', () => {
86
+ const definitions = [
87
+ {
88
+ name: 'cred1',
89
+ displayName: 'C1',
90
+ description: 'd',
91
+ secretId: 'OAUTH',
92
+ oauth2: { provider: 'google' },
93
+ sourceFile: 'a.ts',
94
+ },
95
+ {
96
+ name: 'cred2',
97
+ displayName: 'C2',
98
+ description: 'd',
99
+ secretId: 'OAUTH',
100
+ oauth2: { provider: 'github' },
101
+ sourceFile: 'b.ts',
102
+ },
103
+ ]
104
+ assert.throws(
105
+ () =>
106
+ validateAndBuildSecretDefinitionsMeta(definitions as any, new Map()),
107
+ (err: any) => err.message.includes('different configurations')
108
+ )
109
+ })
110
+
111
+ test('should handle empty definitions', () => {
112
+ const result = validateAndBuildSecretDefinitionsMeta([], new Map())
113
+ assert.deepStrictEqual(result, {})
114
+ })
115
+
116
+ test('should not duplicate names in meta', () => {
117
+ const definitions = [
118
+ {
119
+ name: 'same',
120
+ displayName: 'Same',
121
+ description: 'd',
122
+ secretId: 'KEY1',
123
+ sourceFile: 'a.ts',
124
+ },
125
+ {
126
+ name: 'same',
127
+ displayName: 'Same',
128
+ description: 'd',
129
+ secretId: 'KEY2',
130
+ sourceFile: 'b.ts',
131
+ },
132
+ ]
133
+ const result = validateAndBuildSecretDefinitionsMeta(
134
+ definitions as any,
135
+ new Map()
136
+ )
137
+ assert.ok(result['same'])
138
+ assert.strictEqual(result['same'].secretId, 'KEY1')
139
+ })
140
+ })