@pikku/core 0.12.106 → 0.12.111

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 (589) hide show
  1. package/CHANGELOG.md +358 -0
  2. package/dist/analytics/analytics.d.ts +6 -0
  3. package/dist/analytics/analytics.js +58 -0
  4. package/dist/analytics/analytics.types.d.ts +156 -0
  5. package/dist/analytics/analytics.types.js +1 -0
  6. package/dist/analytics/anonymous-analytics-identity.d.ts +23 -0
  7. package/dist/analytics/anonymous-analytics-identity.js +27 -0
  8. package/dist/analytics/compose-analytics-identity.d.ts +14 -0
  9. package/dist/analytics/compose-analytics-identity.js +33 -0
  10. package/dist/analytics/cookie-analytics-identity.d.ts +24 -0
  11. package/dist/analytics/cookie-analytics-identity.js +37 -0
  12. package/dist/analytics/define-analytics-events.d.ts +22 -0
  13. package/dist/analytics/define-analytics-events.js +9 -0
  14. package/dist/analytics/fan-out-analytics.d.ts +15 -0
  15. package/dist/analytics/fan-out-analytics.js +36 -0
  16. package/dist/analytics/index.d.ts +13 -0
  17. package/dist/analytics/index.js +8 -0
  18. package/dist/analytics/logger-analytics-service.d.ts +14 -0
  19. package/dist/analytics/logger-analytics-service.js +23 -0
  20. package/dist/analytics/mint-cookie.d.ts +44 -0
  21. package/dist/analytics/mint-cookie.js +55 -0
  22. package/dist/errors/errors.d.ts +7 -0
  23. package/dist/errors/errors.js +17 -0
  24. package/dist/function/function-meta.types.d.ts +2 -0
  25. package/dist/function/function-runner.js +29 -0
  26. package/dist/function/functions.types.d.ts +22 -3
  27. package/dist/middleware/auth-apikey.d.ts +1 -1
  28. package/dist/pikku-state.d.ts +1 -1
  29. package/dist/scopes.d.ts +11 -0
  30. package/dist/scopes.js +17 -0
  31. package/dist/services/credential-wire-service.d.ts +1 -1
  32. package/dist/services/feature-flag-service.d.ts +100 -0
  33. package/dist/services/feature-flag-service.js +1 -0
  34. package/dist/services/index.d.ts +1 -0
  35. package/dist/services/meta-service.d.ts +16 -0
  36. package/dist/services/meta-service.js +19 -0
  37. package/dist/services/webhook-service.d.ts +7 -2
  38. package/dist/services/webhook-service.js +11 -6
  39. package/dist/testing/service-tests/agent-run-service-tests.d.ts +2 -2
  40. package/dist/testing/service-tests/agent-storage-service-tests.d.ts +1 -1
  41. package/dist/testing/service-tests/channel-store-tests.d.ts +1 -1
  42. package/dist/testing/service-tests/credential-service-tests.d.ts +1 -1
  43. package/dist/testing/service-tests/deployment-service-tests.d.ts +1 -1
  44. package/dist/testing/service-tests/event-hub-store-tests.d.ts +1 -1
  45. package/dist/testing/service-tests/secret-service-tests.d.ts +1 -1
  46. package/dist/testing/service-tests/session-store-tests.d.ts +1 -1
  47. package/dist/testing/service-tests/workflow-run-service-tests.d.ts +1 -1
  48. package/dist/testing/service-tests/workflow-service-tests.d.ts +1 -1
  49. package/dist/types/core.types.d.ts +23 -0
  50. package/dist/wirings/agent/agent-rpc.d.ts +1 -1
  51. package/dist/wirings/agent/agent-turn.d.ts +1 -1
  52. package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +1 -1
  53. package/dist/wirings/channel/channel-common.d.ts +1 -1
  54. package/dist/wirings/channel/channel-rpc-validators.d.ts +2 -2
  55. package/dist/wirings/channel/channel-runner.d.ts +1 -1
  56. package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
  57. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
  58. package/dist/wirings/cli/channel/cli-approval.d.ts +2 -2
  59. package/dist/wirings/flag/assert-feature-available.d.ts +15 -0
  60. package/dist/wirings/flag/assert-feature-available.js +23 -0
  61. package/dist/wirings/flag/cached-flag-source.d.ts +73 -0
  62. package/dist/wirings/flag/cached-flag-source.js +96 -0
  63. package/dist/wirings/flag/define-feature-flags.d.ts +33 -0
  64. package/dist/wirings/flag/define-feature-flags.js +32 -0
  65. package/dist/wirings/flag/flag.types.d.ts +97 -0
  66. package/dist/wirings/flag/flag.types.js +1 -0
  67. package/dist/wirings/flag/index.d.ts +7 -0
  68. package/dist/wirings/flag/index.js +5 -0
  69. package/dist/wirings/flag/resolve-flag.d.ts +52 -0
  70. package/dist/wirings/flag/resolve-flag.js +90 -0
  71. package/dist/wirings/flag/validate-flag-definitions.d.ts +26 -0
  72. package/dist/wirings/flag/validate-flag-definitions.js +103 -0
  73. package/dist/wirings/rpc/rpc-runner.js +3 -0
  74. package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +8 -8
  75. package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +1 -1
  76. package/dist/wirings/workflow/workflow-queue-routing.d.ts +1 -1
  77. package/package.json +11 -5
  78. package/run-tests.sh +17 -9
  79. package/src/public-surface.json +26 -0
  80. package/src/agent-naming.test.ts +0 -68
  81. package/src/api-report.test.ts +0 -138
  82. package/src/app-alias-surface.test.ts +0 -179
  83. package/src/app-leaf-surface.test.ts +0 -222
  84. package/src/bootstrap-compat/root.ts +0 -20
  85. package/src/classification/column-form.test.ts +0 -97
  86. package/src/classification/column-form.ts +0 -55
  87. package/src/classification/data-classification.ts +0 -73
  88. package/src/classification/index.ts +0 -40
  89. package/src/classification/key-ids.ts +0 -2
  90. package/src/classification/secret-value.test.ts +0 -204
  91. package/src/classification/secret-value.ts +0 -106
  92. package/src/crypto-utils.test.ts +0 -668
  93. package/src/crypto-utils.ts +0 -460
  94. package/src/dev/hot-reload.test.ts +0 -587
  95. package/src/dev/hot-reload.ts +0 -225
  96. package/src/dev/module-runner.test.ts +0 -235
  97. package/src/dev/module-runner.ts +0 -138
  98. package/src/dev/reload-meta.test.ts +0 -183
  99. package/src/dev/reload-meta.ts +0 -144
  100. package/src/ecosystem-tier-removed.test.ts +0 -72
  101. package/src/env.ts +0 -1
  102. package/src/errors/error-handler.ts +0 -77
  103. package/src/errors/error.test.ts +0 -229
  104. package/src/errors/errors.ts +0 -393
  105. package/src/errors/index.ts +0 -11
  106. package/src/errors/serialized-error.ts +0 -12
  107. package/src/factory-functions.test.ts +0 -111
  108. package/src/function/abort-scope.test.ts +0 -97
  109. package/src/function/abort-scope.ts +0 -80
  110. package/src/function/function-meta.types.ts +0 -151
  111. package/src/function/function-runner.test.ts +0 -1619
  112. package/src/function/function-runner.ts +0 -499
  113. package/src/function/functions.types.ts +0 -319
  114. package/src/function/index.ts +0 -40
  115. package/src/function/list.types.test.ts +0 -100
  116. package/src/function/list.types.ts +0 -69
  117. package/src/function/pikku-request.test.ts +0 -35
  118. package/src/function/pikku-request.ts +0 -17
  119. package/src/gopass-secrets-removed.test.ts +0 -51
  120. package/src/handle-error.test.ts +0 -532
  121. package/src/handle-error.ts +0 -64
  122. package/src/middleware/auth-apikey.test.ts +0 -362
  123. package/src/middleware/auth-apikey.ts +0 -39
  124. package/src/middleware/auth-bearer.test.ts +0 -566
  125. package/src/middleware/auth-bearer.ts +0 -83
  126. package/src/middleware/auth-cookie.test.ts +0 -572
  127. package/src/middleware/auth-cookie.ts +0 -107
  128. package/src/middleware/cors.test.ts +0 -579
  129. package/src/middleware/cors.ts +0 -103
  130. package/src/middleware/index.ts +0 -30
  131. package/src/middleware/middleware-factories.ts +0 -76
  132. package/src/middleware/middleware.types.ts +0 -61
  133. package/src/middleware/remote-auth.test.ts +0 -547
  134. package/src/middleware/remote-auth.ts +0 -95
  135. package/src/middleware/remote-jobs-secret.ts +0 -35
  136. package/src/middleware/require-origin.test.ts +0 -115
  137. package/src/middleware/require-origin.ts +0 -79
  138. package/src/middleware/telemetry.ts +0 -83
  139. package/src/middleware-runner.test.ts +0 -578
  140. package/src/middleware-runner.ts +0 -232
  141. package/src/no-any-casts.test.ts +0 -57
  142. package/src/no-root-barrel.test.ts +0 -122
  143. package/src/permissions.test.ts +0 -256
  144. package/src/permissions.ts +0 -217
  145. package/src/pikku-state.test.ts +0 -198
  146. package/src/pikku-state.ts +0 -206
  147. package/src/production-barrels-stay-lean.test.ts +0 -110
  148. package/src/public-surface.test.ts +0 -133
  149. package/src/remote.test.ts +0 -173
  150. package/src/remote.ts +0 -56
  151. package/src/removed-legacy-exports.test.ts +0 -66
  152. package/src/run-tests-script.test.ts +0 -67
  153. package/src/schema.test.ts +0 -430
  154. package/src/schema.ts +0 -204
  155. package/src/scopes.test.ts +0 -203
  156. package/src/scopes.ts +0 -67
  157. package/src/services/agent-run-state-service.ts +0 -37
  158. package/src/services/agent-runner-service.ts +0 -238
  159. package/src/services/agent-storage-service.ts +0 -39
  160. package/src/services/ai-embedding-service.ts +0 -9
  161. package/src/services/audit-service.test.ts +0 -44
  162. package/src/services/audit-service.ts +0 -280
  163. package/src/services/content-service.ts +0 -65
  164. package/src/services/credential-service.ts +0 -20
  165. package/src/services/credential-wire-service.test.ts +0 -235
  166. package/src/services/credential-wire-service.ts +0 -120
  167. package/src/services/deployment-service.ts +0 -32
  168. package/src/services/email-service.test.ts +0 -100
  169. package/src/services/email-service.ts +0 -60
  170. package/src/services/email-template.test.ts +0 -311
  171. package/src/services/email-template.ts +0 -254
  172. package/src/services/file-scenario-run-store.test.ts +0 -349
  173. package/src/services/file-scenario-run-store.ts +0 -282
  174. package/src/services/gateway-service.ts +0 -5
  175. package/src/services/http-personas-converse.test.ts +0 -274
  176. package/src/services/http-personas.test.ts +0 -379
  177. package/src/services/http-personas.ts +0 -508
  178. package/src/services/in-memory-agent-run-state-service.ts +0 -87
  179. package/src/services/in-memory-queue-service.test.ts +0 -162
  180. package/src/services/in-memory-queue-service.ts +0 -78
  181. package/src/services/in-memory-session-store.test.ts +0 -58
  182. package/src/services/in-memory-session-store.ts +0 -20
  183. package/src/services/in-memory-trigger-service.ts +0 -47
  184. package/src/services/in-memory-workflow-service.test.ts +0 -430
  185. package/src/services/in-memory-workflow-service.ts +0 -595
  186. package/src/services/index.ts +0 -192
  187. package/src/services/istanbul-coverage-service.test.ts +0 -66
  188. package/src/services/istanbul-coverage-service.ts +0 -59
  189. package/src/services/jwt-service.ts +0 -15
  190. package/src/services/local-content-request-handler.test.ts +0 -240
  191. package/src/services/local-content-request-handler.ts +0 -295
  192. package/src/services/local-content.test.ts +0 -186
  193. package/src/services/local-content.ts +0 -242
  194. package/src/services/local-credential-service.ts +0 -63
  195. package/src/services/local-email-service.test.ts +0 -182
  196. package/src/services/local-email-service.ts +0 -43
  197. package/src/services/local-gateway-service.ts +0 -51
  198. package/src/services/local-secrets.test.ts +0 -95
  199. package/src/services/local-secrets.ts +0 -71
  200. package/src/services/local-variables.test.ts +0 -61
  201. package/src/services/local-variables.ts +0 -45
  202. package/src/services/logger-console.test.ts +0 -117
  203. package/src/services/logger-console.ts +0 -174
  204. package/src/services/logger.ts +0 -48
  205. package/src/services/meta-service.test.ts +0 -75
  206. package/src/services/meta-service.ts +0 -767
  207. package/src/services/persona-actor-secret.test.ts +0 -68
  208. package/src/services/persona-actor-secret.ts +0 -70
  209. package/src/services/persona-sign-in.test.ts +0 -219
  210. package/src/services/persona-sign-in.ts +0 -238
  211. package/src/services/personas-service.ts +0 -191
  212. package/src/services/pikku-user-id.test.ts +0 -62
  213. package/src/services/pikku-user-id.ts +0 -13
  214. package/src/services/queue-webhook-service.test.ts +0 -409
  215. package/src/services/queue-webhook-service.ts +0 -150
  216. package/src/services/remote-jobs.test.ts +0 -106
  217. package/src/services/remote-jobs.ts +0 -92
  218. package/src/services/scheduler-service.ts +0 -37
  219. package/src/services/schema-service.ts +0 -10
  220. package/src/services/scope-service.ts +0 -91
  221. package/src/services/scoped-credential-service.test.ts +0 -86
  222. package/src/services/scoped-credential-service.ts +0 -63
  223. package/src/services/scoped-secret-service.test.ts +0 -93
  224. package/src/services/scoped-secret-service.ts +0 -40
  225. package/src/services/secret-host-binding.test.ts +0 -138
  226. package/src/services/secret-host-binding.ts +0 -51
  227. package/src/services/secret-service.ts +0 -25
  228. package/src/services/secretless.test.ts +0 -54
  229. package/src/services/secretless.ts +0 -29
  230. package/src/services/session-store.ts +0 -9
  231. package/src/services/stub-tracker.test.ts +0 -104
  232. package/src/services/stub-tracker.ts +0 -175
  233. package/src/services/system-role-guard.test.ts +0 -96
  234. package/src/services/system-role-guard.ts +0 -71
  235. package/src/services/temporary-file-service.ts +0 -76
  236. package/src/services/trigger-service.ts +0 -5
  237. package/src/services/typed-credential-service.ts +0 -83
  238. package/src/services/typed-secret-service.test.ts +0 -204
  239. package/src/services/typed-secret-service.ts +0 -132
  240. package/src/services/typed-variables-service.test.ts +0 -166
  241. package/src/services/typed-variables-service.ts +0 -166
  242. package/src/services/user-session-service.test.ts +0 -147
  243. package/src/services/user-session-service.ts +0 -85
  244. package/src/services/v8-coverage-service.test.ts +0 -69
  245. package/src/services/v8-coverage-service.ts +0 -163
  246. package/src/services/variables-service.ts +0 -13
  247. package/src/services/webhook-service.ts +0 -147
  248. package/src/services/workflow-service.ts +0 -120
  249. package/src/side-effects-are-declared.test.ts +0 -84
  250. package/src/source-files-stay-composable.test.ts +0 -41
  251. package/src/template-alias-surface.test.ts +0 -240
  252. package/src/test-utils.ts +0 -38
  253. package/src/testing/index.ts +0 -3
  254. package/src/testing/service-tests/agent-run-service-tests.ts +0 -98
  255. package/src/testing/service-tests/agent-storage-service-tests.ts +0 -379
  256. package/src/testing/service-tests/channel-store-tests.ts +0 -98
  257. package/src/testing/service-tests/credential-service-tests.ts +0 -143
  258. package/src/testing/service-tests/deployment-service-tests.ts +0 -33
  259. package/src/testing/service-tests/event-hub-store-tests.ts +0 -48
  260. package/src/testing/service-tests/secret-service-tests.ts +0 -105
  261. package/src/testing/service-tests/session-store-tests.ts +0 -62
  262. package/src/testing/service-tests/workflow-run-service-tests.ts +0 -59
  263. package/src/testing/service-tests/workflow-service-tests.ts +0 -308
  264. package/src/testing/service-tests.ts +0 -95
  265. package/src/time-utils.test.ts +0 -56
  266. package/src/time-utils.ts +0 -89
  267. package/src/types/core.types.ts +0 -446
  268. package/src/types/index.ts +0 -25
  269. package/src/types/state.types.ts +0 -226
  270. package/src/types/typed-credentials.test.ts +0 -72
  271. package/src/utils/hash.test.ts +0 -68
  272. package/src/utils/hash.ts +0 -26
  273. package/src/utils/hmac.ts +0 -21
  274. package/src/utils/node-host-resolver.ts +0 -20
  275. package/src/utils/safe-fetch.test.ts +0 -515
  276. package/src/utils/safe-fetch.ts +0 -347
  277. package/src/utils.test.ts +0 -359
  278. package/src/utils.ts +0 -165
  279. package/src/version.test.ts +0 -80
  280. package/src/version.ts +0 -25
  281. package/src/wirings/actor-flow/actor-flow.types.ts +0 -40
  282. package/src/wirings/actor-flow/index.ts +0 -10
  283. package/src/wirings/actor-flow/run-conversation.test.ts +0 -187
  284. package/src/wirings/actor-flow/run-conversation.ts +0 -280
  285. package/src/wirings/addon/addon-auth-tags.test.ts +0 -219
  286. package/src/wirings/addon/addon-runner.ts +0 -236
  287. package/src/wirings/addon/addon-scopes.test.ts +0 -225
  288. package/src/wirings/addon/addon-secrets.test.ts +0 -391
  289. package/src/wirings/addon/index.ts +0 -12
  290. package/src/wirings/addon/remote-addon-auth.ts +0 -65
  291. package/src/wirings/addon/wire-addon.test.ts +0 -102
  292. package/src/wirings/addon/wire-addon.ts +0 -202
  293. package/src/wirings/addon/wire-remote-addon.ts +0 -41
  294. package/src/wirings/agent/agent-agui.test.ts +0 -1213
  295. package/src/wirings/agent/agent-agui.ts +0 -405
  296. package/src/wirings/agent/agent-authorization.test.ts +0 -208
  297. package/src/wirings/agent/agent-finalize.test.ts +0 -187
  298. package/src/wirings/agent/agent-finalize.ts +0 -197
  299. package/src/wirings/agent/agent-helpers.test.ts +0 -215
  300. package/src/wirings/agent/agent-helpers.ts +0 -96
  301. package/src/wirings/agent/agent-interrupt.test.ts +0 -833
  302. package/src/wirings/agent/agent-interrupt.ts +0 -400
  303. package/src/wirings/agent/agent-memory.test.ts +0 -397
  304. package/src/wirings/agent/agent-memory.ts +0 -496
  305. package/src/wirings/agent/agent-middleware.types.test.ts +0 -41
  306. package/src/wirings/agent/agent-model-config.test.ts +0 -103
  307. package/src/wirings/agent/agent-model-config.ts +0 -59
  308. package/src/wirings/agent/agent-prepare.test.ts +0 -977
  309. package/src/wirings/agent/agent-prepare.ts +0 -1083
  310. package/src/wirings/agent/agent-registry.test.ts +0 -455
  311. package/src/wirings/agent/agent-registry.ts +0 -99
  312. package/src/wirings/agent/agent-resume-authorization.test.ts +0 -206
  313. package/src/wirings/agent/agent-rpc.ts +0 -116
  314. package/src/wirings/agent/agent-runner.test.ts +0 -1229
  315. package/src/wirings/agent/agent-runner.ts +0 -858
  316. package/src/wirings/agent/agent-stream-delegate.test.ts +0 -381
  317. package/src/wirings/agent/agent-stream-output-hooks.test.ts +0 -353
  318. package/src/wirings/agent/agent-stream.test.ts +0 -1800
  319. package/src/wirings/agent/agent-stream.ts +0 -1639
  320. package/src/wirings/agent/agent-thread-ownership.test.ts +0 -297
  321. package/src/wirings/agent/agent-turn.test.ts +0 -65
  322. package/src/wirings/agent/agent-turn.ts +0 -122
  323. package/src/wirings/agent/agent-utils.ts +0 -20
  324. package/src/wirings/agent/agent.types.ts +0 -676
  325. package/src/wirings/agent/index.ts +0 -58
  326. package/src/wirings/agent/voice-input.test.ts +0 -220
  327. package/src/wirings/agent/voice-input.ts +0 -180
  328. package/src/wirings/agent/voice-output.test.ts +0 -510
  329. package/src/wirings/agent/voice-output.ts +0 -311
  330. package/src/wirings/agent-scorer/agent-scorer-grade.test.ts +0 -106
  331. package/src/wirings/agent-scorer/agent-scorer-grade.ts +0 -55
  332. package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +0 -285
  333. package/src/wirings/agent-scorer/agent-scorer-judge.ts +0 -180
  334. package/src/wirings/agent-scorer/agent-scorer-live.test.ts +0 -174
  335. package/src/wirings/agent-scorer/agent-scorer-live.ts +0 -56
  336. package/src/wirings/agent-scorer/agent-scorer-registry.ts +0 -66
  337. package/src/wirings/agent-scorer/agent-scorer-sampling.test.ts +0 -34
  338. package/src/wirings/agent-scorer/agent-scorer-sampling.ts +0 -36
  339. package/src/wirings/agent-scorer/agent-scorer-snapshots.test.ts +0 -49
  340. package/src/wirings/agent-scorer/agent-scorer-snapshots.ts +0 -46
  341. package/src/wirings/agent-scorer/agent-scorer-worker.test.ts +0 -122
  342. package/src/wirings/agent-scorer/agent-scorer-worker.ts +0 -71
  343. package/src/wirings/agent-scorer/agent-scorer.ts +0 -102
  344. package/src/wirings/agent-scorer/agent-scorer.types.ts +0 -128
  345. package/src/wirings/agent-scorer/index.ts +0 -23
  346. package/src/wirings/channel/channel-common.ts +0 -102
  347. package/src/wirings/channel/channel-handler-shapes.test.ts +0 -72
  348. package/src/wirings/channel/channel-handler.test.ts +0 -322
  349. package/src/wirings/channel/channel-handler.ts +0 -259
  350. package/src/wirings/channel/channel-host-rpc.test.ts +0 -150
  351. package/src/wirings/channel/channel-host-rpc.ts +0 -69
  352. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -188
  353. package/src/wirings/channel/channel-middleware-runner.ts +0 -126
  354. package/src/wirings/channel/channel-rpc-registry.ts +0 -116
  355. package/src/wirings/channel/channel-rpc-responder.ts +0 -117
  356. package/src/wirings/channel/channel-rpc-service.ts +0 -132
  357. package/src/wirings/channel/channel-rpc-validators.ts +0 -65
  358. package/src/wirings/channel/channel-rpc.test.ts +0 -841
  359. package/src/wirings/channel/channel-rpc.ts +0 -5
  360. package/src/wirings/channel/channel-rpc.types.ts +0 -160
  361. package/src/wirings/channel/channel-runner.ts +0 -164
  362. package/src/wirings/channel/channel-store.ts +0 -35
  363. package/src/wirings/channel/channel.types.ts +0 -193
  364. package/src/wirings/channel/define-channel-routes.ts +0 -5
  365. package/src/wirings/channel/eventhub-service.ts +0 -16
  366. package/src/wirings/channel/eventhub-store.ts +0 -13
  367. package/src/wirings/channel/index.ts +0 -40
  368. package/src/wirings/channel/local/index.ts +0 -3
  369. package/src/wirings/channel/local/local-channel-handler.ts +0 -98
  370. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -339
  371. package/src/wirings/channel/local/local-channel-runner.ts +0 -271
  372. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -77
  373. package/src/wirings/channel/local/local-eventhub-service.ts +0 -69
  374. package/src/wirings/channel/log-channels.ts +0 -16
  375. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -135
  376. package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -60
  377. package/src/wirings/channel/serverless/index.ts +0 -6
  378. package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -328
  379. package/src/wirings/cli/channel/cli-approval.test.ts +0 -177
  380. package/src/wirings/cli/channel/cli-approval.ts +0 -135
  381. package/src/wirings/cli/channel/cli-channel-runner.ts +0 -118
  382. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +0 -192
  383. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +0 -148
  384. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +0 -480
  385. package/src/wirings/cli/channel/cli-raw-client-runner.ts +0 -188
  386. package/src/wirings/cli/channel/index.ts +0 -6
  387. package/src/wirings/cli/cli-runner.test.ts +0 -969
  388. package/src/wirings/cli/cli-runner.ts +0 -538
  389. package/src/wirings/cli/cli.types.ts +0 -388
  390. package/src/wirings/cli/command-parser.test.ts +0 -1120
  391. package/src/wirings/cli/command-parser.ts +0 -713
  392. package/src/wirings/cli/define-cli-commands.ts +0 -13
  393. package/src/wirings/cli/format-cli-error.test.ts +0 -91
  394. package/src/wirings/cli/format-cli-error.ts +0 -96
  395. package/src/wirings/cli/index.ts +0 -19
  396. package/src/wirings/credential/credential.types.ts +0 -37
  397. package/src/wirings/credential/define-credential.ts +0 -49
  398. package/src/wirings/credential/index.ts +0 -7
  399. package/src/wirings/credential/validate-credential-definitions.ts +0 -63
  400. package/src/wirings/gateway/gateway-authorization.test.ts +0 -575
  401. package/src/wirings/gateway/gateway-channel-meta.test.ts +0 -44
  402. package/src/wirings/gateway/gateway-runner.test.ts +0 -581
  403. package/src/wirings/gateway/gateway-runner.ts +0 -411
  404. package/src/wirings/gateway/gateway.types.ts +0 -137
  405. package/src/wirings/gateway/index.ts +0 -15
  406. package/src/wirings/http/http-routes.test.ts +0 -318
  407. package/src/wirings/http/http-routes.ts +0 -111
  408. package/src/wirings/http/http-runner-addon-ref.test.ts +0 -238
  409. package/src/wirings/http/http-runner.test.ts +0 -503
  410. package/src/wirings/http/http-runner.ts +0 -462
  411. package/src/wirings/http/http.types.ts +0 -307
  412. package/src/wirings/http/index.ts +0 -27
  413. package/src/wirings/http/log-http-routes.ts +0 -18
  414. package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -318
  415. package/src/wirings/http/pikku-fetch-http-request.ts +0 -260
  416. package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -123
  417. package/src/wirings/http/pikku-fetch-http-response.ts +0 -149
  418. package/src/wirings/http/routers/http-router.ts +0 -13
  419. package/src/wirings/http/routers/path-to-regex.test.ts +0 -306
  420. package/src/wirings/http/routers/path-to-regex.ts +0 -115
  421. package/src/wirings/http/web-request.test.ts +0 -382
  422. package/src/wirings/http/web-request.ts +0 -162
  423. package/src/wirings/mcp/index.ts +0 -26
  424. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -388
  425. package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
  426. package/src/wirings/mcp/mcp-runner.test.ts +0 -588
  427. package/src/wirings/mcp/mcp-runner.ts +0 -330
  428. package/src/wirings/mcp/mcp.types.ts +0 -199
  429. package/src/wirings/node/index.ts +0 -2
  430. package/src/wirings/node/node.types.ts +0 -23
  431. package/src/wirings/oauth2/index.ts +0 -1
  432. package/src/wirings/oauth2/oauth2.types.ts +0 -12
  433. package/src/wirings/persona/define-personas.ts +0 -33
  434. package/src/wirings/persona/index.ts +0 -75
  435. package/src/wirings/persona/persona-app-scopes.test.ts +0 -47
  436. package/src/wirings/persona/persona-app-scopes.ts +0 -74
  437. package/src/wirings/persona/persona-email.ts +0 -87
  438. package/src/wirings/persona/persona-environments.test.ts +0 -194
  439. package/src/wirings/persona/persona-environments.ts +0 -138
  440. package/src/wirings/persona/persona-mailbox.ts +0 -156
  441. package/src/wirings/persona/persona.test.ts +0 -230
  442. package/src/wirings/persona/persona.types.ts +0 -156
  443. package/src/wirings/persona/validate-personas.ts +0 -137
  444. package/src/wirings/queue/index.ts +0 -29
  445. package/src/wirings/queue/queue-identity.test.ts +0 -454
  446. package/src/wirings/queue/queue-identity.ts +0 -176
  447. package/src/wirings/queue/queue-runner.test.ts +0 -705
  448. package/src/wirings/queue/queue-runner.ts +0 -181
  449. package/src/wirings/queue/queue.types.ts +0 -161
  450. package/src/wirings/queue/register-queue-helper.ts +0 -46
  451. package/src/wirings/queue/signed-queue-service.ts +0 -60
  452. package/src/wirings/queue/validate-worker-config.test.ts +0 -108
  453. package/src/wirings/queue/validate-worker-config.ts +0 -90
  454. package/src/wirings/role/define-system-role.ts +0 -33
  455. package/src/wirings/role/index.ts +0 -13
  456. package/src/wirings/role/role.test.ts +0 -104
  457. package/src/wirings/role/role.types.ts +0 -47
  458. package/src/wirings/role/validate-role-definitions.ts +0 -93
  459. package/src/wirings/rpc/index.ts +0 -8
  460. package/src/wirings/rpc/rpc-runner.test.ts +0 -1130
  461. package/src/wirings/rpc/rpc-runner.ts +0 -566
  462. package/src/wirings/rpc/rpc-types.ts +0 -87
  463. package/src/wirings/scheduler/index.ts +0 -11
  464. package/src/wirings/scheduler/log-schedulers.ts +0 -16
  465. package/src/wirings/scheduler/scheduler-runner.test.ts +0 -835
  466. package/src/wirings/scheduler/scheduler-runner.ts +0 -138
  467. package/src/wirings/scheduler/scheduler.types.ts +0 -42
  468. package/src/wirings/scope/define-scope.ts +0 -33
  469. package/src/wirings/scope/index.ts +0 -15
  470. package/src/wirings/scope/scope.test.ts +0 -159
  471. package/src/wirings/scope/scope.types.ts +0 -42
  472. package/src/wirings/scope/validate-scope-definitions.ts +0 -107
  473. package/src/wirings/secret/index.ts +0 -9
  474. package/src/wirings/secret/secret.types.ts +0 -70
  475. package/src/wirings/secret/validate-secret-definitions.test.ts +0 -232
  476. package/src/wirings/secret/validate-secret-definitions.ts +0 -88
  477. package/src/wirings/trigger/index.ts +0 -9
  478. package/src/wirings/trigger/pikku-trigger-service.ts +0 -107
  479. package/src/wirings/trigger/trigger-runner.test.ts +0 -78
  480. package/src/wirings/trigger/trigger-runner.ts +0 -113
  481. package/src/wirings/trigger/trigger.types.ts +0 -100
  482. package/src/wirings/variable/index.ts +0 -8
  483. package/src/wirings/variable/validate-variable-definitions.test.ts +0 -115
  484. package/src/wirings/variable/validate-variable-definitions.ts +0 -71
  485. package/src/wirings/variable/variable.types.ts +0 -40
  486. package/src/wirings/virtual-user/index.ts +0 -107
  487. package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +0 -115
  488. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +0 -95
  489. package/src/wirings/virtual-user/run-virtual-user.test.ts +0 -774
  490. package/src/wirings/virtual-user/run-virtual-user.ts +0 -684
  491. package/src/wirings/virtual-user/virtual-user-agents.test.ts +0 -72
  492. package/src/wirings/virtual-user/virtual-user-agents.ts +0 -62
  493. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +0 -215
  494. package/src/wirings/virtual-user/virtual-user-catalogue.ts +0 -184
  495. package/src/wirings/virtual-user/virtual-user-derive.test.ts +0 -426
  496. package/src/wirings/virtual-user/virtual-user-derive.ts +0 -161
  497. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +0 -68
  498. package/src/wirings/virtual-user/virtual-user-dispositions.ts +0 -210
  499. package/src/wirings/virtual-user/virtual-user-intents.test.ts +0 -218
  500. package/src/wirings/virtual-user/virtual-user-intents.ts +0 -185
  501. package/src/wirings/virtual-user/virtual-user-rng.test.ts +0 -72
  502. package/src/wirings/virtual-user/virtual-user-rng.ts +0 -50
  503. package/src/wirings/virtual-user/virtual-user-run-store.ts +0 -131
  504. package/src/wirings/virtual-user/virtual-user-scaffold.test.ts +0 -854
  505. package/src/wirings/virtual-user/virtual-user-scaffold.ts +0 -664
  506. package/src/wirings/virtual-user/virtual-user-schedule-store.ts +0 -93
  507. package/src/wirings/virtual-user/virtual-user-schedule.test.ts +0 -280
  508. package/src/wirings/virtual-user/virtual-user-schedule.ts +0 -156
  509. package/src/wirings/virtual-user/virtual-user-target.ts +0 -47
  510. package/src/wirings/virtual-user/virtual-user.types.ts +0 -215
  511. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -709
  512. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -25
  513. package/src/wirings/workflow/feature.test.ts +0 -131
  514. package/src/wirings/workflow/feature.ts +0 -59
  515. package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +0 -569
  516. package/src/wirings/workflow/graph/graph-foreach.test.ts +0 -626
  517. package/src/wirings/workflow/graph/graph-node.ts +0 -115
  518. package/src/wirings/workflow/graph/graph-runner.test.ts +0 -1049
  519. package/src/wirings/workflow/graph/graph-runner.ts +0 -1376
  520. package/src/wirings/workflow/graph/graph-validation.test.ts +0 -27
  521. package/src/wirings/workflow/graph/graph-validation.ts +0 -41
  522. package/src/wirings/workflow/graph/template.test.ts +0 -49
  523. package/src/wirings/workflow/graph/template.ts +0 -42
  524. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -39
  525. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -75
  526. package/src/wirings/workflow/index.ts +0 -107
  527. package/src/wirings/workflow/pikku-scenario-service.ts +0 -1013
  528. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -963
  529. package/src/wirings/workflow/pikku-workflow-service.ts +0 -1993
  530. package/src/wirings/workflow/run-timeline.test.ts +0 -199
  531. package/src/wirings/workflow/run-timeline.ts +0 -185
  532. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -107
  533. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -57
  534. package/src/wirings/workflow/scenario-expectations.test.ts +0 -238
  535. package/src/wirings/workflow/scenario-hooks.test.ts +0 -259
  536. package/src/wirings/workflow/scenario-poll.test.ts +0 -64
  537. package/src/wirings/workflow/scenario-poll.ts +0 -27
  538. package/src/wirings/workflow/scenario-prose.test.ts +0 -275
  539. package/src/wirings/workflow/scenario-prose.ts +0 -86
  540. package/src/wirings/workflow/scenario-run.types.ts +0 -193
  541. package/src/wirings/workflow/scenario-service.test.ts +0 -147
  542. package/src/wirings/workflow/scenario-step-guards.ts +0 -23
  543. package/src/wirings/workflow/scenario-step.test.ts +0 -800
  544. package/src/wirings/workflow/scenario-step.types.ts +0 -262
  545. package/src/wirings/workflow/scenario-surface.test.ts +0 -146
  546. package/src/wirings/workflow/scenario-surface.ts +0 -71
  547. package/src/wirings/workflow/scenario.types.ts +0 -63
  548. package/src/wirings/workflow/workflow-approval-audit.ts +0 -47
  549. package/src/wirings/workflow/workflow-approval-policy.test.ts +0 -594
  550. package/src/wirings/workflow/workflow-approval-policy.ts +0 -68
  551. package/src/wirings/workflow/workflow-approval.ts +0 -290
  552. package/src/wirings/workflow/workflow-child-run-session.test.ts +0 -168
  553. package/src/wirings/workflow/workflow-constants.ts +0 -66
  554. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +0 -116
  555. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -55
  556. package/src/wirings/workflow/workflow-dispatch-relay.test.ts +0 -128
  557. package/src/wirings/workflow/workflow-errors.ts +0 -132
  558. package/src/wirings/workflow/workflow-inline-authority.test.ts +0 -175
  559. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -51
  560. package/src/wirings/workflow/workflow-invocation-id.ts +0 -28
  561. package/src/wirings/workflow/workflow-meta-resolver.ts +0 -45
  562. package/src/wirings/workflow/workflow-mirror.test.ts +0 -171
  563. package/src/wirings/workflow/workflow-missing-meta.test.ts +0 -92
  564. package/src/wirings/workflow/workflow-on-error.test.ts +0 -145
  565. package/src/wirings/workflow/workflow-queue-routing.ts +0 -129
  566. package/src/wirings/workflow/workflow-queue-wiring.ts +0 -149
  567. package/src/wirings/workflow/workflow-queue-workers.test.ts +0 -131
  568. package/src/wirings/workflow/workflow-queue-workers.ts +0 -66
  569. package/src/wirings/workflow/workflow-recovery.ts +0 -192
  570. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +0 -140
  571. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -113
  572. package/src/wirings/workflow/workflow-run-authority.test.ts +0 -212
  573. package/src/wirings/workflow/workflow-run-context.test.ts +0 -172
  574. package/src/wirings/workflow/workflow-run-engine.types.ts +0 -92
  575. package/src/wirings/workflow/workflow-run-ownership.ts +0 -37
  576. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -127
  577. package/src/wirings/workflow/workflow-stalled-recovery.test.ts +0 -152
  578. package/src/wirings/workflow/workflow-status-stream.test.ts +0 -354
  579. package/src/wirings/workflow/workflow-status-stream.ts +0 -144
  580. package/src/wirings/workflow/workflow-step-claim.ts +0 -46
  581. package/src/wirings/workflow/workflow-step-ordinal.test.ts +0 -94
  582. package/src/wirings/workflow/workflow-step-session.test.ts +0 -87
  583. package/src/wirings/workflow/workflow-suspend.ts +0 -61
  584. package/src/wirings/workflow/workflow-terminal-run-guard.test.ts +0 -105
  585. package/src/wirings/workflow/workflow.types.ts +0 -268
  586. package/src/wirings-stay-decoupled.test.ts +0 -130
  587. package/tsconfig.json +0 -14
  588. package/tsconfig.tsbuildinfo +0 -1
  589. package/tsconfig.type-tests.json +0 -15
@@ -1,126 +0,0 @@
1
- import type {
2
- CoreSingletonServices,
3
- PikkuRawWire,
4
- } from '../../types/core.types.js'
5
- import type { MiddlewareMetadata } from '../../middleware/middleware.types.js'
6
- import type { CorePikkuChannelMiddleware } from './channel.types.js'
7
- import { pikkuState } from '../../pikku-state.js'
8
- import { freezeDedupe, getTagGroups } from '../../utils.js'
9
-
10
- export const addChannelMiddleware = (
11
- tag: string,
12
- middleware: CorePikkuChannelMiddleware[],
13
- packageName: string | null = null
14
- ): CorePikkuChannelMiddleware[] => {
15
- const tagGroups = pikkuState(packageName, 'channelMiddleware', 'tagGroup')
16
- tagGroups[tag] = middleware
17
- return middleware
18
- }
19
-
20
- const getChannelMiddlewareByName = (
21
- name: string
22
- ): CorePikkuChannelMiddleware | undefined => {
23
- const store = pikkuState(null, 'misc', 'channelMiddleware')
24
- const middleware = store[name]
25
- return middleware?.[0]
26
- }
27
-
28
- const channelMiddlewareCache: Record<
29
- string,
30
- readonly CorePikkuChannelMiddleware[]
31
- > = {}
32
-
33
- export const clearChannelMiddlewareCache = () => {
34
- for (const key of Object.keys(channelMiddlewareCache)) {
35
- delete channelMiddlewareCache[key]
36
- }
37
- }
38
-
39
- export const combineChannelMiddleware = (
40
- wireType: string,
41
- uid: string,
42
- {
43
- wireInheritedChannelMiddleware,
44
- wireChannelMiddleware,
45
- packageName = null,
46
- }: {
47
- wireInheritedChannelMiddleware?: MiddlewareMetadata[]
48
- wireChannelMiddleware?: CorePikkuChannelMiddleware[]
49
- packageName?: string | null
50
- } = {}
51
- ): readonly CorePikkuChannelMiddleware[] => {
52
- const cacheKey = `${wireType}:${uid}`
53
- let inherited = channelMiddlewareCache[cacheKey]
54
- if (!inherited) {
55
- const resolved: CorePikkuChannelMiddleware[] = []
56
- if (wireInheritedChannelMiddleware) {
57
- for (const meta of wireInheritedChannelMiddleware) {
58
- if (meta.type === 'tag') {
59
- const groups = getTagGroups(
60
- pikkuState(packageName, 'channelMiddleware', 'tagGroup'),
61
- meta.tag
62
- )
63
- for (const group of groups) {
64
- resolved.push(...group)
65
- }
66
- } else if (meta.type === 'wire') {
67
- const middleware = getChannelMiddlewareByName(meta.name)
68
- if (middleware) {
69
- resolved.push(middleware)
70
- }
71
- }
72
- }
73
- }
74
- inherited = channelMiddlewareCache[cacheKey] = freezeDedupe(
75
- resolved
76
- ) as readonly CorePikkuChannelMiddleware[]
77
- }
78
-
79
- if (!wireChannelMiddleware?.length) {
80
- return inherited
81
- }
82
-
83
- return freezeDedupe([
84
- ...inherited,
85
- ...wireChannelMiddleware,
86
- ]) as readonly CorePikkuChannelMiddleware[]
87
- }
88
-
89
- export function wrapChannelWithMiddleware<Out>(
90
- wire: PikkuRawWire,
91
- services: CoreSingletonServices,
92
- middlewares: readonly CorePikkuChannelMiddleware[]
93
- ): PikkuRawWire {
94
- if (middlewares.length === 0 || !wire.channel) return wire
95
-
96
- const channel = wire.channel
97
- const originalSend = channel.send.bind(channel)
98
-
99
- const dispatch = async (index: number, event: Out): Promise<void> => {
100
- if (index >= middlewares.length) {
101
- await originalSend(event)
102
- return
103
- }
104
-
105
- const middleware = middlewares[index]!
106
- await middleware(services, event, async (result: any) => {
107
- if (result === null || result === undefined) return
108
- if (Array.isArray(result)) {
109
- for (const item of result) {
110
- await dispatch(index + 1, item)
111
- }
112
- } else {
113
- await dispatch(index + 1, result)
114
- }
115
- })
116
- }
117
-
118
- return {
119
- ...wire,
120
- channel: {
121
- ...channel,
122
- send: ((data: Out) => dispatch(0, data)) as typeof channel.send,
123
- sendBinary: channel.sendBinary,
124
- },
125
- }
126
- }
@@ -1,116 +0,0 @@
1
- import {
2
- ChannelRPCError,
3
- type ChannelRPCResponse,
4
- } from './channel-rpc.types.js'
5
-
6
- interface PendingCall {
7
- resolve: (value: unknown) => void
8
- reject: (error: Error) => void
9
- timer?: ReturnType<typeof setTimeout>
10
- awaitingHuman?: boolean
11
- }
12
-
13
- /**
14
- * Tracks in-flight reverse RPC calls for one channel. One registry per
15
- * connection: ids are only unique within a socket, and a dropped socket must
16
- * reject exactly the calls that were riding on it.
17
- */
18
- export class ChannelRPCRegistry {
19
- private pending = new Map<string, PendingCall>()
20
- private nextId = 0
21
- private closed = false
22
-
23
- constructor(private readonly timeoutMs: number = 30_000) {}
24
-
25
- public get inFlight(): number {
26
- return this.pending.size
27
- }
28
-
29
- public register(): { id: string; promise: Promise<unknown> } {
30
- if (this.closed) {
31
- return {
32
- id: '',
33
- promise: Promise.reject(
34
- new ChannelRPCError('Channel is closed', 'closed')
35
- ),
36
- }
37
- }
38
-
39
- const id = `${++this.nextId}`
40
- const promise = new Promise<unknown>((resolve, reject) => {
41
- const timer =
42
- this.timeoutMs > 0
43
- ? setTimeout(() => {
44
- this.pending.delete(id)
45
- reject(
46
- new ChannelRPCError(
47
- `Channel RPC ${id} timed out after ${this.timeoutMs}ms`,
48
- 'timeout'
49
- )
50
- )
51
- }, this.timeoutMs)
52
- : undefined
53
- // Never hold the process open waiting on a peer that may not answer.
54
- timer?.unref?.()
55
- this.pending.set(id, { resolve, reject, timer })
56
- })
57
-
58
- return { id, promise }
59
- }
60
-
61
- /**
62
- * Stops the clock on a call whose peer is asking a human. The timeout exists
63
- * to bound a peer that has gone away, and a person reading a prompt is not
64
- * that; `rejectAll` still fails the call the moment the socket drops.
65
- *
66
- * Returns false for an unknown id — a pending frame for a call that already
67
- * timed out is stale, not an error.
68
- */
69
- public hold(id: string): boolean {
70
- const call = this.pending.get(id)
71
- if (!call || call.awaitingHuman) {
72
- return false
73
- }
74
- clearTimeout(call.timer)
75
- call.timer = undefined
76
- call.awaitingHuman = true
77
- return true
78
- }
79
-
80
- /** Returns false for an unknown id, so a late reply is dropped. */
81
- public settle(response: ChannelRPCResponse): boolean {
82
- const call = this.pending.get(response.id)
83
- if (!call) {
84
- return false
85
- }
86
- this.pending.delete(response.id)
87
- clearTimeout(call.timer)
88
-
89
- if (response.ok) {
90
- call.resolve(response.result)
91
- } else {
92
- // Peer input: a non-string name or message falls back rather than being
93
- // attached to an Error, where it would surface as `[object Object]`.
94
- const { name, message } = response.error ?? {}
95
- const error = new ChannelRPCError(
96
- typeof message === 'string' ? message : 'Remote channel RPC failed',
97
- 'remote'
98
- )
99
- if (typeof name === 'string' && name.length > 0) {
100
- error.name = name
101
- }
102
- call.reject(error)
103
- }
104
- return true
105
- }
106
-
107
- /** Without this a caller awaits the full timeout on a connection that is gone. */
108
- public rejectAll(reason: string = 'Channel closed'): void {
109
- this.closed = true
110
- for (const [, call] of this.pending) {
111
- clearTimeout(call.timer)
112
- call.reject(new ChannelRPCError(reason, 'closed'))
113
- }
114
- this.pending.clear()
115
- }
116
- }
@@ -1,117 +0,0 @@
1
- import {
2
- CHANNEL_RPC_PENDING,
3
- CHANNEL_RPC_RESPONSE,
4
- isCapabilityDef,
5
- isChannelRPCRequest,
6
- resolveCapability,
7
- type ApprovalRequester,
8
- type Capabilities,
9
- type ChannelRPCPending,
10
- type ChannelRPCResponse,
11
- } from './channel-rpc.types.js'
12
-
13
- /**
14
- * Answers reverse RPC requests arriving on a channel.
15
- *
16
- * `capabilities` is the authorisation boundary, not a convenience: the peer is
17
- * asking this process to execute code, so only listed names run. An absent
18
- * name is refused exactly like an unknown one, so the caller cannot probe for
19
- * what this end can do.
20
- */
21
- export const createChannelRPCResponder = ({
22
- capabilities,
23
- send,
24
- approve,
25
- }: {
26
- capabilities: Capabilities
27
- send: (data: unknown) => Promise<void> | void
28
- /** Omitted means there is nobody to ask, which refuses rather than runs. */
29
- approve?: ApprovalRequester
30
- }) => {
31
- return async (message: unknown): Promise<boolean> => {
32
- if (!isChannelRPCRequest(message)) {
33
- return false
34
- }
35
-
36
- const refuse = (name: string, why: string): ChannelRPCResponse => ({
37
- action: CHANNEL_RPC_RESPONSE,
38
- id: message.id,
39
- ok: false,
40
- error: { name, message: why },
41
- })
42
-
43
- // Own properties only: an object literal inherits from `Object.prototype`,
44
- // so a peer asking for `toString` would otherwise resolve a real function.
45
- const entry = Object.prototype.hasOwnProperty.call(
46
- capabilities,
47
- message.funcName
48
- )
49
- ? capabilities[message.funcName]
50
- : undefined
51
-
52
- if (
53
- entry === undefined ||
54
- (typeof entry !== 'function' && !isCapabilityDef(entry))
55
- ) {
56
- await send(
57
- refuse(
58
- 'RPCNotFoundError',
59
- `Capability not exposed: ${message.funcName}`
60
- )
61
- )
62
- return true
63
- }
64
-
65
- const { execute, needsApproval, approvalDescriptionFn } =
66
- resolveCapability(entry)
67
-
68
- let response: ChannelRPCResponse
69
- try {
70
- if (needsApproval) {
71
- if (!approve) {
72
- await send(
73
- refuse(
74
- 'RPCNotApprovedError',
75
- `"${message.funcName}" needs approval and there is nobody to ask`
76
- )
77
- )
78
- return true
79
- }
80
-
81
- // Before the asking, not after: an answer arriving past the caller's
82
- // timeout is dropped, silently discarding the human's decision.
83
- const description = await approvalDescriptionFn?.(message.data)
84
- await send({
85
- action: CHANNEL_RPC_PENDING,
86
- id: message.id,
87
- reason: description ?? `approval for ${message.funcName}`,
88
- } satisfies ChannelRPCPending)
89
-
90
- const approved = await approve({
91
- funcName: message.funcName,
92
- data: message.data,
93
- description,
94
- })
95
- if (!approved) {
96
- await send(
97
- refuse('RPCDeniedError', `"${message.funcName}" was not approved`)
98
- )
99
- return true
100
- }
101
- }
102
-
103
- response = {
104
- action: CHANNEL_RPC_RESPONSE,
105
- id: message.id,
106
- ok: true,
107
- result: await execute(message.data),
108
- }
109
- } catch (e: unknown) {
110
- const error = e as Error
111
- response = refuse(error?.name ?? 'Error', error?.message ?? String(e))
112
- }
113
-
114
- await send(response)
115
- return true
116
- }
117
- }
@@ -1,132 +0,0 @@
1
- import type { DeploymentService } from '../../services/deployment-service.js'
2
- import { ChannelRPCRegistry } from './channel-rpc-registry.js'
3
- import {
4
- CHANNEL_RPC_REQUEST,
5
- CHANNEL_RPC_RESPONSE,
6
- ChannelRPCError,
7
- isChannelRPCPending,
8
- isChannelRPCResponse,
9
- type ChannelRPCRequest,
10
- type ChannelRPCValidator,
11
- } from './channel-rpc.types.js'
12
-
13
- /**
14
- * A `DeploymentService` whose transport is an open channel rather than an
15
- * address, so a server-side function can call back into a peer that has no
16
- * inbound route of its own.
17
- *
18
- * It slots into the existing `services.deploymentService` hole, leaving
19
- * `rpc.remote` resolution, session propagation and traceId plumbing unchanged.
20
- */
21
- export class ChannelDeploymentService implements DeploymentService {
22
- public readonly registry: ChannelRPCRegistry
23
- private readonly validateInput?: ChannelRPCValidator
24
- private readonly validateResult?: ChannelRPCValidator
25
-
26
- constructor(
27
- private readonly send: (data: unknown) => Promise<void> | void,
28
- options: {
29
- timeoutMs?: number
30
- validateInput?: ChannelRPCValidator
31
- validateResult?: ChannelRPCValidator
32
- } = {}
33
- ) {
34
- this.registry = new ChannelRPCRegistry(options.timeoutMs)
35
- this.validateInput = options.validateInput
36
- this.validateResult = options.validateResult
37
- }
38
-
39
- public async init(): Promise<void> {}
40
-
41
- public async start(): Promise<void> {}
42
-
43
- public async stop(): Promise<void> {
44
- this.registry.rejectAll('Deployment service stopped')
45
- }
46
-
47
- /** The channel owner must call this — the service has no read side. */
48
- public handleResponse(message: unknown): boolean {
49
- if (isChannelRPCPending(message)) {
50
- return this.registry.hold(message.id)
51
- }
52
- return isChannelRPCResponse(message) ? this.registry.settle(message) : false
53
- }
54
-
55
- /**
56
- * `session` is accepted to satisfy `DeploymentService` and deliberately not
57
- * sent: the peer runs the capability as itself, on its own machine, so a
58
- * session on the wire would carry the caller's credentials while authorising
59
- * nothing.
60
- */
61
- public async invoke(
62
- funcName: string,
63
- data: unknown,
64
- _session?: unknown,
65
- traceId?: string
66
- ): Promise<unknown> {
67
- // Not a security control — the peer must check what it is handed, and a
68
- // hostile caller would send arguments that pass. It catches version drift
69
- // and fails it here rather than inside the peer's process.
70
- if (this.validateInput) {
71
- try {
72
- await this.validateInput(funcName, data)
73
- } catch (e: unknown) {
74
- throw new ChannelRPCError(
75
- `Invalid arguments for "${funcName}": ${(e as Error)?.message ?? String(e)}`,
76
- 'invalid'
77
- )
78
- }
79
- }
80
-
81
- const { id, promise } = this.registry.register()
82
- // A closed registry answers with an already-rejected promise and no id.
83
- // Returning it before the send keeps that rejection from sitting unobserved.
84
- if (!id) {
85
- return promise
86
- }
87
-
88
- const request: ChannelRPCRequest = {
89
- action: CHANNEL_RPC_REQUEST,
90
- id,
91
- funcName,
92
- data,
93
- traceId,
94
- }
95
-
96
- try {
97
- await this.send(request)
98
- } catch (e: unknown) {
99
- // The call is registered before the request goes out, so a failed send
100
- // would otherwise leave an entry whose timeout rejects into an unhandled
101
- // rejection with nobody waiting on it.
102
- this.registry.settle({
103
- action: CHANNEL_RPC_RESPONSE,
104
- id,
105
- ok: false,
106
- error: {
107
- name: (e as Error)?.name ?? 'Error',
108
- message: (e as Error)?.message ?? String(e),
109
- },
110
- })
111
- promise.catch(() => {})
112
- throw e
113
- }
114
-
115
- const result = await promise
116
- if (!this.validateResult) {
117
- return result
118
- }
119
-
120
- // The peer answers with whatever it likes, so this is where a value that
121
- // has been through nothing enters a server-side command.
122
- try {
123
- await this.validateResult(funcName, result)
124
- } catch (e: unknown) {
125
- throw new ChannelRPCError(
126
- `Invalid result from "${funcName}": ${(e as Error)?.message ?? String(e)}`,
127
- 'invalid'
128
- )
129
- }
130
- return result
131
- }
132
- }
@@ -1,65 +0,0 @@
1
- import type { CoreSingletonServices } from '../../types/core.types.js'
2
- import { pikkuState } from '../../pikku-state.js'
3
- import { validateSchema } from '../../schema.js'
4
- import type { ChannelRPCValidator } from './channel-rpc.types.js'
5
-
6
- /**
7
- * A name with no function metadata is left alone: it is a capability this app
8
- * never declared a contract for, and failing it would break callers that
9
- * deliberately treat the value as opaque.
10
- */
11
- const createChannelRPCSchemaValidator =
12
- (
13
- key: 'inputSchemaName' | 'outputSchemaName',
14
- singletonServices: Pick<CoreSingletonServices, 'logger' | 'schema'>,
15
- packageName: string | null = null
16
- ): ChannelRPCValidator =>
17
- async (funcName: string, value: unknown): Promise<void> => {
18
- const pikkuFuncId = pikkuState(packageName, 'rpc', 'meta')[funcName]
19
- if (!pikkuFuncId) {
20
- return
21
- }
22
- const schemaName = pikkuState(packageName, 'function', 'meta')[
23
- pikkuFuncId
24
- ]?.[key]
25
- if (!schemaName) {
26
- return
27
- }
28
- await validateSchema(
29
- singletonServices.logger,
30
- singletonServices.schema,
31
- schemaName,
32
- value,
33
- packageName
34
- )
35
- }
36
-
37
- /**
38
- * Checks a capability's answer against the schema codegen generated from its
39
- * declared return type — the same one an agent tool or an HTTP response is
40
- * checked against.
41
- */
42
- export const createChannelRPCResultValidator = (
43
- singletonServices: Pick<CoreSingletonServices, 'logger' | 'schema'>,
44
- packageName: string | null = null
45
- ): ChannelRPCValidator =>
46
- createChannelRPCSchemaValidator(
47
- 'outputSchemaName',
48
- singletonServices,
49
- packageName
50
- )
51
-
52
- /**
53
- * Checks outbound arguments against the declared input type. Unlike the result
54
- * check this is not a boundary — it catches version drift, where a server built
55
- * against a newer capability signature calls a client that predates it.
56
- */
57
- export const createChannelRPCInputValidator = (
58
- singletonServices: Pick<CoreSingletonServices, 'logger' | 'schema'>,
59
- packageName: string | null = null
60
- ): ChannelRPCValidator =>
61
- createChannelRPCSchemaValidator(
62
- 'inputSchemaName',
63
- singletonServices,
64
- packageName
65
- )