@pikku/core 0.11.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/crypto-utils.d.ts +2 -0
  3. package/dist/crypto-utils.js +78 -0
  4. package/dist/errors/error-handler.js +3 -3
  5. package/dist/errors/errors.d.ts +8 -0
  6. package/dist/errors/errors.js +16 -0
  7. package/dist/errors/index.d.ts +0 -1
  8. package/dist/errors/index.js +0 -1
  9. package/dist/function/function-runner.d.ts +10 -3
  10. package/dist/function/function-runner.js +136 -31
  11. package/dist/function/functions.types.d.ts +35 -12
  12. package/dist/function/functions.types.js +16 -6
  13. package/dist/function/index.d.ts +2 -2
  14. package/dist/function/index.js +1 -2
  15. package/dist/handle-error.js +1 -10
  16. package/dist/index.d.ts +30 -24
  17. package/dist/index.js +19 -27
  18. package/dist/middleware/auth-apikey.d.ts +1 -1
  19. package/dist/middleware/auth-apikey.js +3 -3
  20. package/dist/middleware/auth-bearer.d.ts +1 -1
  21. package/dist/middleware/auth-bearer.js +3 -6
  22. package/dist/middleware/auth-cookie.d.ts +1 -1
  23. package/dist/middleware/auth-cookie.js +6 -8
  24. package/dist/middleware/cors.d.ts +46 -0
  25. package/dist/middleware/cors.js +73 -0
  26. package/dist/middleware/index.d.ts +5 -3
  27. package/dist/middleware/index.js +5 -3
  28. package/dist/middleware/remote-auth.d.ts +5 -0
  29. package/dist/middleware/remote-auth.js +55 -0
  30. package/dist/middleware/timeout.d.ts +1 -1
  31. package/dist/middleware-runner.d.ts +3 -14
  32. package/dist/middleware-runner.js +14 -16
  33. package/dist/permissions.d.ts +3 -86
  34. package/dist/permissions.js +20 -80
  35. package/dist/pikku-state.d.ts +33 -104
  36. package/dist/pikku-state.js +150 -66
  37. package/dist/schema.d.ts +8 -6
  38. package/dist/schema.js +31 -18
  39. package/dist/services/ai-agent-runner-service.d.ts +24 -0
  40. package/dist/services/ai-agent-runner-service.js +1 -0
  41. package/dist/services/ai-run-state-service.d.ts +13 -0
  42. package/dist/services/ai-run-state-service.js +1 -0
  43. package/dist/services/ai-storage-service.d.ts +18 -0
  44. package/dist/services/ai-storage-service.js +1 -0
  45. package/dist/services/deployment-service.d.ts +19 -0
  46. package/dist/services/deployment-service.js +1 -0
  47. package/dist/services/gopass-secrets.d.ts +47 -0
  48. package/dist/services/gopass-secrets.js +94 -0
  49. package/dist/services/in-memory-trigger-service.d.ts +23 -0
  50. package/dist/services/in-memory-trigger-service.js +50 -0
  51. package/dist/services/in-memory-workflow-service.d.ts +59 -0
  52. package/dist/services/in-memory-workflow-service.js +287 -0
  53. package/dist/services/index.d.ts +25 -11
  54. package/dist/services/index.js +10 -13
  55. package/dist/services/local-secrets.d.ts +23 -0
  56. package/dist/services/local-secrets.js +45 -0
  57. package/dist/services/local-variables.d.ts +5 -0
  58. package/dist/services/local-variables.js +18 -0
  59. package/dist/services/scheduler-service.d.ts +21 -1
  60. package/dist/services/scheduler-service.js +14 -0
  61. package/dist/services/schema-service.d.ts +6 -0
  62. package/dist/services/scoped-secret-service.d.ts +16 -0
  63. package/dist/services/scoped-secret-service.js +35 -0
  64. package/dist/services/secret-service.d.ts +25 -4
  65. package/dist/services/trigger-service.d.ts +23 -0
  66. package/dist/services/trigger-service.js +1 -0
  67. package/dist/services/typed-secret-service.d.ts +30 -0
  68. package/dist/services/typed-secret-service.js +40 -0
  69. package/dist/services/typed-variables-service.d.ts +27 -0
  70. package/dist/services/typed-variables-service.js +46 -0
  71. package/dist/services/user-session-service.d.ts +13 -0
  72. package/dist/services/user-session-service.js +17 -0
  73. package/dist/services/variables-service.d.ts +5 -0
  74. package/dist/services/workflow-service.d.ts +43 -0
  75. package/dist/services/workflow-service.js +1 -0
  76. package/dist/types/core.types.d.ts +54 -10
  77. package/dist/types/core.types.js +7 -0
  78. package/dist/types/state.types.d.ts +127 -0
  79. package/dist/types/state.types.js +1 -0
  80. package/dist/utils.d.ts +10 -1
  81. package/dist/utils.js +60 -3
  82. package/dist/version.d.ts +6 -0
  83. package/dist/version.js +19 -0
  84. package/dist/wirings/ai-agent/ai-agent-memory.d.ts +29 -0
  85. package/dist/wirings/ai-agent/ai-agent-memory.js +199 -0
  86. package/dist/wirings/ai-agent/ai-agent-model-config.d.ts +9 -0
  87. package/dist/wirings/ai-agent/ai-agent-model-config.js +36 -0
  88. package/dist/wirings/ai-agent/ai-agent-prepare.d.ts +60 -0
  89. package/dist/wirings/ai-agent/ai-agent-prepare.js +312 -0
  90. package/dist/wirings/ai-agent/ai-agent-registry.d.ts +15 -0
  91. package/dist/wirings/ai-agent/ai-agent-registry.js +47 -0
  92. package/dist/wirings/ai-agent/ai-agent-runner.d.ts +3 -0
  93. package/dist/wirings/ai-agent/ai-agent-runner.js +96 -0
  94. package/dist/wirings/ai-agent/ai-agent-stream.d.ts +11 -0
  95. package/dist/wirings/ai-agent/ai-agent-stream.js +503 -0
  96. package/dist/wirings/ai-agent/ai-agent.types.d.ts +254 -0
  97. package/dist/wirings/ai-agent/ai-agent.types.js +1 -0
  98. package/dist/wirings/ai-agent/index.d.ts +5 -0
  99. package/dist/wirings/ai-agent/index.js +4 -0
  100. package/dist/wirings/channel/channel-common.d.ts +7 -4
  101. package/dist/wirings/channel/channel-common.js +15 -8
  102. package/dist/wirings/channel/channel-handler.js +13 -4
  103. package/dist/wirings/channel/channel-middleware-runner.d.ts +9 -0
  104. package/dist/wirings/channel/channel-middleware-runner.js +73 -0
  105. package/dist/wirings/channel/channel-runner.js +12 -12
  106. package/dist/wirings/channel/channel.types.d.ts +5 -1
  107. package/dist/wirings/channel/define-channel-routes.d.ts +21 -0
  108. package/dist/wirings/channel/define-channel-routes.js +23 -0
  109. package/dist/wirings/channel/index.d.ts +10 -8
  110. package/dist/wirings/channel/index.js +7 -8
  111. package/dist/wirings/channel/local/index.d.ts +3 -3
  112. package/dist/wirings/channel/local/index.js +3 -3
  113. package/dist/wirings/channel/local/local-channel-runner.js +18 -6
  114. package/dist/wirings/channel/log-channels.js +1 -1
  115. package/dist/wirings/channel/serverless/index.d.ts +1 -1
  116. package/dist/wirings/channel/serverless/index.js +1 -1
  117. package/dist/wirings/channel/serverless/serverless-channel-runner.js +17 -6
  118. package/dist/wirings/cli/channel/cli-channel-runner.js +3 -2
  119. package/dist/wirings/cli/channel/index.d.ts +1 -1
  120. package/dist/wirings/cli/channel/index.js +1 -1
  121. package/dist/wirings/cli/cli-runner.d.ts +1 -1
  122. package/dist/wirings/cli/cli-runner.js +22 -18
  123. package/dist/wirings/cli/cli.types.d.ts +7 -6
  124. package/dist/wirings/cli/define-cli-commands.d.ts +19 -0
  125. package/dist/wirings/cli/define-cli-commands.js +20 -0
  126. package/dist/wirings/cli/index.d.ts +2 -3
  127. package/dist/wirings/cli/index.js +1 -3
  128. package/dist/wirings/http/http-routes.d.ts +69 -0
  129. package/dist/wirings/http/http-routes.js +139 -0
  130. package/dist/wirings/http/http-runner.d.ts +2 -2
  131. package/dist/wirings/http/http-runner.js +62 -27
  132. package/dist/wirings/http/http.types.d.ts +77 -24
  133. package/dist/wirings/http/index.d.ts +5 -4
  134. package/dist/wirings/http/index.js +4 -3
  135. package/dist/wirings/http/log-http-routes.js +1 -1
  136. package/dist/wirings/http/routers/path-to-regex.js +2 -2
  137. package/dist/wirings/mcp/index.d.ts +4 -3
  138. package/dist/wirings/mcp/index.js +3 -3
  139. package/dist/wirings/mcp/mcp-runner.d.ts +1 -3
  140. package/dist/wirings/mcp/mcp-runner.js +42 -56
  141. package/dist/wirings/mcp/mcp.types.d.ts +3 -3
  142. package/dist/wirings/node/index.d.ts +2 -0
  143. package/dist/wirings/node/index.js +1 -0
  144. package/dist/wirings/node/node.types.d.ts +20 -0
  145. package/dist/wirings/node/node.types.js +1 -0
  146. package/dist/wirings/oauth2/index.d.ts +3 -0
  147. package/dist/wirings/oauth2/index.js +2 -0
  148. package/dist/wirings/oauth2/oauth2-client.d.ts +47 -0
  149. package/dist/wirings/oauth2/oauth2-client.js +267 -0
  150. package/dist/wirings/oauth2/oauth2.types.d.ts +65 -0
  151. package/dist/wirings/oauth2/oauth2.types.js +4 -0
  152. package/dist/wirings/oauth2/wire-oauth2-credential.d.ts +20 -0
  153. package/dist/wirings/oauth2/wire-oauth2-credential.js +21 -0
  154. package/dist/wirings/queue/index.d.ts +2 -2
  155. package/dist/wirings/queue/index.js +1 -1
  156. package/dist/wirings/queue/queue-runner.d.ts +7 -0
  157. package/dist/wirings/queue/queue-runner.js +23 -12
  158. package/dist/wirings/queue/queue.types.d.ts +8 -2
  159. package/dist/wirings/rpc/index.d.ts +1 -1
  160. package/dist/wirings/rpc/index.js +1 -1
  161. package/dist/wirings/rpc/rpc-runner.d.ts +40 -13
  162. package/dist/wirings/rpc/rpc-runner.js +191 -25
  163. package/dist/wirings/rpc/rpc-types.d.ts +15 -4
  164. package/dist/wirings/scheduler/index.d.ts +3 -3
  165. package/dist/wirings/scheduler/index.js +2 -3
  166. package/dist/wirings/scheduler/log-schedulers.js +1 -1
  167. package/dist/wirings/scheduler/scheduler-runner.d.ts +5 -0
  168. package/dist/wirings/scheduler/scheduler-runner.js +28 -10
  169. package/dist/wirings/secret/index.d.ts +3 -0
  170. package/dist/wirings/secret/index.js +2 -0
  171. package/dist/wirings/secret/secret.types.d.ts +27 -0
  172. package/dist/wirings/secret/secret.types.js +1 -0
  173. package/dist/wirings/secret/validate-secret-definitions.d.ts +6 -0
  174. package/dist/wirings/secret/validate-secret-definitions.js +55 -0
  175. package/dist/wirings/trigger/index.d.ts +3 -0
  176. package/dist/wirings/trigger/index.js +2 -0
  177. package/dist/wirings/trigger/pikku-trigger-service.d.ts +26 -0
  178. package/dist/wirings/trigger/pikku-trigger-service.js +75 -0
  179. package/dist/wirings/trigger/trigger-runner.d.ts +42 -0
  180. package/dist/wirings/trigger/trigger-runner.js +85 -0
  181. package/dist/wirings/trigger/trigger.types.d.ts +130 -0
  182. package/dist/wirings/trigger/trigger.types.js +40 -0
  183. package/dist/wirings/variable/index.d.ts +3 -0
  184. package/dist/wirings/variable/index.js +2 -0
  185. package/dist/wirings/variable/validate-variable-definitions.d.ts +6 -0
  186. package/dist/wirings/variable/validate-variable-definitions.js +45 -0
  187. package/dist/wirings/variable/variable.types.d.ts +18 -0
  188. package/dist/wirings/variable/variable.types.js +1 -0
  189. package/dist/wirings/workflow/dsl/index.d.ts +5 -0
  190. package/dist/wirings/workflow/dsl/index.js +4 -0
  191. package/dist/wirings/workflow/dsl/workflow-dsl.types.d.ts +292 -0
  192. package/dist/wirings/workflow/dsl/workflow-dsl.types.js +5 -0
  193. package/dist/wirings/workflow/dsl/workflow-runner.d.ts +5 -0
  194. package/dist/wirings/workflow/dsl/workflow-runner.js +23 -0
  195. package/dist/wirings/workflow/graph/graph-node.d.ts +117 -0
  196. package/dist/wirings/workflow/graph/graph-node.js +58 -0
  197. package/dist/wirings/workflow/graph/graph-runner.d.ts +9 -0
  198. package/dist/wirings/workflow/graph/graph-runner.js +540 -0
  199. package/dist/wirings/workflow/graph/index.d.ts +4 -0
  200. package/dist/wirings/workflow/graph/index.js +3 -0
  201. package/dist/wirings/workflow/graph/template.d.ts +15 -0
  202. package/dist/wirings/workflow/graph/template.js +27 -0
  203. package/dist/wirings/workflow/graph/wire-workflow-graph.d.ts +15 -0
  204. package/dist/wirings/workflow/graph/wire-workflow-graph.js +8 -0
  205. package/dist/wirings/workflow/graph/workflow-graph.types.d.ts +82 -0
  206. package/dist/wirings/workflow/graph/workflow-graph.types.js +15 -0
  207. package/dist/wirings/workflow/index.d.ts +7 -12
  208. package/dist/wirings/workflow/index.js +8 -11
  209. package/dist/wirings/workflow/pikku-workflow-service.d.ts +114 -10
  210. package/dist/wirings/workflow/pikku-workflow-service.js +386 -115
  211. package/dist/wirings/workflow/workflow-helpers.d.ts +36 -0
  212. package/dist/wirings/workflow/workflow-helpers.js +38 -0
  213. package/dist/wirings/workflow/workflow-utils.d.ts +1 -0
  214. package/dist/wirings/workflow/workflow-utils.js +1 -0
  215. package/dist/wirings/workflow/workflow.types.d.ts +83 -214
  216. package/package.json +13 -6
  217. package/run-tests.sh +4 -1
  218. package/src/crypto-utils.ts +99 -0
  219. package/src/errors/error-handler.ts +3 -3
  220. package/src/errors/errors.ts +17 -0
  221. package/src/errors/index.ts +0 -1
  222. package/src/factory-functions.test.ts +42 -2
  223. package/src/function/function-runner.test.ts +5 -12
  224. package/src/function/function-runner.ts +195 -40
  225. package/src/function/functions.types.ts +66 -14
  226. package/src/function/index.ts +5 -2
  227. package/src/handle-error.ts +2 -10
  228. package/src/index.ts +106 -27
  229. package/src/middleware/auth-apikey.test.ts +15 -12
  230. package/src/middleware/auth-apikey.ts +3 -3
  231. package/src/middleware/auth-bearer.test.ts +17 -14
  232. package/src/middleware/auth-bearer.ts +25 -27
  233. package/src/middleware/auth-cookie.test.ts +16 -13
  234. package/src/middleware/auth-cookie.ts +6 -8
  235. package/src/middleware/cors.ts +96 -0
  236. package/src/middleware/index.ts +5 -3
  237. package/src/middleware/remote-auth.ts +68 -0
  238. package/src/middleware-runner.test.ts +122 -0
  239. package/src/middleware-runner.ts +24 -17
  240. package/src/permissions.test.ts +102 -86
  241. package/src/permissions.ts +32 -93
  242. package/src/pikku-state.ts +168 -201
  243. package/src/run-tests-script.test.ts +49 -0
  244. package/src/schema.ts +50 -18
  245. package/src/services/ai-agent-runner-service.ts +29 -0
  246. package/src/services/ai-run-state-service.ts +20 -0
  247. package/src/services/ai-storage-service.ts +39 -0
  248. package/src/services/deployment-service.ts +22 -0
  249. package/src/services/gopass-secrets.ts +95 -0
  250. package/src/services/in-memory-trigger-service.ts +68 -0
  251. package/src/services/in-memory-workflow-service.ts +395 -0
  252. package/src/services/index.ts +49 -14
  253. package/src/services/local-secrets.ts +51 -0
  254. package/src/services/local-variables.ts +22 -0
  255. package/src/services/scheduler-service.ts +29 -1
  256. package/src/services/schema-service.ts +7 -0
  257. package/src/services/scoped-secret-service.ts +41 -0
  258. package/src/services/secret-service.ts +25 -4
  259. package/src/services/trigger-service.ts +38 -0
  260. package/src/services/typed-secret-service.ts +70 -0
  261. package/src/services/typed-variables-service.ts +81 -0
  262. package/src/services/user-session-service.ts +23 -0
  263. package/src/services/variables-service.ts +5 -0
  264. package/src/services/workflow-service.ts +94 -0
  265. package/src/types/core.types.ts +82 -8
  266. package/src/types/state.types.ts +169 -0
  267. package/src/utils.ts +74 -5
  268. package/src/version.test.ts +80 -0
  269. package/src/version.ts +25 -0
  270. package/src/wirings/ai-agent/ai-agent-memory.ts +300 -0
  271. package/src/wirings/ai-agent/ai-agent-model-config.ts +43 -0
  272. package/src/wirings/ai-agent/ai-agent-prepare.ts +470 -0
  273. package/src/wirings/ai-agent/ai-agent-registry.test.ts +37 -0
  274. package/src/wirings/ai-agent/ai-agent-registry.ts +82 -0
  275. package/src/wirings/ai-agent/ai-agent-runner.test.ts +75 -0
  276. package/src/wirings/ai-agent/ai-agent-runner.ts +137 -0
  277. package/src/wirings/ai-agent/ai-agent-stream.test.ts +246 -0
  278. package/src/wirings/ai-agent/ai-agent-stream.ts +774 -0
  279. package/src/wirings/ai-agent/ai-agent.types.ts +273 -0
  280. package/src/wirings/ai-agent/index.ts +28 -0
  281. package/src/wirings/channel/channel-common.ts +32 -19
  282. package/src/wirings/channel/channel-handler.ts +18 -5
  283. package/src/wirings/channel/channel-middleware-runner.ts +119 -0
  284. package/src/wirings/channel/channel-runner.ts +14 -15
  285. package/src/wirings/channel/channel.types.ts +17 -1
  286. package/src/wirings/channel/define-channel-routes.ts +25 -0
  287. package/src/wirings/channel/index.ts +23 -8
  288. package/src/wirings/channel/local/index.ts +3 -3
  289. package/src/wirings/channel/local/local-channel-runner.test.ts +47 -2
  290. package/src/wirings/channel/local/local-channel-runner.ts +22 -6
  291. package/src/wirings/channel/log-channels.ts +1 -1
  292. package/src/wirings/channel/serverless/index.ts +5 -1
  293. package/src/wirings/channel/serverless/serverless-channel-runner.ts +22 -6
  294. package/src/wirings/cli/channel/cli-channel-runner.ts +4 -3
  295. package/src/wirings/cli/channel/index.ts +1 -1
  296. package/src/wirings/cli/cli-runner.test.ts +28 -28
  297. package/src/wirings/cli/cli-runner.ts +27 -19
  298. package/src/wirings/cli/cli.types.ts +12 -11
  299. package/src/wirings/cli/command-parser.test.ts +8 -8
  300. package/src/wirings/cli/define-cli-commands.ts +24 -0
  301. package/src/wirings/cli/index.ts +10 -4
  302. package/src/wirings/http/http-routes.test.ts +322 -0
  303. package/src/wirings/http/http-routes.ts +198 -0
  304. package/src/wirings/http/http-runner.test.ts +5 -5
  305. package/src/wirings/http/http-runner.ts +80 -29
  306. package/src/wirings/http/http.types.ts +121 -23
  307. package/src/wirings/http/index.ts +16 -4
  308. package/src/wirings/http/log-http-routes.ts +1 -1
  309. package/src/wirings/http/routers/path-to-regex.test.ts +30 -19
  310. package/src/wirings/http/routers/path-to-regex.ts +2 -2
  311. package/src/wirings/mcp/index.ts +27 -3
  312. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +3 -3
  313. package/src/wirings/mcp/mcp-runner.ts +56 -67
  314. package/src/wirings/mcp/mcp.types.ts +3 -3
  315. package/src/wirings/node/index.ts +2 -0
  316. package/src/wirings/node/node.types.ts +23 -0
  317. package/src/wirings/oauth2/index.ts +3 -0
  318. package/src/wirings/oauth2/oauth2-client.test.ts +929 -0
  319. package/src/wirings/oauth2/oauth2-client.ts +335 -0
  320. package/src/wirings/oauth2/oauth2.types.ts +69 -0
  321. package/src/wirings/oauth2/wire-oauth2-credential.ts +23 -0
  322. package/src/wirings/queue/index.ts +14 -2
  323. package/src/wirings/queue/queue-runner.test.ts +115 -73
  324. package/src/wirings/queue/queue-runner.ts +39 -13
  325. package/src/wirings/queue/queue.types.ts +12 -2
  326. package/src/wirings/rpc/index.ts +1 -1
  327. package/src/wirings/rpc/rpc-runner.ts +270 -34
  328. package/src/wirings/rpc/rpc-types.ts +21 -4
  329. package/src/wirings/scheduler/index.ts +7 -4
  330. package/src/wirings/scheduler/log-schedulers.ts +1 -1
  331. package/src/wirings/scheduler/scheduler-runner.test.ts +97 -53
  332. package/src/wirings/scheduler/scheduler-runner.ts +50 -10
  333. package/src/wirings/secret/index.ts +9 -0
  334. package/src/wirings/secret/secret.types.ts +32 -0
  335. package/src/wirings/secret/validate-secret-definitions.ts +82 -0
  336. package/src/wirings/trigger/index.ts +10 -0
  337. package/src/wirings/trigger/pikku-trigger-service.ts +134 -0
  338. package/src/wirings/trigger/trigger-runner.ts +138 -0
  339. package/src/wirings/trigger/trigger.types.ts +178 -0
  340. package/src/wirings/variable/index.ts +8 -0
  341. package/src/wirings/variable/validate-variable-definitions.ts +69 -0
  342. package/src/wirings/variable/variable.types.ts +22 -0
  343. package/src/wirings/workflow/dsl/index.ts +31 -0
  344. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +320 -0
  345. package/src/wirings/workflow/dsl/workflow-runner.ts +28 -0
  346. package/src/wirings/workflow/graph/graph-node.ts +222 -0
  347. package/src/wirings/workflow/graph/graph-runner.test.ts +495 -0
  348. package/src/wirings/workflow/graph/graph-runner.ts +816 -0
  349. package/src/wirings/workflow/graph/index.ts +14 -0
  350. package/src/wirings/workflow/graph/template.ts +42 -0
  351. package/src/wirings/workflow/graph/wire-workflow-graph.ts +29 -0
  352. package/src/wirings/workflow/graph/workflow-graph.types.ts +104 -0
  353. package/src/wirings/workflow/index.ts +64 -26
  354. package/src/wirings/workflow/pikku-workflow-service.test.ts +212 -0
  355. package/src/wirings/workflow/pikku-workflow-service.ts +571 -136
  356. package/src/wirings/workflow/workflow-helpers.ts +79 -0
  357. package/src/wirings/workflow/workflow-utils.ts +0 -0
  358. package/src/wirings/workflow/workflow.types.ts +123 -279
  359. package/tsconfig.tsbuildinfo +1 -1
  360. package/dist/wirings/workflow/workflow-runner.d.ts +0 -34
  361. package/dist/wirings/workflow/workflow-runner.js +0 -65
  362. package/src/function/function-runner.ts.bak +0 -188
  363. package/src/wirings/workflow/workflow-runner.ts +0 -72
@@ -0,0 +1,36 @@
1
+ export declare function workflow<TWorkflowMap extends Record<string, {
2
+ input: any;
3
+ output: any;
4
+ }>>(workflowName: string & keyof TWorkflowMap, options?: {
5
+ pollIntervalMs?: number;
6
+ }): {
7
+ func: (services: any, data: any, wire: any) => Promise<any>;
8
+ };
9
+ export declare function workflowStart<TWorkflowMap extends Record<string, {
10
+ input: any;
11
+ output: any;
12
+ }>>(workflowName: string & keyof TWorkflowMap): {
13
+ func: (services: any, data: any, wire: any) => Promise<{
14
+ runId: string;
15
+ }>;
16
+ };
17
+ export declare function workflowStatus<TWorkflowMap extends Record<string, {
18
+ input: any;
19
+ output: any;
20
+ }>>(_workflowName: string & keyof TWorkflowMap): {
21
+ func: (services: any, data: {
22
+ runId: string;
23
+ }) => Promise<{
24
+ id: string;
25
+ status: 'running' | 'suspended' | 'completed' | 'failed' | 'cancelled';
26
+ output?: any;
27
+ error?: {
28
+ message?: string;
29
+ };
30
+ }>;
31
+ };
32
+ export declare function graphStart<TGraphsMap extends Record<string, Record<string, any>>>(graphName: string & keyof TGraphsMap, startNode: string): {
33
+ func: (services: any, data: any, wire: any) => Promise<{
34
+ runId: string;
35
+ }>;
36
+ };
@@ -0,0 +1,38 @@
1
+ import { WorkflowRunNotFoundError } from './pikku-workflow-service.js';
2
+ export function workflow(workflowName, options) {
3
+ return {
4
+ func: async (services, data, { rpc }) => {
5
+ return services.workflowService.runToCompletion(workflowName, data, rpc, options);
6
+ },
7
+ };
8
+ }
9
+ export function workflowStart(workflowName) {
10
+ return {
11
+ func: async (_services, data, { rpc }) => {
12
+ return rpc.startWorkflow(workflowName, data);
13
+ },
14
+ };
15
+ }
16
+ export function workflowStatus(_workflowName) {
17
+ return {
18
+ func: async (services, data) => {
19
+ const run = await services.workflowService.getRun(data.runId);
20
+ if (!run) {
21
+ throw new WorkflowRunNotFoundError(data.runId);
22
+ }
23
+ return {
24
+ id: run.id,
25
+ status: run.status,
26
+ output: run.output,
27
+ error: run.error ? { message: run.error.message } : undefined,
28
+ };
29
+ },
30
+ };
31
+ }
32
+ export function graphStart(graphName, startNode) {
33
+ return {
34
+ func: async (_services, data, { rpc }) => {
35
+ return rpc.startWorkflow(graphName, data, { startNode });
36
+ },
37
+ };
38
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,13 @@
1
- import { SerializedError, CoreSingletonServices, CreateWireServices, CoreConfig, CommonWireMeta } from '../../types/core.types.js';
1
+ import { SerializedError, CommonWireMeta } from '../../types/core.types.js';
2
2
  import { CorePikkuFunctionConfig } from '../../function/functions.types.js';
3
+ export type { WorkflowService } from '../../services/workflow-service.js';
4
+ export type { WorkflowStepOptions, WorkflowWireDoRPC, WorkflowWireDoInline, WorkflowWireSleep, WorkflowWireSuspend, InputSource, OutputBinding, RpcStepMeta, SimpleCondition, Condition, BranchCase, BranchStepMeta, ParallelGroupStepMeta, FanoutStepMeta, ReturnStepMeta, InlineStepMeta, SleepStepMeta, CancelStepMeta, SetStepMeta, SwitchCaseMeta, SwitchStepMeta, FilterStepMeta, ArrayPredicateStepMeta, WorkflowStepMeta, WorkflowStepWire, PikkuWorkflowWire, } from './dsl/workflow-dsl.types.js';
5
+ import type { WorkflowStepMeta } from './dsl/workflow-dsl.types.js';
6
+ export interface WorkflowRunWire {
7
+ type: string;
8
+ id?: string;
9
+ parentRunId?: string;
10
+ }
3
11
  export interface WorkflowServiceConfig {
4
12
  retries: number;
5
13
  retryDelay: number;
@@ -10,11 +18,11 @@ export interface WorkflowServiceConfig {
10
18
  /**
11
19
  * Workflow run status
12
20
  */
13
- export type WorkflowStatus = 'running' | 'completed' | 'failed' | 'cancelled';
21
+ export type WorkflowStatus = 'running' | 'suspended' | 'completed' | 'failed' | 'cancelled';
14
22
  /**
15
23
  * Workflow step status
16
24
  */
17
- export type StepStatus = 'pending' | 'running' | 'scheduled' | 'succeeded' | 'failed';
25
+ export type StepStatus = 'pending' | 'running' | 'scheduled' | 'succeeded' | 'failed' | 'suspended';
18
26
  /**
19
27
  * Workflow run representation
20
28
  */
@@ -31,6 +39,12 @@ export interface WorkflowRun {
31
39
  output?: any;
32
40
  /** Error (if failed) */
33
41
  error?: SerializedError;
42
+ /** If true, workflow executes inline without queues */
43
+ inline?: boolean;
44
+ /** Graph hash of the workflow definition at run creation time */
45
+ graphHash?: string;
46
+ /** Wire origin info (how this run was started) */
47
+ wire: WorkflowRunWire;
34
48
  /** Creation timestamp */
35
49
  createdAt: Date;
36
50
  /** Last update timestamp */
@@ -67,6 +81,29 @@ export interface StepState {
67
81
  /** Timestamp when step failed */
68
82
  failedAt?: Date;
69
83
  }
84
+ export interface WorkflowRunService {
85
+ listRuns(options?: {
86
+ workflowName?: string;
87
+ status?: string;
88
+ limit?: number;
89
+ offset?: number;
90
+ }): Promise<WorkflowRun[]>;
91
+ getRun(id: string): Promise<WorkflowRun | null>;
92
+ getRunSteps(runId: string): Promise<Array<StepState & {
93
+ stepName: string;
94
+ rpcName?: string;
95
+ data?: any;
96
+ }>>;
97
+ getRunHistory(runId: string): Promise<Array<StepState & {
98
+ stepName: string;
99
+ }>>;
100
+ getDistinctWorkflowNames(): Promise<string[]>;
101
+ getWorkflowVersion(name: string, graphHash: string): Promise<{
102
+ graph: any;
103
+ source: string;
104
+ } | null>;
105
+ deleteRun(id: string): Promise<boolean>;
106
+ }
70
107
  /**
71
108
  * Core workflow definition
72
109
  */
@@ -82,183 +119,6 @@ export type CoreWorkflow<PikkuFunctionConfig extends CorePikkuFunctionConfig<any
82
119
  /** Tags for organization and filtering */
83
120
  tags?: string[];
84
121
  };
85
- /**
86
- * Workflow step options
87
- */
88
- export interface WorkflowStepOptions {
89
- /** Display name for logs/UI (optional, doesn't affect execution) */
90
- description?: string;
91
- /** Number of retry attempts for failed steps (only applies to local execution) */
92
- retries?: number;
93
- /** Delay between retry attempts (e.g., '1s', '2s', '2min') */
94
- retryDelay?: string | number;
95
- }
96
- /**
97
- * Type signature for workflow.do() RPC form - used by inspector
98
- */
99
- export type WorkflowWireDoRPC = <TOutput = any, TInput = any>(stepName: string, rpcName: string, data: TInput, options?: WorkflowStepOptions) => Promise<TOutput>;
100
- /**
101
- * Type signature for workflow.do() inline form - used by inspector
102
- */
103
- export type WorkflowWireDoInline = <T>(stepName: string, fn: () => Promise<T> | T, options?: WorkflowStepOptions) => Promise<T>;
104
- /**
105
- * Type signature for workflow.sleep() - used by inspector
106
- */
107
- export type WorkflowWireSleep = (stepName: string, duration: string) => Promise<void>;
108
- /**
109
- * Input source for step arguments in simple workflows
110
- */
111
- export type InputSource = {
112
- from: 'input';
113
- path: string;
114
- } | {
115
- from: 'outputVar';
116
- name: string;
117
- path?: string;
118
- } | {
119
- from: 'item';
120
- path: string;
121
- } | {
122
- from: 'literal';
123
- value: unknown;
124
- };
125
- /**
126
- * Output binding for return statements in simple workflows
127
- */
128
- export interface OutputBinding {
129
- from: 'outputVar' | 'input';
130
- name?: string;
131
- path?: string;
132
- }
133
- /**
134
- * RPC step metadata (base form)
135
- */
136
- export interface RpcStepMeta {
137
- /** RPC form - generates queue worker */
138
- type: 'rpc';
139
- /** Cache key (stepName from workflow.do) */
140
- stepName: string;
141
- /** RPC to invoke */
142
- rpcName: string;
143
- /** Output variable name (if assigned) */
144
- outputVar?: string;
145
- /** Input source mappings */
146
- inputs?: Record<string, InputSource>;
147
- /** Step options */
148
- options?: WorkflowStepOptions;
149
- }
150
- /**
151
- * Branch step metadata (if/else control flow)
152
- */
153
- export interface BranchStepMeta {
154
- type: 'branch';
155
- /** Condition expression (as source string) */
156
- condition: string;
157
- /** Branch paths */
158
- branches: {
159
- then: WorkflowStepMeta[];
160
- else?: WorkflowStepMeta[];
161
- };
162
- }
163
- /**
164
- * Parallel group step metadata (Promise.all with multiple steps)
165
- */
166
- export interface ParallelGroupStepMeta {
167
- type: 'parallel';
168
- /** Child steps to execute in parallel */
169
- children: RpcStepMeta[];
170
- }
171
- /**
172
- * Fanout step metadata (parallel or sequential iteration)
173
- */
174
- export interface FanoutStepMeta {
175
- type: 'fanout';
176
- /** Step name for this fanout */
177
- stepName: string;
178
- /** Source array variable name */
179
- sourceVar: string;
180
- /** Iterator variable name */
181
- itemVar: string;
182
- /** Execution mode */
183
- mode: 'parallel' | 'sequential';
184
- /** Child step to execute per iteration */
185
- child: RpcStepMeta;
186
- /** Time between iterations (sequential mode only) */
187
- timeBetween?: string;
188
- }
189
- /**
190
- * Return step metadata (workflow output)
191
- */
192
- export interface ReturnStepMeta {
193
- type: 'return';
194
- /** Output bindings */
195
- outputs: Record<string, OutputBinding>;
196
- }
197
- /**
198
- * Inline step metadata (legacy support)
199
- */
200
- export interface InlineStepMeta {
201
- /** Inline form - local execution */
202
- type: 'inline';
203
- /** Cache key (stepName from workflow.do) */
204
- stepName: string;
205
- /** Display name */
206
- description?: string;
207
- /** Step options */
208
- options?: WorkflowStepOptions;
209
- }
210
- /**
211
- * Sleep step metadata
212
- */
213
- export interface SleepStepMeta {
214
- /** Sleep step */
215
- type: 'sleep';
216
- /** Cache key (stepName from workflow.sleep) */
217
- stepName: string;
218
- /** Sleep duration */
219
- duration: string | number;
220
- }
221
- /**
222
- * Cancel step metadata
223
- */
224
- export interface CancelStepMeta {
225
- /** Cancel step */
226
- type: 'cancel';
227
- }
228
- /**
229
- * Workflow step metadata (extracted by inspector)
230
- */
231
- export type WorkflowStepMeta = RpcStepMeta | BranchStepMeta | ParallelGroupStepMeta | FanoutStepMeta | ReturnStepMeta | InlineStepMeta | SleepStepMeta | CancelStepMeta;
232
- /**
233
- * Workflow step wire context for RPC functions
234
- * Provides step-level metadata including retry attempt tracking
235
- */
236
- export interface WorkflowStepWire {
237
- /** The workflow run ID */
238
- runId: string;
239
- /** The unique step ID */
240
- stepId: string;
241
- /** Current attempt number (1-indexed, increments on retry) */
242
- attemptCount: number;
243
- }
244
- /**
245
- * Workflow wire object for middleware
246
- * Provides workflow-specific capabilities to function execution
247
- */
248
- export interface PikkuWorkflowWire {
249
- /** The workflow name */
250
- workflowName: string;
251
- /** The current run ID */
252
- runId: string;
253
- /** Get the current workflow run */
254
- getRun: () => Promise<WorkflowRun>;
255
- /** Execute a workflow step (overloaded - RPC or inline form) */
256
- do: WorkflowWireDoRPC & WorkflowWireDoInline;
257
- /** Sleep for a duration */
258
- sleep: WorkflowWireSleep;
259
- /** Cancel the current workflow run */
260
- cancel: (reason?: string) => Promise<void>;
261
- }
262
122
  /**
263
123
  * Workflow client interface
264
124
  */
@@ -273,47 +133,56 @@ export interface PikkuWorkflow {
273
133
  cancelRun: (runId: string) => Promise<void>;
274
134
  }
275
135
  /**
276
- * Workflows metadata for inspector/CLI
136
+ * Context variable definition (serialized from Zod schema or type inference)
137
+ */
138
+ export interface ContextVariable {
139
+ /** Variable type */
140
+ type: 'string' | 'number' | 'boolean' | 'object' | 'array';
141
+ /** Default value */
142
+ default?: unknown;
143
+ /** Description for UI/docs */
144
+ description?: string;
145
+ }
146
+ /**
147
+ * Workflow context - state variables with defaults and types
148
+ */
149
+ export type WorkflowContext = Record<string, ContextVariable>;
150
+ /**
151
+ * Workflows metadata for inspector/CLI (DSL step-based format)
277
152
  */
278
153
  export type WorkflowsMeta = Record<string, CommonWireMeta & {
279
- workflowName: string;
154
+ name: string;
280
155
  steps: WorkflowStepMeta[];
281
- /** Whether this workflow conforms to simple workflow DSL */
282
- simple?: boolean;
156
+ context?: WorkflowContext;
157
+ dsl?: boolean;
283
158
  }>;
284
159
  /**
285
- * Interface for workflow orchestration
286
- * Handles workflow execution, replay, orchestration logic, and run-level state
160
+ * Unified workflow runtime meta (used by runtime to execute workflows)
161
+ * This is the format stored in pikkuState('workflows', 'meta')
162
+ * Both DSL and graph-based workflows are converted to this format
287
163
  */
288
- export interface WorkflowService {
289
- createRun(workflowName: string, input: any): Promise<string>;
290
- getRun(id: string): Promise<WorkflowRun | null>;
291
- getRunHistory(runId: string): Promise<Array<StepState & {
292
- stepName: string;
293
- }>>;
294
- updateRunStatus(id: string, status: WorkflowStatus, output?: any, error?: SerializedError): Promise<void>;
295
- withRunLock<T>(id: string, fn: () => Promise<T>): Promise<T>;
296
- close(): Promise<void>;
297
- resumeWorkflow(runId: string): Promise<void>;
298
- setServices(singletonServices: CoreSingletonServices, createWireServices: CreateWireServices, config: CoreConfig): void;
299
- startWorkflow<I>(name: string, input: I, rpcService: any): Promise<{
300
- runId: string;
301
- }>;
302
- runWorkflowJob(runId: string, rpcService: any): Promise<void>;
303
- orchestrateWorkflow(runId: string, rpcService: any): Promise<void>;
304
- executeWorkflowSleep(runId: string, stepId: string): Promise<void>;
305
- insertStepState(runId: string, stepName: string, rpcName: string, data: any, stepOptions?: {
306
- retries?: number;
307
- retryDelay?: string | number;
308
- }): Promise<StepState>;
309
- getStepState(runId: string, stepName: string): Promise<StepState>;
310
- setStepRunning(stepId: string): Promise<void>;
311
- setStepScheduled(stepId: string): Promise<void>;
312
- setStepResult(stepId: string, result: any): Promise<void>;
313
- setStepError(stepId: string, error: Error): Promise<void>;
314
- createRetryAttempt(stepId: string, status: 'pending' | 'running'): Promise<StepState>;
315
- executeWorkflowStep(runId: string, stepName: string, rpcName: string | null, data: any, rpcService: any): Promise<void>;
164
+ export interface WorkflowRuntimeMeta {
165
+ /** Workflow name (used as key in registrations) */
166
+ name: string;
167
+ /** Pikku function name (for execution) */
168
+ pikkuFuncId: string;
169
+ /** Source type: 'dsl' (serializable), 'complex' (has inline steps), 'graph' */
170
+ source: 'dsl' | 'complex' | 'graph';
171
+ /** Optional description */
172
+ description?: string;
173
+ /** Tags for organization */
174
+ tags?: string[];
175
+ /** Serialized nodes */
176
+ nodes?: Record<string, any>;
177
+ /** Entry node IDs for graph workflows (computed at build time) */
178
+ entryNodeIds?: string[];
179
+ /** Hash of graph topology (nodes, edges, input mappings) */
180
+ graphHash?: string;
316
181
  }
182
+ /**
183
+ * Unified workflow runtime metadata map
184
+ */
185
+ export type WorkflowsRuntimeMeta = Record<string, WorkflowRuntimeMeta>;
317
186
  /**
318
187
  * Worker input types for generated queue workers
319
188
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/core",
3
- "version": "0.11.1",
3
+ "version": "0.12.0",
4
4
  "author": "yasser.fadl@gmail.com",
5
5
  "license": "MIT",
6
6
  "module": "dist/index.js",
@@ -26,24 +26,31 @@
26
26
  "./http": "./dist/wirings/http/index.js",
27
27
  "./queue": "./dist/wirings/queue/index.js",
28
28
  "./scheduler": "./dist/wirings/scheduler/index.js",
29
+ "./trigger": "./dist/wirings/trigger/index.js",
29
30
  "./rpc": "./dist/wirings/rpc/index.js",
30
31
  "./mcp": "./dist/wirings/mcp/index.js",
32
+ "./ai-agent": "./dist/wirings/ai-agent/index.js",
31
33
  "./cli": "./dist/wirings/cli/index.js",
32
34
  "./cli/channel": "./dist/wirings/cli/channel/index.js",
35
+ "./node": "./dist/wirings/node/index.js",
36
+ "./secret": "./dist/wirings/secret/index.js",
37
+ "./variable": "./dist/wirings/variable/index.js",
38
+ "./oauth2": "./dist/wirings/oauth2/index.js",
33
39
  "./errors": "./dist/errors/index.js",
34
40
  "./services": "./dist/services/index.js",
35
41
  "./services/local-content": "./dist/services/local-content.js",
36
- "./schema": "./dist/schema.js",
37
- "./types": "./dist/types/index.d.ts"
42
+ "./services/gopass-secrets": "./dist/services/gopass-secrets.js",
43
+ "./schema": "./dist/schema.js"
38
44
  },
39
45
  "dependencies": {
40
- "cookie": "^1.0.2",
46
+ "@standard-schema/spec": "^1.1.0",
47
+ "cookie": "^1.1.1",
41
48
  "path-to-regexp": "^8.3.0",
42
49
  "picoquery": "^2.5.0"
43
50
  },
44
51
  "devDependencies": {
45
- "@types/node": "^24.10.1",
46
- "tsx": "^4.20.6",
52
+ "@types/node": "^24.10.12",
53
+ "tsx": "^4.21.0",
47
54
  "typescript": "^5.9"
48
55
  },
49
56
  "engines": {
package/run-tests.sh CHANGED
@@ -34,6 +34,9 @@ files=($(find src -type f -name "*.test.ts"))
34
34
  # Check if any files matched the pattern
35
35
  if [ ${#files[@]} -eq 0 ]; then
36
36
  echo "No test files found matching pattern: $pattern"
37
+ if [ "${STRICT_TEST_DISCOVERY}" = "1" ] || [ "${CI}" = "true" ]; then
38
+ exit 1
39
+ fi
37
40
  exit 0
38
41
  fi
39
42
 
@@ -50,4 +53,4 @@ if [ "$coverage_mode" = true ]; then
50
53
  fi
51
54
 
52
55
  # Execute the node command with the expanded list of files
53
- $node_cmd "${files[@]}"
56
+ $node_cmd "${files[@]}"
@@ -0,0 +1,99 @@
1
+ const encoder = new TextEncoder()
2
+ const decoder = new TextDecoder()
3
+
4
+ const getSubtle = () => {
5
+ const crypto = globalThis.crypto
6
+ if (!crypto?.subtle) {
7
+ throw new Error('WebCrypto not available')
8
+ }
9
+ return crypto.subtle
10
+ }
11
+
12
+ const base64Encode = (bytes: Uint8Array): string => {
13
+ if (typeof Buffer !== 'undefined') {
14
+ return Buffer.from(bytes).toString('base64')
15
+ }
16
+ let binary = ''
17
+ for (let i = 0; i < bytes.length; i++) {
18
+ binary += String.fromCharCode(bytes[i]!)
19
+ }
20
+ return btoa(binary)
21
+ }
22
+
23
+ const base64Decode = (input: string): Uint8Array => {
24
+ if (typeof Buffer !== 'undefined') {
25
+ return new Uint8Array(Buffer.from(input, 'base64'))
26
+ }
27
+ const binary = atob(input)
28
+ const bytes = new Uint8Array(binary.length)
29
+ for (let i = 0; i < binary.length; i++) {
30
+ bytes[i] = binary.charCodeAt(i)
31
+ }
32
+ return bytes
33
+ }
34
+
35
+ const toBase64Url = (bytes: Uint8Array): string => {
36
+ return base64Encode(bytes)
37
+ .replace(/\+/g, '-')
38
+ .replace(/\//g, '_')
39
+ .replace(/=+$/g, '')
40
+ }
41
+
42
+ const fromBase64Url = (input: string): Uint8Array => {
43
+ let base64 = input.replace(/-/g, '+').replace(/_/g, '/')
44
+ while (base64.length % 4 !== 0) base64 += '='
45
+ return base64Decode(base64)
46
+ }
47
+
48
+ const deriveKey = async (secret: string): Promise<CryptoKey> => {
49
+ const subtle = getSubtle()
50
+ const hash = await subtle.digest('SHA-256', encoder.encode(secret))
51
+ return subtle.importKey('raw', hash, { name: 'AES-GCM' }, false, [
52
+ 'encrypt',
53
+ 'decrypt',
54
+ ])
55
+ }
56
+
57
+ export const encryptJSON = async (
58
+ secret: string,
59
+ value: unknown
60
+ ): Promise<string> => {
61
+ const crypto = globalThis.crypto
62
+ if (!crypto?.getRandomValues) {
63
+ throw new Error('WebCrypto not available')
64
+ }
65
+ const subtle = getSubtle()
66
+ const iv = crypto.getRandomValues(new Uint8Array(12))
67
+ const key = await deriveKey(secret)
68
+ const plaintext = encoder.encode(JSON.stringify(value))
69
+ const encrypted = await subtle.encrypt(
70
+ { name: 'AES-GCM', iv },
71
+ key,
72
+ plaintext
73
+ )
74
+ const cipherBytes = new Uint8Array(encrypted)
75
+ const out = new Uint8Array(iv.length + cipherBytes.length)
76
+ out.set(iv, 0)
77
+ out.set(cipherBytes, iv.length)
78
+ return toBase64Url(out)
79
+ }
80
+
81
+ export const decryptJSON = async <T>(
82
+ secret: string,
83
+ token: string
84
+ ): Promise<T> => {
85
+ const subtle = getSubtle()
86
+ const data = fromBase64Url(token)
87
+ if (data.length < 13) {
88
+ throw new Error('Invalid encrypted payload')
89
+ }
90
+ const iv = data.slice(0, 12)
91
+ const ciphertext = data.slice(12)
92
+ const key = await deriveKey(secret)
93
+ const decrypted = await subtle.decrypt(
94
+ { name: 'AES-GCM', iv },
95
+ key,
96
+ ciphertext
97
+ )
98
+ return JSON.parse(decoder.decode(new Uint8Array(decrypted))) as T
99
+ }
@@ -30,7 +30,7 @@ export interface ErrorDetails {
30
30
  * @param details - The details of the error.
31
31
  */
32
32
  export const addError = (error: any, { status, message }: ErrorDetails) => {
33
- pikkuState('misc', 'errors').set(error, { status, message })
33
+ pikkuState(null, 'misc', 'errors').set(error, { status, message })
34
34
  }
35
35
 
36
36
  /**
@@ -53,10 +53,10 @@ export const addErrors = (
53
53
  export const getErrorResponse = (
54
54
  error: Error
55
55
  ): { status: number; message: string; mcpCode?: number } | undefined => {
56
- const errors = Array.from(pikkuState('misc', 'errors').entries())
56
+ const errors = Array.from(pikkuState(null, 'misc', 'errors').entries())
57
57
  const foundError = errors.find(([e]) => e.name === error.constructor.name)
58
58
  if (foundError) {
59
59
  return foundError[1]
60
60
  }
61
- return pikkuState('misc', 'errors').get(error)
61
+ return pikkuState(null, 'misc', 'errors').get(error)
62
62
  }
@@ -9,6 +9,12 @@ addError(InvalidMiddlewareWireError, {
9
9
  message: 'The middleware wire is invalid for the current wiring type.',
10
10
  })
11
11
 
12
+ export class PikkuMissingMetaError extends PikkuError {}
13
+ addError(PikkuMissingMetaError, {
14
+ status: 500,
15
+ message: 'Required metadata is missing',
16
+ })
17
+
12
18
  /**
13
19
  * The server cannot or will not process the request due to client error (e.g., malformed request syntax).
14
20
  * @group Error
@@ -345,3 +351,14 @@ addError(MaxComputeTimeReachedError, {
345
351
  message:
346
352
  'The server took too long to complete the request, reaching the maximum compute time allowed.',
347
353
  })
354
+
355
+ /**
356
+ * A required schema was not found during validation.
357
+ * @group Error
358
+ */
359
+ export class MissingSchemaError extends PikkuError {}
360
+ addError(MissingSchemaError, {
361
+ status: 500,
362
+ message:
363
+ 'A required schema was not found. Ensure schema generation has been run.',
364
+ })
@@ -1,2 +1 @@
1
- export * from './error-handler.js'
2
1
  export * from './errors.js'