@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,287 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { PikkuWorkflowService } from '../wirings/workflow/pikku-workflow-service.js';
3
+ /**
4
+ * In-memory implementation of WorkflowService for inline-only execution
5
+ *
6
+ * This is a lightweight workflow service that stores all state in memory.
7
+ * It only supports inline execution (no queue workers) and is ideal for:
8
+ * - CLI tools that need workflow-like step orchestration
9
+ * - Testing and development
10
+ * - Single-process applications without persistence requirements
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const workflowService = new InMemoryWorkflowService()
15
+ * await workflowService.startWorkflow('myWorkflow', input, { type: 'cli' }, rpc, { inline: true })
16
+ * ```
17
+ */
18
+ export class InMemoryWorkflowService extends PikkuWorkflowService {
19
+ runs = new Map();
20
+ steps = new Map(); // keyed by `${runId}:${stepName}`
21
+ stepData = new Map(); // keyed by stepId
22
+ stepHistory = new Map(); // keyed by runId
23
+ runState = new Map(); // keyed by runId
24
+ branchKeys = new Map(); // keyed by stepId
25
+ workflowVersions = new Map(); // keyed by `${name}:${graphHash}`
26
+ async createRun(workflowName, input, inline, graphHash, wire) {
27
+ const runId = randomUUID();
28
+ const now = new Date();
29
+ const run = {
30
+ id: runId,
31
+ workflow: workflowName,
32
+ status: 'running',
33
+ input,
34
+ inline,
35
+ graphHash,
36
+ wire,
37
+ createdAt: now,
38
+ updatedAt: now,
39
+ };
40
+ this.runs.set(runId, run);
41
+ this.stepHistory.set(runId, []);
42
+ this.runState.set(runId, {});
43
+ if (inline) {
44
+ this.registerInlineRun(runId);
45
+ }
46
+ return runId;
47
+ }
48
+ async getRun(id) {
49
+ return this.runs.get(id) || null;
50
+ }
51
+ async getRunHistory(runId) {
52
+ return this.stepHistory.get(runId) || [];
53
+ }
54
+ async updateRunStatus(id, status, output, error) {
55
+ const run = this.runs.get(id);
56
+ if (run) {
57
+ run.status = status;
58
+ run.updatedAt = new Date();
59
+ if (output !== undefined)
60
+ run.output = output;
61
+ if (error !== undefined)
62
+ run.error = error;
63
+ }
64
+ }
65
+ async insertStepState(runId, stepName, rpcName, data, stepOptions) {
66
+ const stepId = randomUUID();
67
+ const now = new Date();
68
+ const step = {
69
+ stepId,
70
+ status: 'pending',
71
+ attemptCount: 1,
72
+ retries: stepOptions?.retries,
73
+ retryDelay: stepOptions?.retryDelay,
74
+ createdAt: now,
75
+ updatedAt: now,
76
+ };
77
+ const key = `${runId}:${stepName}`;
78
+ this.steps.set(key, step);
79
+ this.stepData.set(stepId, { rpcName, data, stepName });
80
+ // Add to history
81
+ const history = this.stepHistory.get(runId) || [];
82
+ history.push({ ...step, stepName });
83
+ this.stepHistory.set(runId, history);
84
+ return step;
85
+ }
86
+ async getStepState(runId, stepName) {
87
+ const key = `${runId}:${stepName}`;
88
+ const step = this.steps.get(key);
89
+ if (!step) {
90
+ return {
91
+ stepId: '',
92
+ status: 'pending',
93
+ attemptCount: 0,
94
+ createdAt: new Date(),
95
+ updatedAt: new Date(),
96
+ };
97
+ }
98
+ return step;
99
+ }
100
+ async setStepRunning(stepId) {
101
+ for (const step of this.steps.values()) {
102
+ if (step.stepId === stepId) {
103
+ step.status = 'running';
104
+ step.runningAt = new Date();
105
+ step.updatedAt = new Date();
106
+ break;
107
+ }
108
+ }
109
+ }
110
+ async setStepScheduled(stepId) {
111
+ for (const step of this.steps.values()) {
112
+ if (step.stepId === stepId) {
113
+ step.status = 'scheduled';
114
+ step.scheduledAt = new Date();
115
+ step.updatedAt = new Date();
116
+ break;
117
+ }
118
+ }
119
+ }
120
+ async setStepResult(stepId, result) {
121
+ for (const step of this.steps.values()) {
122
+ if (step.stepId === stepId) {
123
+ step.status = 'succeeded';
124
+ step.result = result;
125
+ step.succeededAt = new Date();
126
+ step.updatedAt = new Date();
127
+ break;
128
+ }
129
+ }
130
+ }
131
+ async setStepError(stepId, error) {
132
+ for (const step of this.steps.values()) {
133
+ if (step.stepId === stepId) {
134
+ step.status = 'failed';
135
+ step.error = {
136
+ name: error.name,
137
+ message: error.message,
138
+ stack: error.stack,
139
+ };
140
+ step.failedAt = new Date();
141
+ step.updatedAt = new Date();
142
+ break;
143
+ }
144
+ }
145
+ }
146
+ async createRetryAttempt(failedStepId, status) {
147
+ // Find the failed step
148
+ let failedStep;
149
+ let runId;
150
+ let stepName;
151
+ for (const [key, step] of this.steps.entries()) {
152
+ if (step.stepId === failedStepId) {
153
+ failedStep = step;
154
+ const parts = key.split(':');
155
+ runId = parts[0];
156
+ stepName = parts.slice(1).join(':');
157
+ break;
158
+ }
159
+ }
160
+ if (!failedStep || !runId || !stepName) {
161
+ throw new Error(`Step not found: ${failedStepId}`);
162
+ }
163
+ const failedStepData = this.stepData.get(failedStepId);
164
+ const newStepId = randomUUID();
165
+ const now = new Date();
166
+ const newStep = {
167
+ stepId: newStepId,
168
+ status,
169
+ attemptCount: failedStep.attemptCount + 1,
170
+ retries: failedStep.retries,
171
+ retryDelay: failedStep.retryDelay,
172
+ createdAt: now,
173
+ updatedAt: now,
174
+ };
175
+ if (status === 'running') {
176
+ newStep.runningAt = now;
177
+ }
178
+ const key = `${runId}:${stepName}`;
179
+ this.steps.set(key, newStep);
180
+ // Copy step data to new step
181
+ if (failedStepData) {
182
+ this.stepData.set(newStepId, { ...failedStepData });
183
+ }
184
+ // Add to history
185
+ const history = this.stepHistory.get(runId) || [];
186
+ history.push({ ...newStep, stepName });
187
+ this.stepHistory.set(runId, history);
188
+ return newStep;
189
+ }
190
+ async withRunLock(_id, fn) {
191
+ // In-memory service doesn't need locking for inline execution
192
+ return fn();
193
+ }
194
+ async withStepLock(_runId, _stepName, fn) {
195
+ // In-memory service doesn't need locking for inline execution
196
+ return fn();
197
+ }
198
+ async close() {
199
+ // Clear all in-memory state
200
+ this.runs.clear();
201
+ this.steps.clear();
202
+ this.stepData.clear();
203
+ this.stepHistory.clear();
204
+ this.runState.clear();
205
+ this.branchKeys.clear();
206
+ this.workflowVersions.clear();
207
+ }
208
+ // Graph workflow methods
209
+ async getCompletedGraphState(runId) {
210
+ const completedNodeIds = [];
211
+ const failedNodeIds = [];
212
+ const prefix = `${runId}:`;
213
+ for (const [key, step] of this.steps.entries()) {
214
+ if (!key.startsWith(prefix))
215
+ continue;
216
+ const nodeId = key.substring(prefix.length);
217
+ if (step.status === 'succeeded') {
218
+ completedNodeIds.push(nodeId);
219
+ }
220
+ else if (step.status === 'failed') {
221
+ const maxAttempts = (step.retries ?? 0) + 1;
222
+ if (step.attemptCount >= maxAttempts) {
223
+ failedNodeIds.push(nodeId);
224
+ }
225
+ }
226
+ }
227
+ const branchKeys = {};
228
+ for (const [stepId, branchKey] of this.branchKeys.entries()) {
229
+ const stepData = this.stepData.get(stepId);
230
+ if (stepData) {
231
+ branchKeys[stepData.stepName] = branchKey;
232
+ }
233
+ }
234
+ return { completedNodeIds, failedNodeIds, branchKeys };
235
+ }
236
+ async getNodesWithoutSteps(runId, nodeIds) {
237
+ const existingSteps = new Set();
238
+ const prefix = `${runId}:`;
239
+ for (const [key] of this.steps.entries()) {
240
+ if (key.startsWith(prefix)) {
241
+ existingSteps.add(key.substring(prefix.length));
242
+ }
243
+ }
244
+ return nodeIds.filter((id) => !existingSteps.has(id));
245
+ }
246
+ async getNodeResults(runId, nodeIds) {
247
+ const results = {};
248
+ for (const nodeId of nodeIds) {
249
+ const key = `${runId}:${nodeId}`;
250
+ const step = this.steps.get(key);
251
+ if (step?.result !== undefined) {
252
+ results[nodeId] = step.result;
253
+ }
254
+ }
255
+ return results;
256
+ }
257
+ async setBranchKey(runId, nodeId, branchKey) {
258
+ const key = `${runId}:${nodeId}`;
259
+ const step = this.steps.get(key);
260
+ if (step) {
261
+ this.branchKeys.set(step.stepId, branchKey);
262
+ }
263
+ }
264
+ async setBranchTaken(stepId, branchKey) {
265
+ this.branchKeys.set(stepId, branchKey);
266
+ }
267
+ async updateRunState(runId, name, value) {
268
+ const state = this.runState.get(runId) || {};
269
+ state[name] = value;
270
+ this.runState.set(runId, state);
271
+ }
272
+ async getRunState(runId) {
273
+ return this.runState.get(runId) || {};
274
+ }
275
+ async upsertWorkflowVersion(name, graphHash, graph, source) {
276
+ this.workflowVersions.set(`${name}:${graphHash}`, {
277
+ graph,
278
+ source,
279
+ });
280
+ }
281
+ async getWorkflowVersion(name, graphHash) {
282
+ const version = this.workflowVersions.get(`${name}:${graphHash}`);
283
+ if (!version)
284
+ return null;
285
+ return { graph: version.graph, source: version.source };
286
+ }
287
+ }
@@ -1,14 +1,28 @@
1
1
  /**
2
2
  * @module @pikku/core
3
3
  */
4
- export * from './content-service.js';
5
- export * from './jwt-service.js';
6
- export * from './logger.js';
7
- export * from './secret-service.js';
8
- export * from './variables-service.js';
9
- export * from './schema-service.js';
10
- export * from './user-session-service.js';
11
- export * from './scheduler-service.js';
12
- export * from './local-secrets.js';
13
- export * from './local-variables.js';
14
- export * from './logger-console.js';
4
+ export { LogLevel } from './logger.js';
5
+ export { ScopedSecretService } from './scoped-secret-service.js';
6
+ export { PikkuSessionService, createMiddlewareSessionWireProps, createFunctionSessionWireProps, } from './user-session-service.js';
7
+ export { TypedSecretService } from './typed-secret-service.js';
8
+ export { TypedVariablesService } from './typed-variables-service.js';
9
+ export { LocalSecretService } from './local-secrets.js';
10
+ export { LocalVariablesService } from './local-variables.js';
11
+ export { ConsoleLogger } from './logger-console.js';
12
+ export { InMemoryWorkflowService } from './in-memory-workflow-service.js';
13
+ export { InMemoryTriggerService } from './in-memory-trigger-service.js';
14
+ export type { ContentService } from './content-service.js';
15
+ export type { JWTService } from './jwt-service.js';
16
+ export type { Logger } from './logger.js';
17
+ export type { SecretService } from './secret-service.js';
18
+ export type { VariablesService } from './variables-service.js';
19
+ export type { SchemaService } from './schema-service.js';
20
+ export type { SessionService } from './user-session-service.js';
21
+ export type { ScheduledTaskSummary, ScheduledTaskInfo, SchedulerRuntimeHandlers, SchedulerService, } from './scheduler-service.js';
22
+ export type { TriggerService } from './trigger-service.js';
23
+ export type { DeploymentService, DeploymentConfig, DeploymentInfo, DeploymentServiceConfig, } from './deployment-service.js';
24
+ export type { AIStorageService } from './ai-storage-service.js';
25
+ export type { AIAgentRunnerParams, AIAgentRunnerResult, AIAgentRunnerService, } from './ai-agent-runner-service.js';
26
+ export type { CreateRunInput, AIRunStateService, } from './ai-run-state-service.js';
27
+ export type { CredentialStatus, CredentialMeta, } from './typed-secret-service.js';
28
+ export type { VariableStatus, VariableMeta } from './typed-variables-service.js';
@@ -1,16 +1,13 @@
1
1
  /**
2
2
  * @module @pikku/core
3
3
  */
4
- // Interfaces
5
- export * from './content-service.js';
6
- export * from './jwt-service.js';
7
- export * from './logger.js';
8
- export * from './secret-service.js';
9
- export * from './variables-service.js';
10
- export * from './schema-service.js';
11
- export * from './user-session-service.js';
12
- export * from './scheduler-service.js';
13
- // Local implementations
14
- export * from './local-secrets.js';
15
- export * from './local-variables.js';
16
- export * from './logger-console.js';
4
+ export { LogLevel } from './logger.js';
5
+ export { ScopedSecretService } from './scoped-secret-service.js';
6
+ export { PikkuSessionService, createMiddlewareSessionWireProps, createFunctionSessionWireProps, } from './user-session-service.js';
7
+ export { TypedSecretService } from './typed-secret-service.js';
8
+ export { TypedVariablesService } from './typed-variables-service.js';
9
+ export { LocalSecretService } from './local-secrets.js';
10
+ export { LocalVariablesService } from './local-variables.js';
11
+ export { ConsoleLogger } from './logger-console.js';
12
+ export { InMemoryWorkflowService } from './in-memory-workflow-service.js';
13
+ export { InMemoryTriggerService } from './in-memory-trigger-service.js';
@@ -2,15 +2,18 @@ import { SecretService } from './secret-service.js';
2
2
  import { VariablesService } from './variables-service.js';
3
3
  /**
4
4
  * Service for retrieving secrets from environment variables.
5
+ * Supports storing secrets locally in memory for CLI operations.
5
6
  */
6
7
  export declare class LocalSecretService implements SecretService {
7
8
  private variables;
9
+ private localSecrets;
8
10
  /**
9
11
  * Creates an instance of LocalSecretService.
10
12
  */
11
13
  constructor(variables?: VariablesService);
12
14
  /**
13
15
  * Retrieves a secret by key.
16
+ * Checks local storage first, then falls back to environment variables.
14
17
  * @param key - The key of the secret to retrieve.
15
18
  * @returns A promise that resolves to the secret value.
16
19
  * @throws {Error} If the secret is not found.
@@ -18,9 +21,29 @@ export declare class LocalSecretService implements SecretService {
18
21
  getSecretJSON<R>(key: string): Promise<R>;
19
22
  /**
20
23
  * Retrieves a secret by key.
24
+ * Checks local storage first, then falls back to environment variables.
21
25
  * @param key - The key of the secret to retrieve.
22
26
  * @returns A promise that resolves to the secret value.
23
27
  * @throws {Error} If the secret is not found.
24
28
  */
25
29
  getSecret(key: string): Promise<string>;
30
+ /**
31
+ * Stores a JSON value as a secret in local storage.
32
+ * @param key - The key to store the secret under.
33
+ * @param value - The JSON value to store.
34
+ * @returns A promise that resolves when the secret is stored.
35
+ */
36
+ setSecretJSON(key: string, value: unknown): Promise<void>;
37
+ /**
38
+ * Checks if a secret exists without throwing.
39
+ * @param key - The key of the secret to check.
40
+ * @returns A promise that resolves to true if the secret exists.
41
+ */
42
+ hasSecret(key: string): Promise<boolean>;
43
+ /**
44
+ * Deletes a secret from local storage.
45
+ * @param key - The key of the secret to delete.
46
+ * @returns A promise that resolves when the secret is deleted.
47
+ */
48
+ deleteSecret(key: string): Promise<void>;
26
49
  }
@@ -1,9 +1,11 @@
1
1
  import { LocalVariablesService } from './local-variables.js';
2
2
  /**
3
3
  * Service for retrieving secrets from environment variables.
4
+ * Supports storing secrets locally in memory for CLI operations.
4
5
  */
5
6
  export class LocalSecretService {
6
7
  variables;
8
+ localSecrets = new Map();
7
9
  /**
8
10
  * Creates an instance of LocalSecretService.
9
11
  */
@@ -12,11 +14,18 @@ export class LocalSecretService {
12
14
  }
13
15
  /**
14
16
  * Retrieves a secret by key.
17
+ * Checks local storage first, then falls back to environment variables.
15
18
  * @param key - The key of the secret to retrieve.
16
19
  * @returns A promise that resolves to the secret value.
17
20
  * @throws {Error} If the secret is not found.
18
21
  */
19
22
  async getSecretJSON(key) {
23
+ // Check local storage first
24
+ const localValue = this.localSecrets.get(key);
25
+ if (localValue) {
26
+ return JSON.parse(localValue);
27
+ }
28
+ // Fall back to environment variables
20
29
  const value = await this.variables.get(key);
21
30
  if (value) {
22
31
  return JSON.parse(value);
@@ -25,15 +34,51 @@ export class LocalSecretService {
25
34
  }
26
35
  /**
27
36
  * Retrieves a secret by key.
37
+ * Checks local storage first, then falls back to environment variables.
28
38
  * @param key - The key of the secret to retrieve.
29
39
  * @returns A promise that resolves to the secret value.
30
40
  * @throws {Error} If the secret is not found.
31
41
  */
32
42
  async getSecret(key) {
43
+ // Check local storage first
44
+ const localValue = this.localSecrets.get(key);
45
+ if (localValue) {
46
+ return localValue;
47
+ }
48
+ // Fall back to environment variables
33
49
  const value = await this.variables.get(key);
34
50
  if (value) {
35
51
  return value;
36
52
  }
37
53
  throw new Error(`Secret Not Found: ${key}`);
38
54
  }
55
+ /**
56
+ * Stores a JSON value as a secret in local storage.
57
+ * @param key - The key to store the secret under.
58
+ * @param value - The JSON value to store.
59
+ * @returns A promise that resolves when the secret is stored.
60
+ */
61
+ async setSecretJSON(key, value) {
62
+ this.localSecrets.set(key, JSON.stringify(value));
63
+ }
64
+ /**
65
+ * Checks if a secret exists without throwing.
66
+ * @param key - The key of the secret to check.
67
+ * @returns A promise that resolves to true if the secret exists.
68
+ */
69
+ async hasSecret(key) {
70
+ if (this.localSecrets.has(key)) {
71
+ return true;
72
+ }
73
+ const value = await this.variables.get(key);
74
+ return value !== undefined && value !== null && value !== '';
75
+ }
76
+ /**
77
+ * Deletes a secret from local storage.
78
+ * @param key - The key of the secret to delete.
79
+ * @returns A promise that resolves when the secret is deleted.
80
+ */
81
+ async deleteSecret(key) {
82
+ this.localSecrets.delete(key);
83
+ }
39
84
  }
@@ -4,4 +4,9 @@ export declare class LocalVariablesService implements VariablesService {
4
4
  constructor(variables?: Record<string, string | undefined>);
5
5
  getAll(): Promise<Record<string, string | undefined>> | Record<string, string | undefined>;
6
6
  get(name: string): Promise<string | undefined> | string | undefined;
7
+ getJSON<T = unknown>(name: string): T | undefined;
8
+ set(name: string, value: string): void;
9
+ setJSON(name: string, value: unknown): void;
10
+ has(name: string): boolean;
11
+ delete(name: string): void;
7
12
  }
@@ -9,4 +9,22 @@ export class LocalVariablesService {
9
9
  get(name) {
10
10
  return this.variables[name];
11
11
  }
12
+ getJSON(name) {
13
+ const value = this.variables[name];
14
+ if (value === undefined)
15
+ return undefined;
16
+ return JSON.parse(value);
17
+ }
18
+ set(name, value) {
19
+ this.variables[name] = value;
20
+ }
21
+ setJSON(name, value) {
22
+ this.variables[name] = JSON.stringify(value);
23
+ }
24
+ has(name) {
25
+ return name in this.variables && this.variables[name] !== undefined;
26
+ }
27
+ delete(name) {
28
+ delete this.variables[name];
29
+ }
12
30
  }
@@ -1,4 +1,5 @@
1
- import { CoreUserSession } from '../types/core.types.js';
1
+ import type { CoreUserSession } from '../types/core.types.js';
2
+ import type { Logger } from './logger.js';
2
3
  /**
3
4
  * Minimal metadata for listing scheduled tasks
4
5
  */
@@ -21,6 +22,11 @@ export interface ScheduledTaskInfo extends ScheduledTaskSummary {
21
22
  /** Task status */
22
23
  status?: 'scheduled' | 'active' | 'completed' | 'failed';
23
24
  }
25
+ export interface SchedulerRuntimeHandlers {
26
+ logger: Logger;
27
+ invokeRPC: (rpcName: string, data?: any, session?: CoreUserSession) => Promise<void>;
28
+ runScheduledTask: (name: string) => Promise<void>;
29
+ }
24
30
  /**
25
31
  * Abstract scheduler service for persistent scheduled task management
26
32
  * Implementations use queue backends (pg-boss, BullMQ) for distributed scheduling
@@ -60,4 +66,18 @@ export declare abstract class SchedulerService {
60
66
  * Close any open connections
61
67
  */
62
68
  abstract close(): Promise<void>;
69
+ /**
70
+ * Set services needed for processing recurring tasks.
71
+ * Called after construction since the scheduler is created before
72
+ * singletonServices are fully assembled.
73
+ */
74
+ setServices(_handlers: SchedulerRuntimeHandlers): void;
75
+ /**
76
+ * Start recurring scheduled tasks
77
+ */
78
+ start(): Promise<void>;
79
+ /**
80
+ * Stop recurring scheduled tasks
81
+ */
82
+ stop(): Promise<void>;
63
83
  }
@@ -3,4 +3,18 @@
3
3
  * Implementations use queue backends (pg-boss, BullMQ) for distributed scheduling
4
4
  */
5
5
  export class SchedulerService {
6
+ /**
7
+ * Set services needed for processing recurring tasks.
8
+ * Called after construction since the scheduler is created before
9
+ * singletonServices are fully assembled.
10
+ */
11
+ setServices(_handlers) { }
12
+ /**
13
+ * Start recurring scheduled tasks
14
+ */
15
+ async start() { }
16
+ /**
17
+ * Stop recurring scheduled tasks
18
+ */
19
+ async stop() { }
6
20
  }
@@ -21,4 +21,10 @@ export interface SchemaService {
21
21
  * @returns {Set<string>} A set containing the names of all available schemas.
22
22
  */
23
23
  getSchemaNames: () => Set<string>;
24
+ /**
25
+ * Retrieves the property keys from a compiled JSON schema.
26
+ * @param {string} schemaName - The name of the schema.
27
+ * @returns {string[]} An array of property keys, or empty array if schema not found.
28
+ */
29
+ getSchemaKeys: (schemaName: string) => string[];
24
30
  }
@@ -0,0 +1,16 @@
1
+ import { SecretService } from './secret-service.js';
2
+ /**
3
+ * A read-only wrapper around SecretService that restricts access
4
+ * to only a defined set of allowed secret keys.
5
+ */
6
+ export declare class ScopedSecretService implements SecretService {
7
+ private secrets;
8
+ private allowedKeys;
9
+ constructor(secrets: SecretService, allowedKeys: Set<string>);
10
+ private assertAllowed;
11
+ getSecret(key: string): Promise<string>;
12
+ getSecretJSON<T = {}>(key: string): Promise<T>;
13
+ hasSecret(key: string): Promise<boolean>;
14
+ setSecretJSON(_key: string, _value: unknown): Promise<void>;
15
+ deleteSecret(_key: string): Promise<void>;
16
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * A read-only wrapper around SecretService that restricts access
3
+ * to only a defined set of allowed secret keys.
4
+ */
5
+ export class ScopedSecretService {
6
+ secrets;
7
+ allowedKeys;
8
+ constructor(secrets, allowedKeys) {
9
+ this.secrets = secrets;
10
+ this.allowedKeys = allowedKeys;
11
+ }
12
+ assertAllowed(key) {
13
+ if (!this.allowedKeys.has(key)) {
14
+ throw new Error(`Access denied to secret key: ${key}`);
15
+ }
16
+ }
17
+ async getSecret(key) {
18
+ this.assertAllowed(key);
19
+ return this.secrets.getSecret(key);
20
+ }
21
+ async getSecretJSON(key) {
22
+ this.assertAllowed(key);
23
+ return this.secrets.getSecretJSON(key);
24
+ }
25
+ async hasSecret(key) {
26
+ this.assertAllowed(key);
27
+ return this.secrets.hasSecret(key);
28
+ }
29
+ async setSecretJSON(_key, _value) {
30
+ throw new Error('setSecretJSON is not allowed in scoped secret service');
31
+ }
32
+ async deleteSecret(_key) {
33
+ throw new Error('deleteSecret is not allowed in scoped secret service');
34
+ }
35
+ }